Notes about kernel compile and config
文章目录
/proc/config.gz
1 | zcat /proc/config.gz |
Linux 可以在内核本身存储用于内核构建的 gzip 内核配置文件副本,并通过 /proc/config.gz 提供给用户。也就是说,/proc/config.gz 就是当前的 Linux 内核配置文件,并且是用 gzip 格式压缩过的。
但不是所有的 Linux 发行版都有 /proc/config.gz 文件,大部分常见的 Linux 发行版就没有提供,比如 Ubuntu。只有当内核配置 CONFIG_IKCONFIG
和 CONFIG_IKCONFIG_PROC
为y
,才会在 /proc 中出现 config.gz 文件。当然,即使大多数发行版没有提供 /proc/config.gz,仍然可以通过 /boot 查看内核配置信息。
/boot 内核配置信息
1 | cat /boot/config-5.4.0-80-generic |
make oldconfig
It reads the existing .config
file that was used for an old kernel and prompts the user for options in the current kernel source that are not found in the file. This is useful when taking an existing configuration and moving it to a new kernel.
使用其他 (通常是较旧的) 内核版本的 .config
文件时,需要先更新它。可以使用 make oldconfig
命令,以交互方式询问对新配置的选择。
make olddefconfig
的含义为:采用已有的.config
文件的参数作为默认参数,同时升级依赖属性,新属性设置为默认值不再提醒。
mkinitramfs
1 | mkinitramfs -o /boot/initrd.img 2.6.24-16 |
Note: 2.6.24-16是需要创建initramfs的kernel版本号,如果是给当前kernel制作initramfs,可以用uname -r
查看当前的版本号。提供kernel版本号的主要目的是为了在initramfs中添加指定kernel的驱动模块。mkinitramfs
会把/lib/modules/${kernel_version}/
目录下的一些启动会用到的模块添加到initramfs中。
load a module in initrd
1 | cat /etc/initramfs-tools/modules |
Add the names of the modules to /etc/initramfs-tools/modules
. This added the modules to the initrd file. Update the initrd file by update-initramfs -u
update-initramfs -u
更新当前kernel的initramfs。在添加模块时,initramfs tools只会添加一些必要模块,用户可以通过在/etc/initramfs-tools/modules
文件中加入模块名称来指定必须添加的模块。
INSTALL_MOD_PATH
1 | make modules_install INSTALL_MOD_PATH=out/ |
The INSTALL_MOD_PATH
variable is needed to install the modules in the target root filesystem instead of your host root filesystem.
Linux 内核编译 LOCALVERSION 配置
LOCALVERSION
可以在版本号之后追加后缀信息, 如果再定义CONFIG_LOCALVERSION_AUTO
, 将在最后进一步追加git
版本号为后缀信息.不定义
CONFIG_LOCALVERSION_AUTO
将不显示git
仓库信息, 如果此时LOCALVERSION
变量也未定义, 将追加 “+”.如果既不想添加后缀, 又不想有
"+"
号 : 不定义CONFIG_LOCALVERSION_AUTO
, 将LOCALVERSION
变量定义为空 :LOCALVERSION=
.1
make -j8 bindeb-pkg LOCALVERSION=
参考资料: