制作最小linux内核,制作最小linux内核(3)

本文是制作最小linux内核系列的最后一篇,这篇相对简单:把内核配置界面下"Device Driver"选项中一些编译进内核的驱动编译成模块,并把这些模块安装到initrd.img。当引导系统时,内核从initrd.img中加载模块,最终使系统正常工作起来。

首先配置内核选项,执行make menuconfig进入Device Driver选项:

将"Serial ATA and Parallel ATA drivers"编译为模块,并将其中的子项"AHCI SATA support"编译为模块

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

进入Device Driver选项-"Block devices",将RAM block device support编译为模块:

0818b9ca8b590ca3270a3433284dd417.png

进入Device Driver选项-"SCSI device support",将SCSI disk support编译为模块:

0818b9ca8b590ca3270a3433284dd417.png

进入Device Driver选项-"SCSI device support"-"SCSI low-level driver"中LSI MPT相关的选项编译成模块:

0818b9ca8b590ca3270a3433284dd417.png

至此配置结束。准备编译内核,执行make all -j4。请注意,生成新的bzImage后不要急吼吼执行命令cp bzImage然后就重新引导系统。Why?新生成的kernel中没有磁盘驱动,引导过程中会报panic。那磁盘驱动去哪了?恩,还在内核目录下,只不过需要把他们安装到制作initrd.img文件的目录中。命令如下:

make modules_install INSTALL_MOD_PATH=/home/eugen/Desktop/initramfs参数modules_install用于告诉make工具准备安装内核模块;而INSTALL_MOD_PATH后面跟着的路径是我用于制作initrd.img文件的目录。安装后,可以看到initramfs/lib目录下多了两个目录分别为firmware/目录,用于存放设备固件和modules/目录,用于存放驱动模块:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

图中modules/目录下的3.13.11-ckt39目录是我使用的linux内核源码的版本号;3.13.11-ckt39/下存放了加载模块时的用于匹配设备PID VID的modules.alias文件,模块依赖关系modules.dep文件等,而kernel/目录存放了引导内核时用到的模块:

0818b9ca8b590ca3270a3433284dd417.png

最后重新引导系统看看定制的结果:

lsmod查看系统已加载的模块,很不幸,busybox中没有这个命令。换个方式用cat /proc/modules来列举内核模块

0818b9ca8b590ca3270a3433284dd417.png

从中我们看到了libahci/libata/mptscsih等以前被编译进内核的模块。另外,我们进入/lib/modules路径后也能看到这些设备驱动是以.ko可加载模块的形式存放在根文件系统中。

0818b9ca8b590ca3270a3433284dd417.png

参考文档:王柏生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值