- 11
- 12月
过去的一周估计是我这学期过得最紧张的两周了。一周时间内看明白并修改一个Linux内核实在是一件相当挑战的工作。
事情还要从头说起,这学期我们开了一门bt的实验课,名字叫《系统软件分析与设计》,从第12周上到第15周,一周就两节,应该是个很小的课。这课课时虽少,老师出的题可不简单,整个课就研究一样东西Linux 0.11的内核源码,主要的问题有两个:
1.详细分析至少150行的一段代码
2.改造Linux内核,使其启动时能依次显示三个问题,由用户输入三个答案,然后退出。
初看起来两道题都不怎么难,因此前两个周我基本上都在看《linux011内核注释》前面的理论部分,没开始研究源码。到第三周开始看代码时真是服了——面向过程的典型非正交代码。代码之间有大量的交叉引用,想看明白确实不是件容易的事。
幸运的是之前囤的软件没有白囤,SourceInsight这款软件在分析源码时帮了我极大的忙。按住ctrl点一下就能转到引用处,在处理这种复杂代码时帮助太大了。
不过第二个问题就没那么简单了。内核毕竟不是应用软件,除了自己定义的函数可没有可以调用的“系统函数”(“系统”之中哪来“系统函数”?)。内核中定义了一个printk函数,输出问题不用考虑了。但内核里是没有任何类似scanf之类的输入函数的。怎么接收用户的输入成了难点。
一个在普通编程中简单到不能再简单的接收用户输入操作,放到内核里把我卡了好几天
(未完待续…)