我曾经问过人们如何开始学习内核编程,他们基本上说:①如果你不需要了解内核是如何为你工作的,你为什么要尝试?②你应该订阅Linux内核邮件列表,然后试着去理解。③不为Linux内核写代码,就是在浪费时间。这些都对我没有帮助。所以在这里我列出了一些可能的方式,它们是关于操作系统和Linux内核在你的项目中如何工作的,它们也很有趣。虽然我知道的不多,但至少比我做这件事之前知道的多。对于以下方法,您只需要了解一些C语言和汇编语言(至少复制和粘贴)。我会写一些小的C程序,我会用汇编来教课,虽然这些我都快忘记了。方法1:编写自己的操作系统这似乎是一种非常可怕的方法。但事实上并非如此!我从rustboot项目开始,重要的是它已经可以运行了。然后我会做一些简单的事情,比如让屏幕从红色变成蓝色,在屏幕上打印字符,并让键盘中断继续工作。MikeOS对我来说是另一个有趣的开始。请记住,您的操作系统不必庞大或专业——如果您可以让它将屏幕颜色从红色更改为紫色或让它打印视图,那么您就成功了。您肯定会希望使用模拟器来运行您的操作系统,例如qemu。OSDevwiki也是一个非常有用的站点——它有很多您会遇到的常见问题。方法二:写一些内核模块!如果您准备好运行Linux,那么编写内核模块非常非常容易,即使它们什么都不做。这是打印“Hello,hackerschool!”的模块的源代码。到内核??日志。它只有18行代码。基本上你只需要编写一个初始化进程和一个清理函数。我不知道__init和_exit宏的作用,但我使用它们!编写具有某些功能的内核模块比较困难。当我这样做的时候,我先确定要完成的功能(比如向每个经过内核的数据包打印一条消息),然后回过头去看看KernelNewbies上的一些东西,然后用谷歌大量搜索,然后复制又贴了一大堆代码,搞清楚具体怎么写。以下是我放入kernel-module-fun项目中的一些内核模块示例。方法三:参加Linux内核实习!Linux内核团队参与了GNOME女性外展实习计划。这是令人惊奇、奇妙且非常愉快的活动。这意味着,如果你是女性,愿意花三个月的时间进行内核开发,那么即使没有任何经验,你也可以参与内核的开发并获得报酬(5000美元)。它在内核新手上有描述。如果你对此感兴趣,那是非常值得申请的——你可以对内核做一个格式化的补丁,这很有趣。Linux内核开发人员SarahSharp正在协调此次活动,她本人也非常热情。您可以阅读她的博客文章,了解如何在第一轮中允许137个补丁进入内核。这些补丁也将由您贡献!查看申请说明!如果你不是女生,可以选择GoogleSummerofCode,类似的活动。(编者按:这句话可能会引起女程序员的反感)方法四:阅读内核源代码这听起来像是最糟糕的建议——“如果你想了解内核是如何工作的,就去看源代码,太愚蠢了”但是其实这个方法很有意思。你不需要知道一切。遇到不明白的地方,我觉得无能为力,但我告诉别人,大家就会说:“嗯,这就是传说中的Linux内核,你不懂很正常!”我的朋友Dave最近给了我一个网站LXR,在那里你可以阅读内核资源,还提供了很多有用的参考链接。比如你想知道chmod命令的系统调用,你可以在chmod_common定义页看到它在Linux内核中的定义!下面是chmod_common的部分代码,里面有我写的一些注释:staticintchmod_common(structpath*path,umode_tmode){structinode*inode=path->dentry->d_inode;structiattrnewattrs;terror;//不知道这是什么正在做error=mnt_want_write(path->mnt);if(error)returnerror;//互斥锁!Avoidconflicts!=Dmutex_lock(&inode->i_mutex);//我猜这是在检查你是否可以使用chmoderror=security_path_chmod(path,mode);if(error)gotoout_unlock;//我猜这是在改变模式值newattrs。ia_mode=(mode&S_IALLUGO)|(inode->i_mode&~IALLUGO);newattrs.ia_valid=ATTR_MODE|ATTR_CTIME;error=notify_change(path->dentry,&newattrs);out_unlock:mutex_unlock(&inode->i_mutex);//释放互斥量whencompletemnt_drop_write(path->mnt);//???returnerror;}我觉得这个过程很有意思,也帮助我理清了内核的意思。我发现我阅读的大部分代码都是晦涩难懂的,但有些代码(例如chmod代码)是可以理解的。总结几个链接:JessicaMcKellar在Ksplice博客上的博文《Linux Device Drivers》是这样描述自己的,我觉得这很有用。“这本书将教你如何编写自己的驱动程序以及如何侵入与内核相关的地方”我在它的聊天室有过一些糟糕的经历。SarahSharp是一名内核开发人员,负责Linux内核的对外服务,是一位非常友善的女性。原文链接:JuliaEvans翻译:伯乐在线-haofly
