LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 40919|回复: 65

有矢而发,触类旁通[内核学习的方法论]

[复制链接]
发表于 2004-7-27 11:23:15 | 显示全部楼层 |阅读模式
一.研究内核的目的
欲举其事,先正其道。要谈论内核的研读以及交流心得,前提必须得有一个恰当准确的目的,方能收获良多。
很多人都有这样一个疑惑,为什么要研究内核呢?我们又不是内核开发者(或许你将来就会成为Linus的助手:-)。此言差矣,众所周知,Linux包含两层含义,一是内核,二是发行版本,前者乃核心精华,后者则是应用方案,二者皆不可废。知前者而略后者,思而不学也;略前者而知后者,学而不思也。

学习是循序渐进的,我们学习Linux,首先接触的就是各具特色的发行版本,简单轻松地入门,在学习的过程中逐渐对Linux框架有了一个初步的认识,浅白地说,就是懂得了Linux世界的游戏规则。在你自身能力提高的同时,你会发现,进步的速率似乎在下降,为什么呢?那是因为你开启的只是自己的记忆力而非智力,游戏规则是核心的高层封装,它给予用户乃至程序员的接口是友好的(相信很多人都陶醉于unix的工具哲学吧),而这类接口经多年的黑客熏陶,已经变得十分成熟,我等只需识记便可。举个例子吧,发行版本之间最大的差异就是它们各自的FHS(文件目录框架)以及软件包管理机制,如gentoo的portage(port树)以及emerge,再如Debian的apt-get,用户只要精通此二处,即可在该发行版本的世界里驰骋无束,而精通的途径却都一样,那就是识记规则。当你已经对这些规则滚瓜烂熟时,你会发现,自己只是从用户角度看问题,而不是从开发者的角度看问题,两者的差异在于你在Linux世界里是否具有创新力。

对比国内外的Linux开源社区,不难发现,我们的水平依然很低,很多创新点都是外国开源社区所占据的,我们只能跟着走,处于被动的局面。还是举例来说明问题吧,比如你是一个lfs爱好者,初学者则按lfs文档行事,而老鸟们呢,则参阅lfs hints来改造自己的系统,殊不知,此二者都非国人所力,lfs文档是外国人开发的,lfs hints也是外国人写的。在这里并不是说我们不应该引进技术,而是从中看到,我们的确缺乏创新力;再比如新内核采纳的udev(大家应该不会陌生吧),它只是一个逻辑I/O层规则,乃是devfs进化而来,大家同在开源社区下学习,为什么外国人能思考出创新的udev呢?归根到底,那是我们不重视最底层的研究,立足于高层封装看问题,与使用微软的玩具软件何异?我们老是谈论要自己的发行版本,可是有没有想过,发行版本不仅仅是把现成的内核用shell和X包装起来而已,如果是这样的话,redhat也不会成为世界上最流行的发行版本之一(redhat在开源社区大多数项目中都占有一席位,每每以创新技术来推出新的发新版本,革新的NPTL线程库就是一个好例子)。


可见,立足于内核看问题,目的有二:
1.学一当十,把握创新的主动权
2.知其然而知其所以然,从深层次理解Linux,使之在发行版本的日常操作能触类旁通,游刃自如


二.研究内核的境界
-->-->开发
现在国人研读内核的境界大多在于(包括我自己:-),而我们的最终境界是开发,也就是成为内核的开发者之一,这样才真正使中国的Linux事业独立自主!

三.研究内核的态度
Linux内核发展了十年有余,体系变得十分庞大,可谓盘根错乱,我们读它,往往很难直接掌握全局,结合我们的实际情况,最好是从日常使用Linux发行版本的过程中,遇到一些很奇妙的问题,就应该结合它来研读内核的相关项,触类旁通。比如说,开机遇到kernel panic的问题,我们就应该找到,在init/main.c中的init函数就有这样一句话,然后顺着这个思路找出解决办法,最终发现原来必要的文件系统模块必须编译进内核(自举性矛盾),又比如说,我们要改造发行版本的运行级别脚本,就应该注意到,有些脚本是运行在内核态的(如linuxrc),大多数脚本是运行在用户态的(rcX.d),了解了大方向,就好编码了。
游击散打,逐渐包围大中心

当然,内核研读还得有好用的工具辅助才行,还要有资料(站在巨人的肩膀上,看得更远嘛),这些我都会用置顶帖给出。

有矢而发,触类旁通。希望大家多多交流,共同进步。

ps:我就任斑竹,定竭尽全力,整顿版务,各位兄弟互勉之。谢谢!
发表于 2004-7-27 11:32:33 | 显示全部楼层
教主一出手,果然与众不同。
 楼主| 发表于 2004-7-27 11:35:33 | 显示全部楼层
最初由 windrose 发表
教主一出手,果然与众不同。

今后还得请各位老行尊多多帮忙,发扬内核研读的风气。(据我所知,很多斑竹都多少读过内核)
东方在此谢过!
发表于 2004-9-18 16:08:54 | 显示全部楼层

教主

读内核前要不要先自宫呀
发表于 2004-11-4 18:33:29 | 显示全部楼层

菜鸟在下!

我想知道到什么程度才能读内核?
 楼主| 发表于 2004-11-5 13:23:29 | 显示全部楼层

回复: 菜鸟在下!

最初由 aloneboylz 发表
我想知道到什么程度才能读内核?

请先读读看看。
读内核没有特别的要求,只有一点,那就是你有很多用不完的时间。
发表于 2004-11-6 13:46:21 | 显示全部楼层

谢谢大哥!

最近我在学这个东西,感觉有点吃力,我以前过DOS没有感觉这么吃力过,不过我已经有两年没有看这相关的书了,我想得到您的帮助!!
发表于 2004-11-9 11:29:55 | 显示全部楼层
Linux内核学习,可以从这本书开始。。
《Linux内核完全注释》
http://www.china-pub.com/computers/common/info.asp?id=22033
我个人觉得很不错。正在修练中ing。。。。。
发表于 2004-11-9 23:01:23 | 显示全部楼层
想买来看看,你学得如何?
发表于 2004-11-19 01:02:18 | 显示全部楼层

看一遍

看一看,有点收获.但鄙人才疏学浅.可有入门良方
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表