成为Linux内核高手的4个方法

本文原作者是Julia
Evans,他之前在CUSEC网站上发表了一篇关于“内核并不可怕”的文章,本文是后续。我曾经问别人如何开始内核编程的学习,他们基本上都说:如果你不需要了解内核是如何为你工作的,你为何要尝试呢?你应该订阅Linux内核邮件列表,然后努力去理解。如果你不去编写针对Linux内核的代码,你就是在浪费时间。这些对我一点儿帮助都没有。所以我在这里列举了一些可行的方法,他们是有关操作系统和Linux内核是怎样在你的项目里工作的,而且还很有趣。虽然我知道得并不多,但至少比我做这些之前了解了更多。对于下面这几个途径,你只需要了解一些C语言和汇编语言。我会写一些小的C程序,还会用汇编来上课,虽然这些我都忘得差不多了。方法1:编写你自己的操作系统这看起来是一个相当可怕的方法。但事实上并不是!我是从rustboot这个项目开始的,重要的是它已经可以工作了。然后我会做一些简单的事情,比如让屏幕由红色变为蓝色,打印字符到屏幕,持续获取键盘中断来工作。MikeOS是我另一个有趣的开始。请记住,你的操作系统没有必要做得很大很专业——如果你能够让它把屏幕颜色由红色变为紫色或者让它打印一首视,你就算成功了。你一定会想使用一个仿真器去运行你的操作系统,比如qemu。OSDev
wiki同样是一个很有用的网站——上面有很多你会碰到的常见的问题。方法2:编写一些内核模块如果你已经准备运行Linux了,那么再写一些内核模块就会是相当相当容易的,即使他们什么都不会做。这里有一个能够打印“Hello,
hacker
school!”到内核日志的模块源代码。它只有18行代码。基本上你只需要编写一个init进程和一个cleanup函数就可以了。我并不知道__init和_exit这两个宏命令做了些什么,但是我会使用他们!编写一个有一定功能的内核模块是比较难的。我做这个的时候,都是先决定要完成的功能,然后回去阅读一些Kernel
Newbies上的东西,再大量地使用谷歌来搜索,再复制和粘贴大量的代码来搞明白究竟该怎样去编写它。这里有几个内核模块的例子,我把他们放在了kernel-module-fun项目里。方法3:参加一次Linux内核实习Linux内核团队参与了GNOME女性拓展实习项目。它是惊人、奇妙并且令人非常愉快的一个活动。这意味着,如果你是一个女人并且愿意花费三个月时间在内核开发上,你就能参与内核的开发,并且不需要任何的经验,还能得到一些报酬。在Kernel
Newbies上有关于它的介绍。如果你对此感兴趣,那会是非常值得去申请的——你能够为内核做一个格式化的补丁,这非常有趣。Sarah
Sharp是一个Linux内核开发人员,她在协调这个活动而且她本人也是非常热心的。你可以阅读她的这篇博客文章,讲述了在第一轮里137个补丁是怎样被允许加入到内核中去的。这些补丁也将会是你提供的!查看申请说明!方法4:阅读内核源码这听起来像是最糟糕的建议——“想要去了解内核是如何工作的就去看源代码,太蠢了”。但事实上这个方法是非常有趣。你并不需要了解一切东西。当遇到无法理解的东西时,我就会感到无能为力,但是我告诉人们的时候,每个人都会说:“嗯,这就是传说中的Linux内核,你不能理解很正常!”我的朋友Dave最近给了我一个网站LXR,在里面你可以阅读到内核的资源,而且还提供了大量有用的引用链接。比如,如果你想要了解chmod这个命令的系统调用,你可以在the
chmod_common
definition页面看到有关于它在Linux内核里的定义!这里是部分chmod_common的部分代码,其中有一些我写的注释:我觉得这个过程是很有趣的,而且也帮助了我阐明了内核的意义。我发现我所阅读的代码大多都是生涩难懂的,但是也有一些是可以理解的。总结几个链接:Jessica
McKellar在Ksplice blog上的博客文章。[url= Device Drivers]《Linux
Device
Drivers》[/url]是这样描述它自己的,我发现还是有点用。这本书会教你怎样编写你自己的驱动和怎样入侵与内核相关的地方。如果你在写一个操作系统,OSDev
wiki是一个不错的网站。Kernel
Newbies有一些给内核开发新手的资源。原文链接: Julia Evans 翻译:
伯乐在线 – haofly译文链接:

相关文章