学习linux kernel的建议

 学习 linux是要有几个阶段的。 开始看ulk, ulk最好的地方就是他所倡导的学习方法特别好。当你想学习某方面时,先看头文件,在没把每个数据结构中的每个数据元素弄清楚之前不要看实现代码。读完头文件,意味着其中的组织关系跟别的地方的联系就清楚了,这时候你去看实现的代码你会发现他已经做的正是你所想的。跟着ulk把这些基本的概念搞懂,至少当你看完某一章,下次在别的地方看到这个概念的时候你要知道是什么。 相比较而言另歪的几本书在这方面有所欠缺


第二遍就可以看代码了。 在这很多人可能说拿来一两本书狂翻了。 这样是不对地。 要直接看代码。有了代码就有了一切,你所要做的就是弄懂代码。当然中间可能遇到不会不懂的地方,这时候才去查书。在linux方面,书只能是工具书,当你需要的时候再去看。不想c++,java,有自己的思想在里面,换句话说是比较简单的,我们可以从书本上直接读到。 linux的开发设计思想只能从代码里得到。 因为很深很难,很少有书本能够从整体上领略。事实上现在的linux除了linus等区区几个核心开发人员能够从整体上把握得了其他人都只是对某个方面比较熟悉而已。


你所说的这几本书ulk的大约2/3的核心章节我对着代码读过3-4遍了。正在快速的浏览linux内核分析。情景分析我记得是2.4得把?记不清了因为没仔细看过。linux内核设计与实现是跟ulk一起对着看的。还有一本深入理解虚拟内存管理。因为vm是最难的所以当时单独买了本书看。


看代码的目的首先是要弄明白某个方面的实现。其次最关键的是要把各个地方的内容联系起来。 你可以查一下现在确实还没有一本书这方面能够讲得很明白。? 所以我们要多读代码,自己去理解。 学linux是个循序渐进的过程,千万不要急。 两年,三年经验仅仅算是入门。。。。在这要说一下: 两年之前根本别妄想这写代码。当你对基本概念都了解了,对常见的实现啊什么的也都知道得差不多了,通过做些项目了解更深层的东西,比如如何用cache,lock,还有尝试着去理解 recursion.? 这些也就是尝试着去理解设计了。


总而言之学linux是个艰苦的过程,没有强烈的愿望信心很容易失败的。国内真正懂linux内核的人没多少,大多数大多数所谓的资深工程师只能开发写小的device driver,更进一步的最多也就只能做移植. 这也是为什么linux世界里还看不到中国人做贡献。? 不像c++, java,学上两年三年就可以跟着团队做东西了,需要做的就是熟悉理解这门语言。 kernel完全不一样。需要你对整个的计算机系统都要有很全面很深入的了解。算一下从大约大二开始的课程:组成原理,数据结构这是两门大学里最关键的课程也是学kernel的基础, 离散数学里面的树图这是学fs,device driver需要的知识。汇编啊接口啊到处都能用到。操作系统肯定密切相关。编译原理在调试的时候真的能用到很多。计算机网络的osi分层模型的设计思想在fs里到处都是。 所以计算机的基础的课程都需要,都要熟悉理解。我不知道你现在大几,但如果你希望真正的做kernel的话还是多学学这些基础知识吧。 他门会让你受益终身的。

如果只是现在不是太确定要做这方面的东西,只是想学学linux的话,直接去看apue,把里面的知识都动手写代码实践一边就差不多了。? 真的没必要学kernel.? 一年两年的时候都仅仅是入门。? 我现在跟motorola美国做东西。 90%以上的人都有10+的linux内核工作经验,从他们身上我最直接的感触就是他们从来都是站在一个大的内核背景上去思考某方面特定的实现。? 跟我们从底往上去尝试猜测着做东西的思维模式是完全不同的。? 这才是真正的linux开发。这些都需要时间。

评论:

3 条评论

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注