QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3967|回复: 2

有矢而发,触类旁通-关于内核学习

[复制链接]
发表于 2006-8-30 12:25:50 | 显示全部楼层 |阅读模式
一.研究内核的目的
欲举其事,先正其道。要谈论内核的研读以及交流心得,前提必须得有一个恰当准确的目的,方能收获良多。
很多人都有这样一个疑惑,为什么要研究内核呢?我们又不是内核开发者(或许你将来就会成为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),了解了大方向,就好编码了。
游击散打,逐渐包围大中心

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

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

转自:http://www.linuxsir.org/bbs/showthread.php?t=128726
发表于 2007-3-3 10:07:25 | 显示全部楼层
谢鸟!!
非常好! :-)
回复

使用道具 举报

发表于 2007-3-7 10:22:45 | 显示全部楼层
支持!!
我也说两句:
从技术角度讲,要想研究内核,要懂不少东西,换句话说内核设计的方面很多。
Linux内核是OS,联系硬件和应用软件,以数学为基础,涉及电路,计算机组成原理,x86的基本结构,操作系统,算法,数据结构,汇编,编译原理,C语言,这些课程对于计算机专业的应该都学过了~
学内核的书不少(基本全都浏览过,也卖过不少),但是感觉学内核的最的最好方法一定要看源码,最好能自己分析实现(就像http://hi.baidu.com/linux_kernel),当然也是建立在一定理论基础之上的,否则看也看不懂。
大家共同努力吧~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-22 15:01 , Processed in 0.086173 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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