Kernel , Modules

来源:互联网 发布:单文件加密软件 编辑:程序博客网 时间:2024/05/16 12:06
编译内核

预备工作
1、到kernel.org下载内核代码
2、解压
3、进入解压后的目录进行配置
编译配置(有3中配置方式)
1、控制台编译配置
yum install -y gcc ncurses  ncurses-devel
make manuconfig
提示:可能会包一个有关80的错误,那是因为你的显示框太窄了,拉宽一点就行
2、图形界面安装
yum install -y gcc gtk+ gtk+-devel
make gconfig
3、图形界面安装
yum install -y gcc qt qt-devel
make xconifg(x window 下安装)

上面的步骤会在内核源码的根目录下生成一个.config文件

编译选项
make bzImage(编译内核)
将.config中标识为Y的记录编译到一起,编译完成后在 arch/i386/boot/bzImage
make modules(编译模块)
将.config中标识为M的记录编译成模块,便于完成后生成的东西在 dirvers/目录下面
make modules_install(安装模块)
将编译好的模块(dirvers/*)放到/lib/modules/2.6.100/下(我下载的是2.6.100的源码
make install(安装内核)
1、将bzImage复制到/boot/下并以内核的版本号命名(vmlinuz-2.6.100)
2、mkinitrd /boot/initrd-2.6.100.img 2.6.100 制作这个内核启动时必须加载的驱动集合镜像。也可以手动设置某些驱动必须加入该镜像(如你新买了一块scsi硬盘,要加入scsi的驱动,命令如下mkinitrd --with scsi_mod /root/aaaa 2.6.32.63)
3、修改 /boot/grub/grub.conf,添加启动内核选项

加载模块机制
1、查看模块信息
lsmod   查看内核加载的所有模块
modinfo vfat 查看指定模块详细信息
2、加载,卸载vfat模块手动解决模块依赖
2.1、先加载vfat依赖的fat模块
insmod /lib/modules/2.6.18-194.el5/kernel/fs/fat/fat.ko
2.2、加载vfat模块
insmod /lib/modules/2.6.18-194.el5/kernel/fs/vfat/vfat.ko (依赖fat.ko)
2.3、卸载vfat模块
rmmod vfat 
2.4、卸载依赖的fat模块
rmmod fat

 3、手动加载vfat模块(自动解决模块依赖
3.1、加载vfat模块
modprobe vfat  自动解决依存关系,且不用指定模块的全路径,
modprobe 会去查询/lib/modules/2.6.18-194.el5/modules.dep配置文件
3.2、卸载vfat模块
modprobe  -r vfat 卸载模块

更新modules.dep文件
depmod (更新modules.dep文件
modprobe 依赖/lib/modules/2.6.18-194.el5/modules.dep文件中的信息。那谁来维护呢?depmod会帮你维护

1、你编译了一个的新的模块xxx.ko
2、将xxx.ko文件复制到/lib/modules/2.6.18-194.el5/kernel/下
3、执行depmod,该命令会搜索/lib/modules/2.6.18-194.el5/kernel/下的新模块并添加到modules.dep文件中


疑问
那还有一个疑问,usb接口可以插鼠标,摄像头,键盘之类的东西,那系统如何判断加载什么驱动与之对应呢?
解答
当鼠标,键盘等接入电脑后,会给电脑传递硬件ID
1、Linux根据硬件ID去查找/lib/modules/2.6.18-194.el5/modules.usbmap文件,找出该硬件的驱动名
2、再去/lib/modules/2.6.18-194.el5/modules.dep中查找驱动全路径及是否依赖其他插件
3、最后去根据驱动路径去加载相应的驱动

开机加载模块
1、我们可以将模块编译到内核中(vmlinuz-2.6.100)
2、也可以将模块编译到initrd-2.6.100.img中
3、还可以写到/etc/modprobe.conf中
/etc/modprobe.conf开机时自动被/etc/rc.sysinit脚本调用。 为模块做一些加载时的初始化或释放时的销毁操作,也可以为模块传递参数,或设置别名
具体请参考:http://fffo.blog.163.com/blog/static/21191306820149642647130/


0 0