Total Pageviews

Friday, 12 July 2013

编译新的驱动模块到内核

一、用命令自动添加模块

这个很简答,分为三步。

1.查看模块是否已经存在当前内核中

这里以ipip.ko这个模块为例,一般都没有被编译进去
#lsmod | grep ipip
如果没有的话,查看本地lib中是否有这个模块
#modprobe –l | grep ipip
/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipip.ko
或者手动查看/lib/modules/$(unmae -r)/kernel/


2.使用mkinitrd新建内核

#mkinitrd –with=ipip /boot/initrd-2.6.18-194.ido.img $(uname -r)

3.修改grub.conf添加新启动项

root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-194.ido.img

二、手工添加模块,编译initrd

手动添加比较繁琐,大概分为3大步

1.解压initrd文件

#cp /boot/initrd-2.6.18-194.el5.img /tmp
# file /tmp/initrd-2.6.18-194.el5.img
/tmp/initrd-2.6.18-194.el5.img: gzip compressed data, from Unix, last modified: Sun Jan 16 20:30:13 2011, max compression
#gzip –dv –S .img  /tmp/initrd-2.6.18-194.el5.img
# file /tmp/initrd-2.6.18-194.el5
/tmp/initrd-2.6.18-194.el5: ASCII cpio archive (SVR4 with no CRC)
#mkdir /tmp/initrd;cpio –id < /tmp/initrd-2.6.18-194.el5
经过这些步骤,我们就在/tmp/initrd中看到了全部已经解压的文件
在lib中,有所有编译的模块,我们把需要的ipip.ko拷贝进去,然后再init中添加如下内容:
echo ‘Loading ipip mod…’
insmod /lib/ipip.ko

2.压缩还原initrd

#find /tmp/initrd >/tmp/initrd.ls
#cpio –oc < /tmp/initrd.ls > /boot/initrd-2.6.18-194.ido
#gzip –v9 –S .img /boot/initrd-2.6.18-194.ido

3.修改grub.conf重新启动

这个步骤同上第一章.