我的lkm程序,insmod时提示内核版本不对,怎样才能成功升级内核?

colordancer 2010-10-12 08:24:56
首先声明,我是纯正的linux菜鸟,到目前为止,使用ubuntu的时间不超过一个星期。之所以做这个lkm程序是因为作业。

好吧,下面开始倒苦水。
我的ubuntu的版本是2.6.32.21的,/usr/src下只有linux-2.6.32.21-generic文件夹
我的程序编译用的source是从kernal.org上下的2.6.32.21版本的,版本明明一样,但是insmod时提示我“Invalid module format”,dmesg后发现是“disagrees about version of symbol struct_module”。搜索一气后,都说是版本号不对。好吧,那就升级内核。

网上流传的升级内核的方法真多,但是要么不完全正确,让我功亏一篑,要么太过古老,让我摸不着头脑。我只能硬着头皮尝试,目前总共尝试编译内核次数不低于5次,纠结时间超过3天,我不想在这么漫无目的地尝试了,但是时间又不允许我按部就班地学习ubuntu,所以我只能来这里求救

我的问题就是这样:我的lkm程序能正确编译成.ko,但是insmod时提示版本不对,该怎么解决?如果是升级内核,我该怎么一步一步去做才能成功升级,然后成功地让我的lkm程序insmod。
...全文
137 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
deep_pro 2010-10-12
你还是试试装ubuntu带的头文件包吧
我不知道具体的名称,你多尝试
apt-get install kernel-headers-*
apt-get install kernel-headers-linux-2.6.32.21-generic
回复
李迟 2010-10-12
我使用FC9升级到某个版本(按楼上几位的方法),编写驱动没有出现insmod问题。
要确保你当前正在使用的系统的版本跟你写驱动所用的版本是一致(你升级后再进到新内核这个“系统”),其它没什么问题了,因为驱动编译过程中要用到内核的头文件。

————
ubuntu是给新手玩玩的,不适合搞开发。——那些个gcc、g++、bison、flex,等等,慢慢升级吧。
回复
colordancer 2010-10-12
[Quote=引用 10 楼 eclipse_2 的回复:]

我没用过ubuntu
在rhel5.4下可以用一下方式编译通过
make mrproper
make menuconfig
make bzImage
make modules
make modules_install
make install
[/Quote]

嗯,编译内核其实没什么问题。
关键我想知道,我的内核是2.6.32.21-generic,我该怎样升级内核以让我的程序能insmod成功
回复
colordancer 2010-10-12
[Quote=引用 3 楼 steptodream 的回复:]

2.6系内核升级步骤
1.make mrproper
2.make oldconfig
3.make config/make menuconfig(推荐)/make xconfig/make gconfig
4.make
5.make modules_install
6.mkinitrd
7.installkernel
[/Quote]

嗯,这个大概的步骤我知道。但是我在网上搜到比较权威一点的步骤有两个
一个就是make modules_install之后,再make install,然后再reboot
另一个就是你说的mkinitrd

我试过第一种方法,但是我使用相同的内核去编译的,唯一区别就是自带的有generic字样,但是最后升级失败。
第二种方法我也尝试了一次,但是提示找不到mkinitrd,/sbin下也没有,我是按照这篇文章里的提示做的:http://blog.csdn.net/yanziwhsd/archive/2010/09/14/5884604.aspx,目前卡在找不到mkinitrd,不能继续
回复
colordancer 2010-10-12
[Quote=引用 8 楼 deep_pro 的回复:]

我的程序编译用的source是从kernal.org上下的2.6.32.21版本的,版本明明一样,但是insmod时提示我“Invalid module format”
---------------------
又见这种问题,你下的内核和当前使用的内核的版本区别在于一个是linux-2.6.32.21-generic,一个是linux-2.6.32.21
自己从kernel.org下的源……
[/Quote]

我的猜测正是这样,也许就是这个generic在作怪。
如果我想在ubuntu下解决这个问题,我更换个新的内核,2.6.35,把内核升级到35,然后再用6.35的source编译我的程序,这样可行吗

btw,我真的很讨厌ubuntu,新手入门门槛太高了
回复
gohome520 2010-10-12
[Quote=引用 8 楼 deep_pro 的回复:]

我的程序编译用的source是从kernal.org上下的2.6.32.21版本的,版本明明一样,但是insmod时提示我“Invalid module format”
---------------------
又见这种问题,你下的内核和当前使用的内核的版本区别在于一个是linux-2.6.32.21-generic,一个是linux-2.6.32.21
自己从kernel.org下的源……
[/Quote]
嗯,Ubuntu在/usr/src/下应该是自带了这个头文件包的。
回复
小魔菇 2010-10-12
我没用过ubuntu
在rhel5.4下可以用一下方式编译通过
make mrproper
make menuconfig
make bzImage
make modules
make modules_install
make install

回复
deep_pro 2010-10-12
我的程序编译用的source是从kernal.org上下的2.6.32.21版本的,版本明明一样,但是insmod时提示我“Invalid module format”
---------------------
又见这种问题,你下的内核和当前使用的内核的版本区别在于一个是linux-2.6.32.21-generic,一个是linux-2.6.32.21
自己从kernel.org下的源码,必须使用跟当前内核一样的config编译过之后才能拿来编译内核模块
可以安装一个内核头文件包,但是我没用ubuntu,不知道是什么名字,就是编译你当前内核使用的内核头文件

最简单的办法,去装一个fc8,安装时尽可能勾选多的开发库,附带kde开发
里面的kdevelop能建立内核工程,更高版本的fc居然去掉kdevelop的内核工程,气人

ubuntu其实最不适合新手用,要手动装一堆包,足够把新手玩死
回复
小魔菇 2010-10-12
[Quote=引用 7 楼 steptodream 的回复:]

引用 6 楼 eclipse_2 的回复:

引用 5 楼 steptodream 的回复:

引用 4 楼 gohome520 的回复:

引用 1 楼 colordancer 的回复:

要是谁能帮我解决,我愿意再出100rmb表示我的诚意。

有钱银!

曾经有人要配置一个服务器 给2000RMB 在这里

超级有钱银

那也不一定啊 也可能是应急之策
……
[/Quote]
恩 是啊 工作鸭梨大
回复
steptodream 2010-10-12
[Quote=引用 6 楼 eclipse_2 的回复:]

引用 5 楼 steptodream 的回复:

引用 4 楼 gohome520 的回复:

引用 1 楼 colordancer 的回复:

要是谁能帮我解决,我愿意再出100rmb表示我的诚意。

有钱银!

曾经有人要配置一个服务器 给2000RMB 在这里

超级有钱银
[/Quote]
那也不一定啊 也可能是应急之策
回复
小魔菇 2010-10-12
[Quote=引用 5 楼 steptodream 的回复:]

引用 4 楼 gohome520 的回复:

引用 1 楼 colordancer 的回复:

要是谁能帮我解决,我愿意再出100rmb表示我的诚意。

有钱银!

曾经有人要配置一个服务器 给2000RMB 在这里
[/Quote]
超级有钱银
回复
steptodream 2010-10-12
[Quote=引用 4 楼 gohome520 的回复:]

引用 1 楼 colordancer 的回复:

要是谁能帮我解决,我愿意再出100rmb表示我的诚意。

有钱银!
[/Quote]
曾经有人要配置一个服务器 给2000RMB 在这里
回复
gohome520 2010-10-12
[Quote=引用 1 楼 colordancer 的回复:]

要是谁能帮我解决,我愿意再出100rmb表示我的诚意。
[/Quote]
有钱银!
回复
steptodream 2010-10-12
2.6系内核升级步骤
1.make mrproper
2.make oldconfig
3.make config/make menuconfig(推荐)/make xconfig/make gconfig
4.make
5.make modules_install
6.mkinitrd
7.installkernel
回复
jxj141 2010-10-12
[Quote=引用楼主 colordancer 的回复:]
首先声明,我是纯正的linux菜鸟,到目前为止,使用ubuntu的时间不超过一个星期。之所以做这个lkm程序是因为作业。

好吧,下面开始倒苦水。
我的ubuntu的版本是2.6.32.21的,/usr/src下只有linux-2.6.32.21-generic文件夹
我的程序编译用的source是从kernal.org上下的2.6.32.21版本的,版本明明一样,但是insmod时提示我……
[/Quote]
除了2.6.32.21,还有个自己命名的版本,把驱动的内核路径指向ubuntu的内核。
回复
colordancer 2010-10-12
要是谁能帮我解决,我愿意再出100rmb表示我的诚意。
回复
colordancer 2010-10-12
嗯,谢谢楼上几位,经过不懈的搜索,不断调整搜索关键字,我在这篇文章(http://hi.baidu.com/shifu545/blog/item/21b8f2d0e65bc582a1ec9c61.html)的帮助下,成功升级内核只2.6.35,并成功insmod

结贴了。
回复
李迟 2010-10-12
[Quote=引用 17 楼 colordancer 的回复:]
引用 15 楼 subfate 的回复:

我使用FC9升级到某个版本(按楼上几位的方法),编写驱动没有出现insmod问题。
要确保你当前正在使用的系统的版本跟你写驱动所用的版本是一致(你升级后再进到新内核这个“系统”),其它没什么问题了,因为驱动编译过程中要用到内核的头文件。

————
ubuntu是给新手玩玩的,不适合搞开发。——那些个gcc、g++、bison、flex,等等……
[/Quote]
以fedora 9 download关键字google来的:
http://download.chinaunix.net/download/0013000/12384.shtml
注:其实搞开发这东东,许多软件、系统不一定要最新的,一定新且能够适合自己使用即可。
回复
colordancer 2010-10-12
[Quote=引用 18 楼 hao507 的回复:]

http://blog.csdn.net/hao507/archive/2010/09/28/5911829.aspx
LZ看看这篇文章,希望能够帮助你~
[/Quote]
这篇文章我看过了,失败告终。
回复
deep_pro 2010-10-12
verycd 应该有fc8
回复
加载更多回复
发帖
Linux_Kernel
创建于2007-08-27

4153

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
帖子事件
创建了帖子
2010-10-12 08:24
社区公告
暂无公告