Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187522
  • 博文数量: 55
  • 博客积分: 1466
  • 博客等级: 上尉
  • 技术积分: 716
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-13 22:34
文章分类

全部博文(55)

文章存档

2011年(27)

2010年(28)

我的朋友

分类: LINUX

2010-08-13 22:56:27

 机器内核是2.6.23.1-42.fc8,原来直接在运行内核中编译模块并链接,结果都正常。后来为了使用标准内核,下载了内核2.6.23.1,在虚拟机中编译,结果大于8G,无法完成。后不用虚拟机(f8的开机内存消耗将近500M,因此也不适合用虚拟机,主机受不了),直接在笔记本上安装f8。按说明编译内核树:
make menuconfig(取消version一项)
make
make bzImage
make modules
make modules_install
make install
至此已经把内核编译完成,在/lib/modules 下面显示有了2.6.23.1。因此可以用该内核树编译模块了。
在Makefile中使用 KERNELDIR ?= /lib/modules/2.6.23.1/build
make 成功了
但是insmod *.ko 却显示了错误: insmod: error inserting 'xxx.ko': -1 Invalid module format;
用# dmesg | tail 看到如下信息:xxx: version magic '2.6.23.1 SMP mod_unload 686 4KSTACKS ' should be '2.6.23.1-42.fc8 SMP mod_unload 686 4KSTACKS '; 这一行的意思就是说,当前插入的模块xxx.ko的版本信息(version magic)与正运行的kernel的版本信息不一致!应该是2.6.23.1-42.fc8 SMP mod_unload 686 4KSTACKS,而实际上xxx.ko的版本信息却是:2.6.23.1 SMP mod_unload 686 4KSTACKS
可以手动修改内核树的版本号,使之与运行内核版本一致。因为两个内核其实基本一致,这其实只是一个符号的标识,对结果没有影响。
修改linux-2.6.23.1/include/linux/utsrelease.h


#define UTS_RELEASE "2.6.23.1"
改为
#define UTS_RELEASE "2.6.23.1-42.fc8"
这样就相当于把标准内核树的名字改成了与运行内核一致的版本。
运行成功。
若编译内核与运行内核不一致,可能会导致问题。

另外,如果分配的设备号已经存在也会有以上错误。

阅读(1046) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux环境变量设置

给主人留下些什么吧!~~