1. 编译内核

默认编译bzImage,位于arch/x86/boot/bzImage

make -j4
  • -j4: 根据CPU内核数编译

2. 编译模块

  1. 编译所有模块
make modules -j4
  1. 编译指定模块
make SUBDIRS=drivers/net/can/sja1000 modules

3. 安装内核模块

make INSTALL_MOD_PATH=output/ INSTALL_MOD_STRIP=" --strip-debug --strip-unneeded" modules_install
  • INSTALL_MOD_PATH:将模块安装到指定目录下,不添加则默认安装到根目录/, 会自动生成文件夹lib/modules/<内核版本>
  • INSTALL_MOD_STRIP:安装模块时的strip选项,可以减小模块大小

如果需要手动安装其他模块或调整模块的路径,则需要执行下面的命令,重新生成模块依赖文件

depmod -b output 4.19.59-rt24
  • -b:内核模块所在的路径
  • 4.19.59-rt24:内核版本号

4. 安装内核

安装内核会自动生成四个文件:

System.map-4.19.59-rt24  config-4.19.59-rt24  initrd.img-4.19.59-rt24  vmlinuz-4.19.59-rt24

1. 安装内核到系统

make install

2. 安装内核到指定目录

make install INSTALL_PATH=output/boot/

这样只能生成三个文件,缺少一个initrd.img。

2.1 制作initrd.img

  1. 将内核模块目录软链接到/lib/modules下
ln -s `pwd`/output/lib/modules/4.19.59-rt24 /lib/modules
  1. 生成initrd.img
update-initramfs -c -k 4.19.59-rt24 -b output/boot

update-initramf会根据配置文件/etc/initramfs-tools/initramfs.conf生成initrd.img,可以配置加载哪些模块及压缩算法。

Related Posts