random.c
直接链接到内核中,它不是作为模块构建的,所以你不能单独重新编译它并将它加载到你的内核中,你需要重新编译整个新内核。
要构建内核,请确保您安装了常用的开发工具:gcc、GNU make 等。一些发行版提供了“build-essentials”或“开发工具”或类似的元包,其中包括用于构建内核的所有常用开发工具核心系统包。
如何构建内核取决于您是否有使用系统所需的任何特定于发行版的补丁,或者是否要确保使用发行版的打包系统来安装内核。如果是这样,您可能应该按照发行版的说明构建内核。例如,Ubuntu 的说明、Arch 的说明、Fedora 的说明、CentOS 说明(可能在 RHEL 6 上类似,Red Hat 不提供文档,因为它们不支持构建自定义内核)、SuSE 说明。
否则,如果您不介意手动配置和安装内核,您可以手动完成。以下说明应该很好地涵盖了大多数发行版,但请务必检查您的发行版文档,以防有任何发行版特定的陷阱。
从kernel.org下载适当的 tarball并在某处解压缩。或者,如果您愿意,可以使用 Git 进行检查。由于您引用了 2.6.32,因此我在以下说明中包含了最新版本的 2.6.32。
$ curl -O https://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.61.tar.xz
$ xzcat linux-2.6.32.61.tar.xz | tar xvf -
$ cd linux-2.6.32.61
# or...
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ cd linux
$ git checkout -b my-branch v2.6.32.61
现在您需要对其进行配置、构建和安装。Greg Kroah-Hartmann 是一位领先的内核开发人员和稳定的内核维护者,他有一本关于该主题的免费书籍。我建议阅读他的书,但如果您想快速了解一下,我会总结重点。
有几种方法可以配置它。一个好的开始方法是复制您当前的配置,然后运行make menuconfig
或make xcconfig
获取一个 curses 或图形内核配置实用程序,让您可以轻松浏览并选择正确的选项(因为新内核中可能有新的选项你正在建造)。许多发行版将给定内核的配置安装在内核版本中/boot/config
或/boot/config-version
对应于内核版本。将其复制到源代码树中.config
,然后运行make menuconfig
或make xconfig
:
$ cp /boot/config .config
$ make xconfig
配置完成后,我建议EXTRAVERSION
在Makefile
. 其内容附加到版本中,以帮助区分您修改后的内核与上游内核。我建议设置它以帮助跟踪您修改过的内核。
配置完成后,只需像其他任何东西一样构建它。如果您有多个内核,我建议您使用-j
它来运行并行构建。
$ make -j8
现在它已构建,您可以安装它。在大多数系统上,以下工作;如果没有,请查看 Greg 的书或查看您的发行版的文档:
$ sudo make modules_install
$ sudo make install
最后,您必须将其添加到您的引导加载程序中(在某些系统上,make install
可能会这样做,在某些系统上可能不会)。根据您使用的是 Lilo、Grub 还是 Grub2,您可能需要编辑/etc/lilo.conf
(然后运行sudo lilo
以安装更改)/boot/grub/menu.lst
、或/boot/grub/custom.cfg
(然后sudo grub-mkconfig -o /boot/grub/grub.cfg
安装更改)。有关更多详细信息,请参阅给定引导加载程序的相关文档。通常,您希望复制现有条目并复制它,将其更新为指向您的新内核。确保保留现有条目,这样如果这不起作用,您将能够引导回旧内核。
现在重新启动,选择您的新内核,并希望您的系统启动。哇!您已经构建了自己的内核。
既然您已确保无需修改即可成功完成此操作,您就可以进行更改了。您将要修改drivers/char/random.c
. 要打印调试语句,请使用printk()
. 它的工作原理大多类似于printf()
,但并不完全相同,因此请在使用之前查看文档。修改、重建和重新安装新内核并重新启动后,您可以看到使用该命令打印出的带有printk()
语句的消息。dmesg
有关更多信息,请查看我在上面链接的 Greg 的书、内核README和HOWTO,浏览内核的文档目录和各种其他文档。