如何读 Linux 内核

linux内核读文件代码分析 Linux用户态read api怎么与底层交互? 阅读详情

本文是关于内核入门的思路,并不涉及内核本身。本文纯属个人观点,不成熟。


一 基础


1. 汇编语言与 x86 体系结构

理解操作系统要先理解计算机,理解计算机需要理解汇编。当然,内核的大部分都使用 C 语言进行开发,在 2.6.11 中, arch/x86/boot/setup.S 中,实现了操作系统启动的初始化工作,后来在 3.0+ 中也用 C 来实现了。
学习 x86 而不是其他体系的理由是,你的笔记本和台式机都是 x86,仅此而已。
关于汇编,推荐的书目是《Professional assembly programing》,因为这本书非常简单,尽管知识面比较狭窄,但是初期够用。汇编学习比较漫长,没有耐心可以暂时先跳过深入学习。


2. C 语言

肯定必须非常熟悉,程序员必练。
推荐书籍:丹尼斯里奇的《C 程序设计语言》。


3. Unix 编程经验

用 C 或者 C++ 写真正的代码。至少得知道,Unix 大概是个什么样子。Linus 说,Unix 有六个基本系统调用(open, close, read, write, fork, exec),然后加上 pipe。


二 内核编译

这事情其实没有实际意义,你都还没开始写代码呢......但是这会让你的心里有个大概的认识:我后面的工作,会这样子嵌入内核中。


1. 内核的选择

一般情况考虑从实际出发,公司 / 实验室的人用什么,跟着做。如果你只是自己玩,那就随意,建议和你的 guest os 版本接近,否则比较调整和编译选项比较痛苦。


2. Guest OS 的选择

没有太多经验,但是倾向于 Gentoo 这种比较开放的,像 ubuntu 这种隐藏的事情较多的,不是一个好选择,但是如果你只是写一个模块而不进入内核,ubuntu  OK 的。


3. 虚拟机

VirtualBox 是一个比较理想的选择,而且允许 shared folder 和 snapshot 这两个非常非常重要的特性,特别是 snapshot,也许你可以参考这个: 点击打开链接 。


4. 编译安装

参考此处: Compile kernel in the ubuntu way , 或者参考自带的 README 文档(后者更加好)。注意下要使用你的 guest os 的 config 而不是 defconfig,当这可能导致内核编译非常漫长,非常巨大(你可以自己根据 guest os 的 config 来调整编译选项)。随后你可以 
uname -r
检查一下自己的版本,看看对不对,然后就没了,一般装上新内核之后不去运用新特性的话,看不出什么区别。


三 内核模块

或许是时候你应该写一个内核模块的 hello world 了,你肯定会感到非常开心,因为 part 2 的环境建立通常浪费你 1~2 天时间,而且很 boring。

推荐的书目是:《 The linux kernel module programing guide》,电子书,非常短,真正的 hello world,给你一个对于内核的,比较具体的初步认识。这一部分其实是比较容易的。

如果涉及驱动,内核的 Document/kernel-docs.txt 推荐了一本《Linux Device Drivers》,个人感觉可以参考。


四 内核本身

推荐的书是《Understanding the linux kernel》,就算你是对于计算机基础薄弱,一样能看懂,非常厚,建议先看附录的计算机启动,初步不用深入理解,先看个大概流程,然后再开始看正文。

如果你现在要在内核中做改动,个人认为《深入理解 linux 内核架构》不错,纯工具书,如果要给内核文件系统增加功能或者机制,很好的参考书。

不要看《Linux kernel develoment》,个人认为不三不四的一本书,逻辑混乱。

最重要的,读代码。

【Telephony】APN配置及加载流程&项目实践(AOSP) 学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。 阅读详情

相关推荐

ESP32+micro-ROS机器人开发实战:轻量级ROS2嵌入式集成

ROS2是现代机器人软件栈的核心框架,其基于DDS的分布式通信与QoS保障能力为多节点协同提供基础支撑;而micro-ROS作为专为微控制器优化的ROS2兼容中间件,解决了资源受限设备(如ESP32)接入ROS2生态的关键难题。其通过分层架构将DDS通信下沉至上位机Agent,使MCU仅需运行轻量Client,大幅降低内存开销(实测<180KB)并保留标准ROS2接口语义。该方案广泛应用于教育机器人、移动底盘、传感器节点等嵌入式场景,尤其适合基于ESP-IDF开发的Wi-Fi/BLE物联网机器人系统。本文以

weixin_29025501的博客 400

Linux中NR的含义,awk之NR==FNR,如何理解呢

转载:https://www.cnblogs.com/irockcode/p/7044722.htmlnr,表示awk开始执行程序后所读取的数据行数.fnr,与nr功用类似,不同的是awk每打开一个新文件,fnr便从0重新累计.下面看两个例子:1,对于单个文件nr 和fnr 的 输出结果一样的 :2,但是对于多个文件 :在看一个例子关于nr和fnr的典型应用:现在有两个文件格式如下:想要得到的结果...

weixin_31319319的博客 3333

别再乱调NvM_WriteBlock了!手把手教你搞懂Autosar NVM状态机与读写时序

本文深入解析Autosar NVM状态机与读写时序,帮助开发者避免常见错误。通过详细的状态机解读、最佳实践代码示例和异常处理策略,提升嵌入式系统中数据存储的可靠性。特别针对NvM_WriteBlock的调用逻辑和状态机机制进行实战讲解,解决工程师在实际开发中遇到的异步写入问题。

weixin_33701617的博客 344

linux awk命令NR详解,awk命令之NR和FNR变量用法详解

0、说明刚好用到awk的NR和FNR这两个内建变量。经过一些测试大概熟悉其用法,这里记录下(本文只是用NR和FNR变量来判断当前读入的是第一个还是第二个文件,好对每个文件分别运行指定的脚本。需要注意的是只有读入的文件数小于或等于2个的时候才能使用NR和FNR来判断当前读入的是第几个文件,超过2个文件将无法判断)1、NR和FNR的作用演示NR和FNR都可以为awk读入的文件每行数据增加显示行号。不同...

weixin_39607935的博客 1万+

跟着团子学SAP EPPM:项目管理常见的集成场景(PPM\PS\MS Project)

在SAP的EPPM解决方案中,针对企业战略级别的投资组合管理首先是定义合适的投资组合的层级结构,在投资组合下可以通过不同维度去定义投资篮(Portofolio Bucket)进行层层拆分,在最下层级的投资篮下可以分配明细的投资项(Portofolio Item),投资项可以是独立的一个一个具体执行的项目,也可以是单纯的一次服务等等。 今天主要聚焦在投资项的维度展开讲一下在SAP中投资项常见的几种集成模式: 集成场景1:使用PPM中的Project Management进行项目管理 第一个场景是在创建投资项

Lucas1211的博客 4139

【AutoSar CP】SoAd模块

比如对于特定的PDU,其PduId在程序编译时就确定了,但是在代码运行中,该PduId可能需要发送到不同的远端ip,这时就需要用SoAd来设置连接远端地址信息。SoAdSocketConnectionGroup(连接参数)SoAdSocketRoute(接收数据)SoAdRoutingGroup(开关)SoAdPduRoute(发送数据)

至道无难,唯嫌拣择。 1686

linux常用命令(二)

linux常用命令(二)

m0_61820867的博客 590

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程

看过我博客的会发现我写了很多CESM的笔记,但是说实话,平时科研我其实更多时候是GEOS-Chemuser。之所以写了很多CESM笔记,其实是因为不会,就边学边写。然后GEOS-Chem已经用比较熟了,所以也没想过做笔记啥的。但是我发现越来越多朋友私信我各种CESM问题,我觉得我可能给大家营造了一种我是CESM达人的错觉。感觉自己有点跑偏了呢。公平起见,我觉得我有必要补充点GEOS-Chem笔记。 GEOS-Chem是研究大气化学的人常用的大气化学传输模式,在全世界范围的大气化学研究组中被广泛使用。不过.

砍柴姑娘Jourosy的博客 1万+

linux file-nr 内核参数,linux下设置最大文件打开数nofile及nr_open、file-max说明

在开发运维的时候我们常常会遇到类似“Socket/File: Can’t open so many files”,“无法打开更多进程”,或是coredump过大等问题,这些都可以设置资源限制来解决。今天在教某位客户设置最大文件数方法时,搜索网上的方法时发现各家说法并不一致,便写了这篇文档。通常对linux某个用户设置系统资源,我们都已经知道可以用ulimit命令来查看和设置。表 1. ulimit...

weixin_28873927的博客 1310

华为OD技术面真题 - JAVA开发 - 1

汇总华为OD技术面八股JAVA八股,高频技术真题并提供详细解答。

qq_45776114的博客 1201

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 711

深入分析Linux内核源代码6-Linux 内存管理(1)

每天十五分钟,熟读一个技术点,水滴石穿,一切只为渴望更优秀的你! ————零声学院 存储器是一种必须仔细管理的重要资源。在理想的情况下,每个程序员都喜欢无穷大、 快速并且内容不易变(即掉电后内容不会丢失)的存储器,同时又希望它是廉价的。但不幸 的是,当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构, 即少量、快速、昂贵、易变的高速缓存(cache);若干兆字节的中等速度、中等价格、易变 的主存储器(RAM);数百兆或数千兆的低速、廉价、不易变的磁盘。如图 6.1 所示,这些资 源.

资料qun832218493 3024

claude code desktop中出现Doesn‘t look like an Anthropic model - expected a gateway model route 解决方案

本文主要介绍了claude code desktop中出现Doesn’t look like an Anthropic model - expected a gateway model route referencing an Anthropic model和Server is busy. Retrying的解决方案,希望能对使用claude code desktop的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

读核日记&《Linux内核完全注释》

《Linux内核完全注释》 V1.9.5版说明 主站下载: http://www.oldlinux.org/download/clk011c-1.9.5.pdf 主站如有问题不能下载,可以从其他镜像站点下载: http://www2.oldlinux.org/download/clk011c-1.9.5.pdf http://oldlinux.qbang.org/download/clk011

陈巍@人生态度 1930

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux内核原语(六)——读-写自旋锁(rwlock)

Linux内核原语(四)——读-写自旋锁(rwlock) 小狼@http://blog.youkuaiyun.com/xiaolangyangyang 上一章聊到了内核的自旋锁 spinlock 相关的内容,试想这样一种场景:一个内核链表元素,很多进程(或者线程)都会对其进行读写,但是使用 spinlock 的话,多个读之间无法并发,只能被 spin,为了提高系统的整体性能,内核定义了一种锁: 1. 允许多个处理器进程(或者线程或者中断上下文)并发的进行读操作(SMP 上),这样是安全的,并且提...

Hello Mr.Z的博客 735

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

linux内核打开一个文件的全过程,Linux内核读文件过程-LinuxKernelExploration.PDF

Linux内核读文件过程-LinuxKernelExplorationLinux 内核读文件过程Linux内核读文件过程1Linux 内核读文件过程目 录Table of Contents1 概述42 虚拟文件系统与ext4文件系统层62.1 sys_read ()62.1.1 fget_light ()和fput_light ()72.2 vfs_r...

weixin_30767257的博客 324

linux内核新书,关于Linux,你该读哪些书

这是应读者要求写的一篇综合图书推荐文章,关于Linux的。图灵Linux经典书自然不少,另外,新出版的ARM,林纳斯大神的传纪,也深受读者欢迎。这次总结了每本书的优缺点,希望大家能找到真正适合自己阅读的书。原书名:Beginning Linux Programming作者:Neil Matthew, Richard Stones译者:宋健建 陈健书号:978-7-115-22821-5定价:99页...

weixin_42502448的博客 1169

读Kernel感悟-Linux内核启动-内核的生成

这段时间在看《Linux内核源代码情景分析》,顺便写了一些感悟。读内核源代码是一件很有意思的事。它像一条线,把操作系统,编译原理,C语言,数据结构与算法,计算机体系结构等等计算机的基础课程串起来。        我看内核源代码是用lxr+glimpse(不一定要自己架,可以直接访问校内外的lxr网站)的。如果在windows下也可以用source insight。以下的当前路径为内核源代码路径

李亚锋老师 1998

读Linux内核kfifo

内核kfifo简约高效,匠心独运,有一下特点: 保证缓冲区大小为2的次幂,不是的向上取整为2的次幂。 使用无符号整数保存输入(in)和输出(out)的位置,在输入输出时不对in和out的值进行模运算,而让其自然溢出,并能够保证in-out的结果为缓冲区中已存放的数据长度。 将需要取模的运算用 &amp; 操作代替( a % size = (a &amp; (size − 1)) ), 这需...

linux_Allen的博客 1246

linux内核源码怎么读,linux内核源码阅读工具

一 linux内核源码阅读工具windows下当然首选source insight, 但是linux下就没有sourceinsight这么优秀的工具了,但是也有不少的替代品,但觉绝对部分人会选择vim+ctags+cscope的组合,还有部分人或选择wine中的sourceinsight或选择navigatror,当然对于代码阅读来说vim+ctags+cscope的组合还是比较好的一个选择方案,...

weixin_35725389的博客 244

Linux 内核同步(三):读-写自旋锁(rwlock)

读-写自旋锁 上一章聊到了内核的自旋锁 spinlock 相关的内容,试想这样一种场景:一个内核链表元素,很多进程(或者线程)都会对其进行读写,但是使用 spinlock 的话,多个读之间无法并发,只能被 spin,为了提高系统的整体性能,内核定义了一种锁: 1. 允许多个处理器进程(或者线程或者中断上下文)并发的进行读操作(SMP 上),这样是安全的,并且提高了 SMP 系统的性能。 2....

StephenZhou 6793

读/写信号量--来自深入理解Linux内核

读写信号量类似与读写自旋锁,区别是读写信号量再次变为打开之前,等待进程挂起而不是自旋。 结构 并发读信号,写者互斥访问。内核按照严格FIFO顺序处理等待读写信号量的所有进程。如果读者或写者进程发现信号量关闭,这些进程就被插入到信号量等待队列链表的末尾。 ...

u012489250的博客 639

linux内核 按行读文件,Linux内核读写文件以及从SD卡读文件并处理的方法

在Linux的应用平台上,很多时候我们需要用到从SD卡读数据来使用,比如升级触摸屏固件,比如载入调试文本等,都需要用到Linux的文件系统来操作。(1)基础函数这些函数主 要有: filp_open() filp_close(), vfs_read() vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/uaccess.h头文件中声明。a,打开文件...

weixin_36317317的博客 1004

读《Linux内核设计与实现》我想到了这些书

从题目中可以看到,这篇文章是以我读《Linux内核设计与实现》而想到的其他我读过的书,所以,这篇文章的主要支撑点是《Linux内核》。      开始读这本书已经是很久以前的事了,不过,由于时间和精力原因,没有认真的分析和深入研究这本书所涉及的诸多内容,现在想来,仍旧很是遗憾,直到最近,再次把这本书拿过来阅读,才勉强可以说是对书中的知识点有了一定的了解,我说的这种了解,远达不到精通的地步,可能略懂

张勤一 1万+

读 Linux内核设计与实现 我想到了这些书

读 Linux内核设计与实现 我想到了这些书

yffhhffv的博客 152

2020-04-12-Linux内核32-读-拷贝-更新(RCU)

layout title subtitle date author header-img catalog tags post Linux内核32-读-拷贝-更新(RCU) Linux-读-拷贝-更新(RCU)工作原理以及应用场合 2020-04-12 Tupelo Shen img/post-bg-uni...

shenwanjiang111的专栏 533

Linux内核源码应该读的那些文档

Linux内核源码自带了很多很优秀的文档信息,那么这些文档的大概阅读顺序是什么呢?

落寞微蓝 4858
上一篇: virtualbox linux development environment setup
下一篇: 关于如何进行论文阅读
吴-俊宇
博客等级 码龄12年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值