在进行内核编译时,通过以下命令可以将内核编译并生成到指定的目录中。
但是如果查看boot目录,并不能找到initrd.img文件。
因此需要自行制作initrd.img,特别是交叉编译的情况。
下面的代码是交叉编译环境下常用的内核编译和安装方式:
make menuconfig
make -j12
make INSTALL_PATH=~/jail/5.4.61out/boot install
make INSTALL_MOD_PATH=~/jail/5.4.61out modules_install
// make INSTALL_MOD_STRIP=1 modules_install 可以有效减小/lib/modules目录的体积
如果直接make install可以将编译的内核安装到/boot目录中,同时会生成initrd.img,但是此initrd.img是与本机匹配的,复制到目标机器上可能是不能使用的。
在CentOS之类下面一般是用mkinitrd命令,
而在Ubuntu/Debian下用的是mkinitramfs命令.
它们的用法稍微有些不一样,如下所示:
注意:
下面的命令要在目标机上执行。否则生成的是用于本机的initrd。
这个命令的作用是把/lib/modules/5.4.61中对应的.ko驱动打包到initrd.img文件中。
其中5.4.61为/lib/modules下的目录名称(内核的版本号)
命令执行完成后,就会生成对应的initrd.img。
#centos
mkinitrd /boot/initrd.img 5.4.61
#ubuntu
mkinitramfs 5.4.61 -o /boot/initrd.img
附:initrd.img文件解压缩以及重新打包的命令:
#Extract
gunzip < /boot/initrd.img | cpio -i –make-directories
#Repack
find ./ | cpio -H newc -o > initrd.cpio
gzip initrd.cpio
mv initrd.cpio.gz initrd.img
参考:
mkinitrd 与 mkinitramfs - 摩斯电码 - 博客园
The Linux Kernel HOWTO: Appendix A - Creating initrd.img file
initrd/initramfs文件制作及解压