我曾经尝试寻求有关如何开始进行内核编程的建议,并且基本上被告知:
如果您不需要了解工作的内核,为什么要尝试?
您应该订阅 Linux内核邮件列表,并尽力理解。
如果您不编写本应在主要Linux内核中使用的代码,那是在浪费时间。
这确实对我没有帮助。因此,这里有一些可能的策略,让您在开心的同时学习操作系统和Linux内核如何以自己的方式工作。我仍然只知道几件事,但是我比以前知道得多:)
对于这些路径中的大多数,您需要了解一些C和一些汇编语言(至少足以复制和粘贴)。我写了一些小型的C程序,上了一门我几乎完全忘记的汇编语言课程。
这似乎是一条令人恐惧的道路。但是实际上不是!我从rustboot开始,至 关紧要的是,它 已经可以工作并且可以完成工作。然后,我可以做一些简单的事情,例如将屏幕变成蓝色而不是红色,在屏幕上打印字符,然后继续尝试使键盘中断起作用。
MikeOS看起来也像是另一个有趣的事情。请记住,您的操作系统不一定要大而专业-如果您将它变成紫色而不是红色,然后将其打印为打油诗,那么您已经赢了。
您肯定要使用类似qemu的仿真器 来运行您的 OS。OSDevWiki也是一个有用的地方–它们具有常见问题解答,可解决您在此过程中会遇到的许多问题。
如果您已经在运行Linux,那么编写不执行任何操作的内核模块非常容易。
这 是打印“你好,黑客学校!” 的模块的来源。到内核日志。这是18行代码。基本上,您只需要注册一个init和一个清理函数就可以了。我不太了解__init
AND __exit
宏的作用,但是我可以使用它们!
编写执行某项任务的内核模块会更加困难。我通过决定要执行的操作来做到这一点(例如,为通过内核的每个数据包打印一条消息),然后阅读一些内核新手,在谷歌上搜索了很多,然后复制并粘贴了很多代码以弄清楚如何做去做吧。我在此kernel-module-fun 存储库中编写了几个内核模块示例 。
Linux内核参与了 GNOME妇女扩展计划。这是惊人的,奇妙的,令人愉快的。它的意思是,如果您是女性,并且想花3个月的时间在内核上工作,那么您可以在没有任何先验经验的情况下参与内核开发,并获得一定的报酬(5000美元)
这听起来像是一个可怕的建议–“想了解内核的工作原理吗?仔细阅读源代码!”
但这实际上很有趣!您不会了解所有内容。我由于不了解事物而感到愚蠢,但是后来我交谈的每个人都像“是的,当然是Linux内核!”。
这是的来源chmod_common
,并附有我的一些评论:
static int chmod_common(struct path *path, umode_t mode){ struct inode *inode = path->dentry->d_inode; struct iattr newattrs; int error; // No idea what this does error = mnt_want_write(path->mnt); if (error) return error; // Mutexes! Prevent race conditions! =D mutex_lock(&inode->i_mutex); // Check for permission to use chmod, I guess. error = security_path_chmod(path, mode); if (error) goto out_unlock; // I guess this changes the mode! newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; error = notify_change(path->dentry, &newattrs);out_unlock: mutex_unlock(&inode->i_mutex); // We're done, so the mutex is over! mnt_drop_write(path->mnt); // ??? return error;}