学习啦>学习电脑>操作系统>Linux教程>

如何编译加载linux驱动和内核模块

时间: 若木635 分享

  编译加载linux驱动和内核模块

  到目前为止,我们在构建initramfs时还没有涉及内核模块的支持,所用到的硬件驱动程序都是直接编译到内核中。现在我们就看看如何使initramfs支持内核模块。

  编译内核模块

学习啦在线学习网   首 先,内核配置要支持模块,并支持内核模块的自动加载功能:在内核配置菜单中的激活下面的配置项,编译进内核

学习啦在线学习网   Load module support / Enable loadable module support / Automatic kernel loading ;

学习啦在线学习网   然后把需要的硬件驱动程序配置模块形式,比如把我的机器上的硬盘控制器的驱动编译成模块,则选择

  Device Driver

学习啦在线学习网   |---->SCSI device support

  |---->SCSI disk support

学习啦在线学习网   |----->verbose SCSI error reporting (不是必须的,但可方便问题定位)

  |----->SCSI low-level drivers

  |---->Serial ATA (SATA) support

  |---->intel PIIX/ICH SATA support

  把它们配置成模块。

  最后,编译内核,并把编译好的内核模块安装到image的目录下:

  make

  make INSTALL_MOD_PATH=~/initramfs-test/image modules_install

学习啦在线学习网   命 令执行完毕后,在image/lib/modules/2.6.17.13/kernel/drivers/scsi目录下安装了4个内核模文 件:scsi_mod.ko、sd_mod.ko、ata_piix.ko、libata.ko,它们就是所需的硬盘控制器的驱动程序。

  加载内核模块

  busybox的modprobe命令执行不正常,不能加载内核 模块。怀疑是busybox的modprobe命令配置或编译有问题。否则可以自动加载驱动。先用insmod命令依次加载。查看/lib/modules /2.6.17.13/modules.dep,弄清楚了4个模块的依赖关系,执行下面的命令加载:

学习啦在线学习网   insmod scsi_mod

  insmod libata

  insmod ata_piix

学习啦在线学习网   insmod sd_mod

  然后再用

  mdev -s

  命令生成硬盘的设备文件。 好了,可以安装硬盘分区,了并把根文件系统切换到硬盘分区:

学习啦在线学习网   mount /dev/sda8 /mnt

  exec switch_root /mnt /sbin/init

  系统正常启动到了CLFS,我们可以做到用initramfs中的硬盘控制器的驱动模块安装硬盘分区了。

  最终init文件

  分区要换成自己的分区。

学习啦在线学习网   #!/bin/sh

  mount -t proc proc /proc

  mount -t sysfs sysfs /sys

  insmod scsi_mod

  insmod libata

  insmod ata_piix

  insmod sd_mod

  mdev -s

学习啦在线学习网   mount /dev/sda8 /mnt

学习啦在线学习网   exec switch_root /mnt /sbin/init

如何编译加载linux驱动和内核模块

编译加载linux驱动和内核模块 到目前为止,我们在构建initramfs时还没有涉及内核模块的支持,所用到的硬件驱动程序都是直接编译到内核中。现在我们就看看如何使initramfs支持内核模块。 编译内核模块 首 先,内核配置要支持模块,并支持
推荐度:
点击下载文档文档为doc格式
75403