如何从源代码编译 Linux 内核以构建自定义内核

举报
Tiamo_T 发表于 2022/08/08 10:38:15 2022/08/08
【摘要】 在本文中,我们将解释如何从源代码编译 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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。