序幕:
试想一下这样的情景。
某天你到一座陌生的城市去旅行,买了一份城市的地图。当你进入这个城市的时候,期望着从地图上获取尽可能多的导航信息,可是你还是迷路了。因为城市在不断的建设,你手中的地图很可能已经过期了,地图上的古迹已经变成了摩天大楼;也可能地图上标的很明确,但是当你站在路口时还是不知该往哪个方向前进,因为路口没有相应的指示牌,或者路牌上使用的不是你掌握的语言。。。甚至是一些你永远也猜不透的缩写。。。
如果你顺着大路前行,或许可以找对方向,但是你却错过了埋藏着城市密码的小胡同,那里才是城市之间差别的符号。
对于一个小县城来说,即使你迷路了,可能多绕上一两个小时,就能把整个县城转完。
对于一个社区里土生土长的人来说,他根本就不需要地图,即使闭上眼睛也能够摸回家。
如果你想了解一座城市,仅依靠一次三日游是肯定不够的,你需要在这座城市里住上几年,并结交一些当地的朋友,才有可能了解它的风俗人情。
在城市中住过的人,身上一定会有些城市的烙印,一眼就能分辨出来。
内核:
内核就像一座大城市。你买的一些参考书籍可以比作是地图,有些地图出版的时间比较近,有些包含道路的详细信息,或者有些只是一张简单的旅游图。内核总是在不断的演化着,你手中的书籍永远都无法追赶上内核的步伐。
关于从老版本内核开始学习,试想一下给你一张南京50年前的地图,你还能够找到路吗?帮助肯定是有的,你可以从中知道一座城市必须的一些设施,如:学校、医院等。
对于初次接触内核的人来说,无疑是一件很悲催的事情,如果英文水平再稍微差些那简直就是坐到了茶几上。
如果能够有一份参考代码,代码中在关键的数据结构地方使用中文进行了注释讲解,各个函数的调用链描述的很清晰,就好像路口的指示地图一样,我想这一定会降低你的茫然感,更容易让你到达目的地。
计划:
本计划起初只是个人的一个学习总结,在看书时以便自己更容易的结合代码进行学习,也作为代码复习的一份参考资料。
很多内容都是来自于手边的参考书和网络上的文章,也有自己对代码的一些理解。
希望能够把这样的注释做成内核代码实时的电子地图,跟上内核发展的步伐。
概念上和内核代码本身是开源的一样,类似一个大家都可以编辑的Wiki百科。
也有点像完全注释或情景分析,不过这是一个电子版的,并且向所有人开放。
话说回来,手中常备几本内核书籍也是必须的。
代码:
内核代码保存在github上,由torvalds/linux代码树fork而来。
git地址: git://github.com/kernel-digger/linux.git (只读权限)
网址: https://github.com/kernel-digger
代码树中含有2个分支,master和comments。
其中master分支保持和最新内核代码一致,我会将最新的代码变化merge过来。
comments分支用于增加中文注释,同样内核代码部分也会和最新代码进行同步。
增加注释的格式:
1、使用C的注释风格:/* ... */,尽量在原代码的前一行或后一行添加,以便合并新代码。
2、文档可以进行逐行或逐段翻译,或者仅注释一些生词也可以。
工具:
我是在Windows环境下使用SourceInsight阅读代码,git工具为TortoiseGit。
如果你对这个学习计划感兴趣,并愿意分享你在学习内核代码时体会到的乐趣,或是传承一些你所积累的经验。
欢迎给我kernel.digger@gmail.com发邮件交流。
本人水平有限,在对代码的理解上必定有很多错误之处,还望不吝指出,万分感谢。
版权:
既然代码来自于开源,所以我也没什么版权好保留的。
当然如果你认为代码中的一些注释侵犯了你已出版或发布的文章的版权,请及时邮件告知,我会改用其他的描述方法或按照你的要求将相应部分删除。