如何从源代码编译 Linux 内核以构建自定义内核
Linux 内核是所有 Linux 系列操作系统的生命力,包括 Ubuntu、CentOS 和 Fedora。
在大多数情况下,您不需要编译内核,因为它是在您安装操作系统时默认安装的。此外,当对内核进行重要更新时,您可以使用 yum 或 apt-get 来更新 Linux 系统上的内核。
但是,您可能会遇到某些情况,您可能必须从源代码编译内核。以下是您可能必须在 Linux 系统上编译内核的几种情况。
- 启用不属于默认内核的实验性功能。
- 启用对默认内核当前不支持的新硬件的支持。
- 调试内核
- 或者,只是为了了解内核的工作原理,您可能想探索内核源代码,并自行编译它。
在本文中,我们将解释如何从源代码编译 Linux 内核。
另外,请注意,如果您只想编译驱动程序,则不需要编译内核。您只需要内核的 linux-headers 包。
1.下载最新的稳定内核
第一步是从kernel.org下载最新的稳定内核。
# cd /usr/src/
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.9.3.tar.xz
2. 解压内核源码
第二步是解压内核源文件进行编译。
# tar -xvJf linux-3.9.3.tar.xz
3.配置内核
内核包含近 3000 个配置选项。为了让大多数人在大多数硬件上使用内核,Ubuntu、Fedora、Debian、RedHat、CentOS 等 Linux 发行版通常会包含对大多数常见硬件的支持。您可以从发行版中获取任何配置,在此之上您可以添加自己的配置,或者您可以从头开始配置内核,或者您可以使用内核提供的默认配置。
# cd linux-3.9.3
# make menuconfig
make menuconfig 将启动一个带有默认配置选项的基于文本的用户界面,如图所示。您应该已经安装了“libncurses 和 libncurses-devel”软件包才能使该命令正常工作。
我们将使用内核提供的默认配置。所以选择“保存”并将配置保存在文件名“.config”中。
以下是“.config”文件的示例:
CONFIG_MMU=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
4.编译Linux内核
编译主内核:
# make
编译内核模块:
# make modules
安装内核模块:
# make modules_install
此时,您应该会在系统中看到一个名为 /lib/modules/3.9.3/ 的目录。
5.安装新内核
在系统上安装新内核:
# make install
make install 命令将在 /boot 目录中创建以下文件。
- vmlinuz-3.9.3 – 实际内核
- System.map-3.9.3 – 内核导出的符号
- initrd.img-3.9.3 – initrd 映像是引导过程中使用的临时根文件系统
- config-3.9.3 – 内核配置文件
默认情况下,“make install”命令也会更新 grub.cfg。所以我们不需要手动编辑 grub.cfg 文件。
6. 引导 Linux 到新内核
要使用刚刚编译的新内核,请重新启动系统。
# reboot
由于在 grub.cfg 中添加了新内核作为默认引导,因此系统将从新内核引导。以防万一您在使用新内核时遇到问题,您可以在引导期间从 grub 菜单中选择旧内核,然后照常使用您的系统。
系统启动后,使用uname 命令验证是否安装了新版本的 Linux 内核。
$ unname -r
3.9.3
- 点赞
- 收藏
- 关注作者
评论(0)