何为 Linux 内核开发,怎么学好 Linux 内核?
此文包含 Linux 系统的学习路径和书籍推荐。我觉得学习 Linux 系统,内核驱动时,最开始只需要 ‘Know what, not know how ’。 不用去探究细节,只需要知道整体的框架,知道有哪些需要我们重视的内容即可。何为 Linux 内核开发?首先,初步认识下 Linux kernelLinux 内核的框架如上图。设备子系统负责和硬件打交道。大部分工作集中在设备子系统部分。内核开发
此文包含 Linux 系统的学习路径和书籍推荐。
我觉得学习 Linux 系统,内核驱动时,最开始只需要 ‘Know what, not know how ’。 不用去探究细节,只需要知道整体的框架,知道有哪些需要我们重视的内容即可。
何为 Linux 内核开发?
首先,初步认识下 Linux kernel
- Linux 内核的框架如上图。
- 设备子系统负责和硬件打交道。
- 大部分工作集中在设备子系统部分。
内核开发是什么?
- 广义上讲,新增或修改上图中内核部分的所有子系统。
- 非 Linux 源码贡献者,一般来说只修改设备子系统部分。
接下来,简单聊聊初学者需要重点关注的三个部分:设备树,字符设备,平台设备驱动。
设备树(DTS)
设备树相当于一份软件中描述硬件结构的配置框图。假设下图为硬件框图:
那么其软件描述的代码片段如下:
/ { // root node
model = "Qualcomm Technologies, Inc. SDM xxx";
compatible = "qcom,sdmxxx";
cpus {
...
cpu@0 {
...
};
cpu@1 {
...
};
};
usb@<address> {
...
};
serial@<address> {
...
};
gpio@<address> {
...
};
intc: interrupt-controller@<address> {
...
};
external-bus {
...
i2c@0,0 {
...
xxx@<address> { // I2C Dev
....
};
};
flash@1,0 {
...
};
};
};
字符设备驱动
- 字符设备驱动是理解设备驱动的基础。
- 大多数设备都可以归于字符设备。
kernel 开发需要什么样的知识储备?
我觉得这部分可以当着 Linux 系统的学习路径了。
C 语言
良好的 C 语言能力是必要条件, Linux 官方推荐了如下书籍。
- The C Programming Language
- Practical C Programming
- C: A Reference Manual
不过我觉得结合如下书籍一步步学习会更适合学习:
《啊哈 C 语言》入门书籍,号称马桶上看的 C 语言,通俗易懂。
《The C Programming Language》的中文版 《C 程序设计语言》,英文版也是很好一个选择的,一书两用,技术和英语都学习了。我觉得这一本是学习 C 语言的朋友们,必读的一本。
3. 《C 专家编程》,这本书主要讲语法特性,告诉我们 C 语言是怎么设计出来的,看了这本书,我们可以更深刻的理解每一行代码。
4. 《C 缺陷与陷阱》,《C 专家编程 》的延续,针对性更强,告诉我们 C 语言这个工具的缺陷与陷阱,让我们使用 c 语言时更加游刃有余。
5.《数据结构与算法分析 : C语言描述》,入门数据结构与算法,也是一本经典书籍,比《算法导论》那边砖头厚的书友好得多。
GNU
这个也可以归为 C 语言里面,内核由 GNU C 和 GNU toolchain 实现,所以如下两方面的知识是需要的。
- GNU C 的编码规则
- GNU 工具链的使用
Linux 基本命令
学习 Linux 前,我们需要先熟悉 Linux 的“命令行 + 文件”的使用模式,要想学好一个东西,开始肯定需要用好这个东西。《鸟哥的 Linux 私房菜》应该是最适合初学者的一本书了。
如果想深入的话,推荐 《Linux 系统管理技术手册》,这本书很厚,算是 Linux 运维必备的手册。
应用程序设计
通过系统调用或者 glibc,学会自己进行程序设计。如果每个系统调用都深入地学习、看书看文档、做实验,这样坚持一段时间,啃下这些东西,就很接近操作系统的原理了,就能看到另一番风景,甚至在应用编程时会有一览宗山小的感觉。参考书籍首推《UNIX 环境高级编程》,有代码,有介绍,有原理,非常实用。
设备驱动相关知识
设备驱动方面的知识看下《Linux 设备驱动程序》应该就差不多了, 国内宋宝华写的《Linux 设备驱动开发详解》也还可以。
内核原理
学习内核原理的话,推荐《Linux 内核设计与实现》,《Linux 内核完全注释》,《深入理解 Linux 内核 》三本书,当然也可以只买《深入理解 Linux 内核 》, 本书言简意赅地讲述了主要的内核机制。
阅读源码
一开始阅读代码不要纠结一城一池的得失,不要每一行都一定要搞清楚它是干嘛的,而要聚焦于核心逻辑和使用场景。
《Linux 内核源代码情景分析》是一本很适合参考的书,这本书最大的优点是结合场景进行分析,看得见、摸得着,非常直观,唯一的缺点还是内核版本比较老
Linux内核学习资料 教学视频 点击获取
Linux内核学习免费课程:https://ke.qq.com/course/3485817?flowToken=1036460
实践
实现一个设备驱动程序,重新实现一些系统调用,或者重新实现一个文件系统或其他子系统等等。这部分难度会比较大,需要自己搞清楚所有细节,但是只要熬出来了,进步的愉悦是难以言说的。
总结
其实这部分内容已经不仅仅是针对内核开发了,而是针对 Linux 系统。C 语言, Linux 命令行,应用程序设计,设备驱动,内核原理,阅读源码, 实践, 只要我们踏实地把这样七个步骤走完,基本就已经领先绝大多数人了(甚至可以说 98% 以上,我也还在路上_),工作中 Linux 系统相关的绝大多数问题也难不倒你了,接下来就是在实战中不停地被捶打,最后成为一代宗师。
当然如果只是对内核和驱动感兴趣,应用程序设计部分可以不用花太多时间。
C/C++Linux服务器开发/后台架构师免费学习课程:https://ke.qq.com/course/417774?flowToken=1031343
更多推荐
所有评论(0)