linux内核学习方法

关于Linux内核的学习,始终找不到合适的入口,比如看书看Linux内核设计与实现,看到第六章内核结构就实在看不动了,太枯燥。
看Linux/Unix系统编程手册,上册看到12章,对系统调用 文件 进程等函数有了大概的了解。看这本书跟Linux内核貌似扯不上太大的关系。
想问下各位,有没有例子多一点,不是那么枯燥的linux内核入门书籍,如果你有更好的入门方法不吝赐教。
欢迎各位过来人指点。

阅读 5.9k
3 个回答
新手上路,请多包涵

内核模块开发指南,虽然老点儿,可以参考,再就是内核中的一些比较独立的模块,可以照着学学

刚开始学学 《LDD3》 虽然书本是基于 2.6 系列写的,但是目前还有过过时,原理是一致的。稍微熟悉一点就看看《深入理解 Linux 内核》这本书会告诉一些设计思路,不是单纯的列举代码,对思想的理解很有好处。精通 《Linux 设备驱动开发》也是一本不错的书。看完这几本书之后就不需要专门去看书了,可以买一些其他书做为辅助查阅即可,并不需要认真的去翻,用的时候翻一翻即可。

那么自然不可能看完这几本书就熟悉 Linux 内核了,更为重要的事就是上 Google 查资料,逛技术分析博客,前人针对性的分析各个子模块,不但清晰而且易懂。等你有了一定的理论知识就可以看看 Linux 代码社区动态,翻一下提交者的代码,看他们如何提交代码。

之后你如果想往社区发展,好好的利用 git,熟悉你这个想分析的模块的所有历史记录,最好的办法就是从一次提交开始,分析他的代码,第一次提交都很简单,比如 NVMe 驱动的代码第一次提交才 1000 行,认真看,很容易理解,虽然现在 NVMe 已经上万行,但是他的核心骨架还是当初的 1000 行,理解之后,后面只是在添加各种小的功能。

等你达到这个层次,恭喜你,入门进入一个真正的 Linux 内核开发者,你仍然需要走很长的路,需要踏过前人已经踏过的坑(Linux 的开发有很多讲究),比如删除链表是需要使用有 safe 后缀的 list_for_each_entry_safe 函数,不然不是安全的,比如 bio 的 endio 回调中一定需要使用 spin_lock_irqsave 而不能是普通的 spin_lock 锁,这些都需要慢慢的自己去发现,因为没人会告诉你为什么,你得自己去找原因。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏