永发信息网

怎么开始读Linux内核源码?

答案:1  悬赏:30  手机版
解决时间 2021-01-26 11:44
已读了《Linux内核设计与实现》,对内核有了大概的印象,但不知道从什么地方开始下手。
希望能告知阅读的路线,谢谢

PS:请勿复制一堆内容
PPS:Quora的连接可以,我不会搜。。。
最佳答案
本人是一名 android display方面的工程师,结合实际工作经验聊聊(观点未必正确)
1. 准备工作:选择什么样的版本,使用什么样的工具,这个需要考虑好。
如果是要参考书的话,kernel版本一般都应该选择和书里面同步的版本,不要去选择最新的版本。因为最新的版本,各种改动比较多,反而对不上书了。
工具问题,你可以选择windows下的source insight,也可以选择linux下vim+ctags;

2. 第一遍浏览,我建议是先把kernel里面的 start_kernel() 函数里面的东西看清楚(不一定看明白),看看这个过程中,出现了什么玩意,有哪些分支,并将分支初略的画出一张图来(当然,我自己并没做到这一点,有点讽刺了)。
这里面最重要的几个地方,我个人认为,应该搞明白module机制,它是怎么通过编译链接脚本放在特定的区域,然后系统起来后,又是如何去(按照什么规则)去加载这些模块;
应该搞明白sysfs系统,这个对于驱动和用户空间的连接,有非常大的作用;
系统调用的open()应该走一遭,看看用户空间到kernel之间参数是如何传递,又是怎么通过vfs系统,把open的动作最终落实到某一个驱动的open()上去的;
对kernel启动过程中,内存的分配算法,是怎么从伙伴算法切换到最终的算法上,也应该略有耳闻;对fork()函数的过程有所明白。
对kernel中基本的数据结构实现过程、锁机制实现过程要有概念:
这一部分,总结起来,应该看的路线是:

start_kernel()
module_init() 宏实现 // 看这个的时候,强烈建议,把makefile真正的意图弄明白
open() 系统调用
fork() 系统调用
sysfs 框架实现
双链表是如何实现的;
锁最终是依靠什么来保证的?(其实还是硬件来保证的)

对于数据结构和锁这部分,就按照《Linux内核设计与实现》里面的东西挨个挨个看。有兴趣,自己也可以实现一个双链表公共API,随便哪个项目,一旦用上,直接抛进去,也未尝不可。

第一遍浏览,窃以为,上面这几部分看明白后,kernel的代码对你依然很难,但已经不再有神秘的面纱。
后续,你想研究某个模块,直接快速定位到那边去就行。

3. 在完全用眼睛看完上面这部分内容后,kernel的路或许找到了,但是,万里长征的第一步,并没有迈出。这个时候,动手是很重要的了。
网上有各种方法,比如说,去kernel maillist里面订阅bug,然后自己试着解bug,此方法可取,而且是非常好。这里会遇到一个问题是,我们该怎么调试?
有人是架各种虚拟机或者多台物理机一起开干,这个可以有。(但是本人动手能力确实有限,这个没干成,本人是后面借助了公司的开发板)
如果你也像我一样,动手能力不足,如果你恰巧是手机或者类似手机开发公司的,你可以直接使用公司的开发机,通过串口log,将printk()的级别设置为3,把你需要的信息打印出来;
如果你是学生或者爱好者,可以花500左右人民币,去淘宝上买一个开发板,也是带串口的,所有的debug信息都是通过串口打印出来,保存到一个Log文件中,然后分析;
至于买什么样的板子,你可以随便选择,经典的s3c2440也行,高端点的树莓派,或者全志什么的,都可以。(不推荐全志,他们添加和修改硬件比较多,驱动也许不好搞)

4. 选择你喜欢的模块,进行深入研究,通过log打印,反复推敲,这个时候,bug是最好的导师。多关注kernel/Documents/ 目录下的文档。
你需要注意的是,一定要把该模块无关的东西砍掉,否则,生命是有限的,而代码是无限的。
最后一句话是,在用眼睛看完后,思考过后,还得动手,然后再思考。否则,只读的话,仅能扫盲。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我就冬天穿了件呢子大衣,不漏胳膊,不漏腿,
物理第三题答案说平放以后压强相等为什么?不
成语林下风气的意思是什么啊?有知道释义的请
白羊座女生适合什么样的衣服?
太田顺也(神主)喜欢喝什么牌子的酒
圆有没有离心率和准线?
梦幻电玩娱乐城地址好找么,我有些事要过去
湖北省襄樊市襄阳区 以前有个叫太平公社的地
据新华社2009年1月26日报道:2009年整个南水
天蝎座的他说爱我,我该相信吗?
同心合十 字谜 打一个字
成语李代桃僵的意思是什么啊?有知道释义的请
在超市里买了东西可是收银员忘了给我一支笔结
我不小心把我的小说别给删了应该怎么办,(汤
六年级上册英语复习资料
推荐资讯
甘溪村地址有知道的么?有点事想过去
如何给潘氏维字辈起名
在△ABC中,AB=BC,角ABC=90°,D是AB上一点,AE
为什么许多歌手把"低绮户"中的绮唱成yi
青海省西宁市人文怎么样
什么时候移植柿子树好
蓝天幼儿园(成山大道中段)地址好找么,我有些
现在显卡买980好,还是买1066好
相同读音ight的英语单词
怎么快速找出美女找茬的不一样
铁矿石品位的符号为()。
2004年8月24日晚上7点30出生的孩子是什么命?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?