编译Linux内核

背景

记录下在debian上编译Linux最新内核的过程。

环境准备

$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

最新的内核代码下载:https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.10.10.tar.xz

安装依赖

sudo apt install bc binutils bison dwarves flex gcc git gnupg2 gzip libelf-dev libncurses5-dev libssl-dev make openssl pahole perl-base rsync tar xz-utils

编译配置

Linux 内核的构建过程会查找 .config 文件。顾名思义,这是一个配置文件,用于指定 Linux 内核的所有可能的配置选项。这是必需的文件。

使用发行版提供的配置

大多数 Linux 发行版,如 Debian 和 Fedora 及其衍生版,将会把它存在 /boot/config-$(uname -r)
直接复制到源码根目录:

### Debian 和 Fedora 及其衍生版:
$ cp /boot/config-"$(uname -r)" .config

接着使用 make olddefconfig来更新旧配置,这将使用“旧的配置文件”(当前保存为 .config,这是你发行版配置的一份直接副本),并检查从上一版本以来 Linux 代码库中新加的任何配置选项。如果找到任何新的、未配置 的选项,该选项的默认配置值会被使用,并会对 .config 文件进行更新。

原来的 .config 文件将被重命名为 .config.old 进行备份,并将新的更改写入至 .config 文件。

使用自定义配置

你可以通过查看 make help 的输出 来查看 所有 可用的选项,但我们主要关注三个 make 目标:

  • defconfig: 默认配置。
  • allmodconfig: 根据当前系统状态,尽可能地把项目构建为可加载模块(而非内建)。
  • tinyconfig: 极简的 Linux 内核。

如果你想更细致地控制配置,最可靠的修改方式是使用 menuconfig 或 nconfig。

编译

直接make就可以开始正式地编译了,同时你也可以指定一个构建目标,然后 make 命令只会构建指定的项目,而不会构建其他的。

  • vmlinux:纯粹的 Linux 内核。
  • modules:可加载模块。
  • dtbs:设备树二进制文件(主要用于 ARM 和 RISC-V 架构)。
  • all:构建所有被标记了星号 * 的项目(从 make help 的输出中可以查看)。

如果你需要清理构建产生的文件,你可以用以下的目标来实现你的需求:

  • clean:除了 .config 文件外,删除几乎所有其他内容。
  • mrproper:执行了 make clean 的所有操作外,还会删除 .config 文件。
  • distclean:除了执行 make mrproper 的所有操作外,还会清理任何补丁文件。

安装 Linux 内核

sudo make install

参考

https://linux.cn/article-16252-1.html

posted @ 2024-09-14 00:20  main_c  阅读(17)  评论(0)    收藏  举报  来源