红联Linux门户
Linux帮助

在一个系统上编译多个核心版本的驱动模块

发布时间:2006-03-29 00:27:47来源:红联作者:wide
我们可以只在一个系统中使用一份核心源代码就编译出来不同的驱动模块,
方法如下:
1、安装相应版本的核心源代码。
2、进入/usr/src目录,假设你安装的是2.4.17-1的源代码,那么需要建立联结linux指向/usr/src/linux-2.4.17-1目录,因为许多驱动源代码都需要使用/usr/src/linux目录。
3、检查你系统中下面两个目录: /usr/include/linux /usr/include/asm 如果不存在或不是联结,那么需要建立联结,指向/usr/src/linux/include/linux和/usr/src/linux/include/asm: ln -s /usr/src/linux/include/linux /usr/include/linux ln -s /usr/src/linux/include/asm /usr/include/asm
4、下面开始修改核心源代码的配置以适应编译不同版本的驱动模块: *首先进入/usr/src/linux目录,执行命令make mrproper, 然后确定你需要编译的版本,假设是2.4.17-1BOOT,那么首先进入/usr/src/linux目录,修改Makefile文件,文件前几行如下: VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 17 EXTRAVERSION = -1custom 将最后一行改为你需要的-1BOOT,然后保存退出。 然后将configs/kernel-2.4.18-i386-BOOT.config文件拷贝到当前目录下,命名为.config 然后执行命令make oldconfig进行配置,完成后执行命令make dep,之后就完成了核心源代码的设置工作。 如果你需要编译其他版本,比如SMP的,那么需要重复上面几个步骤,将Makefile中那行改为-1smp,然后将configs/kernel-2.4.18-i686-smp.config文件拷贝到当前目录下命名为.config,然后也是连续执行make oldconfig和make dep命令,之后就可以重新编译你的驱动源代码了。
5、编译驱动源代码时可以参考其中的README或INSTALL文件,修改还核心源代码配置后就可以开始编译了,编译好一个版本之后一定要记得备份,因为下次编译会冲掉原来的驱动模块。驱动模块编译好之后可以通过查找其中的关键字kernel_version来查看相应的版本。

6、如果你只是拿到了几个C文件和头文件,说明中说要替换掉核心源代码中相应的文件然后重新编译核心模块,那么就会需要很长的编译时间,这里有一个简单的方法,就是只编译这个驱动而不需要重新编译所有核心模块,使用命令: gcc -DMODULE -D__KERNEL__ -O6 -c filename.c 可以直接将C程序编译成驱动模块,在当前目录下生成。 *如果有多个C程序,可以分别使用上述命令编译,然后使用命令ld -r -o destname.o sourcename.o进行连接就可以了。
7、如果是需要放在核心源代码中编译的,可以执行这个命令:make -n modules > cmd.sh 这个命令不是编译模块,只是将编译时要执行的命令打出来,所以我们可以编辑cmd.sh文件, 找到编译你的那些模块的命令,然后将他们拷贝出来,另存为一个脚本文件,然后在相应的目录下执行你的脚本文件就可以得到驱动的模块了。
文章评论

共有 0 条评论