如何自定义Ubuntu内核
内核自定义并不适合所有人。请注意,在尝试进行任何操作之前,它可能会破坏系统。
我们想定制内核的原因有很多。我们可能希望仅将内核缩减为必要的服务,尤其是在运行只需要基本知识的服务器或者专用设备时。我们可能还需要修补内核以支持我们所运行的内核当前不支持的硬件。
本文将不介绍如何修补内核,而仅说明如何自定义当前内核。我还会有另一篇后续文章,其中介绍了如何修补内核以及为什么要这样做的一些实际原因。
首先,我们需要弄清楚当前正在运行的内核版本。我们将使用uname命令
$ uname -r 2.6.17-10-generic
现在,我们需要为内核安装linux源,请注意我正在运行2.6.17-10内核,因此安装程序行将对此进行反映。出于本文的目的,我们可以用内核号替代正在运行的任何内容。我们还需要安装curses库和其他一些工具来帮助我们进行编译。
sudo apt-get install linux-source-2.6.17 kernel-package libncurses5-dev fakeroot
如果我们好奇Linux源代码的安装位置,可以使用dpkg命令告诉我们软件包中的文件。这是我系统上的输出:
$ dpkg -L linux-source-2.6.17 /. /usr /usr/src /usr/src/linux-source-2.6.17.tar.bz2 /usr/share /usr/share/doc /usr/share/doc/linux-source-2.6.17 (trimmed)
我们可以看到源文件已经以压缩文件的形式安装到/ usr / src目录中。
为了使事情变得简单,我们将使用sudo打开新的shell进入root模式。还有其他方法可以做到这一点,但我更喜欢这种方式。
sudo /bin/bash
现在将目录更改为源位置,以便我们可以安装。请注意,如果未安装bunzip实用程序,则可能需要安装它。 (在我的)
cd /usr/src bunzip2 linux-source-2.6.17.tar.bz2 tar xvf linux-source-2.6.17.tar ln -s linux-source-2.6.17 linux
复制我们现有的内核配置,以用于自定义编译过程。注意`字符是波浪号下方的字符~
cp /boot/config-`uname -r` /usr/src/linux/.config
现在,我们将启动该实用程序,该实用程序将使我们能够自定义内核:
cd /usr/src/linux make menuconfig
首先,向下以加载备用配置文件,然后加载.config文件。 (只需按Enter)
现在我们已经在实用程序中,可以为自定义内核设置选项。导航非常简单,如果我们迷路了,顶部会有一个图例。我决定选择Networking,然后按Enter键进入该类别。
业余无线电支持?那到底是为了什么呢?我们将通过*注意到它是内核内置的。
通过按?键,我们可以看到该特定项目的帮助。解释如下:
好吧,我将立即禁用它。为什么到底在我的内核中安装了那个?我按Esc退出帮助屏幕,然后按N将其从内核中排除。
完成所需的选择后,按"退出"并在出现提示时保存配置。
现在我们有一个准备编译的配置。首先,我们要进行清理,以确保一切准备就绪。
make-kpkg clean
接下来,我们将实际编译内核。这将花费很长的时间,所以去找一些有趣的事情。
fakeroot make-kpkg initrd append-to-version=-custom kernel_image kernel_headers
此过程将在/ usr / src中创建两个包含内核的.deb文件。 linux-image 文件是实际的内核镜像,另一个文件包含dpkg都可以安装。文件名在系统上可能会有所不同。
请注意,当我们运行这些next命令时,这会将新内核设置为新的默认内核。这可能会破坏事情!如果计算机无法启动,则可以在GRUB加载菜单上单击Esc,然后选择旧内核。然后,我们可以在/boot/grub/menu.lst中禁用内核,或者尝试再次编译。
dpkg -i linux-image-2.6.17.14-ubuntu1-custom_2.6.17.14-ubuntu1-custom-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.17.14-ubuntu1-custom_2.6.17.14-ubuntu1-custom-10.00.Custom_i386.deb
现在重新启动计算机。如果一切正常,则应该运行新的自定义内核。我们可以使用uname进行检查。请注意,确切的数字在计算机上将有所不同。
uname -r 2.6.17.14-ubuntu1-custom