QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hit007

内核模块编译,加载时说版本不对的问题

  [复制链接]
 楼主| 发表于 2003-4-11 23:26:54 | 显示全部楼层
good suggestion,
but i don't  that's necessary,and the kernel compiling sounds not so difficult
i will compile the kernel
but the os i have installed need to be compiled again?i doubt
回复

使用道具 举报

发表于 2003-4-11 23:32:43 | 显示全部楼层
anyway u need run make dep.
回复

使用道具 举报

 楼主| 发表于 2003-4-14 10:00:52 | 显示全部楼层
我试过了,还是不行
究竟怎么回事?
回复

使用道具 举报

发表于 2003-4-14 14:19:23 | 显示全部楼层
莫非见鬼
回复

使用道具 举报

发表于 2003-4-14 21:29:35 | 显示全部楼层
can u use another vanilla kernel? and post u makefile, pls.
回复

使用道具 举报

发表于 2003-4-14 22:15:40 | 显示全部楼层
my problem:hello.o was compiled for kernel version 2.4.20 while this kernel version is 2.4.20-18
回复

使用道具 举报

发表于 2003-4-14 22:31:07 | 显示全部楼层
can u check the value in include/linux/version.h?
回复

使用道具 举报

发表于 2003-4-14 22:34:21 | 显示全部楼层
#define UTS_RELEASE "2.4.20-18"
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << + (c))
回复

使用道具 举报

发表于 2003-4-14 22:48:28 | 显示全部楼层
very strange, usually if u include module.h and point to correct kernel source code, u can get correct version. i know there are some strange when people use redhat hacked kernel. but i never meet them. a suggestion is to use a vanilla kernel. can anybody try a vanilla kernel if u meet version problem?
回复

使用道具 举报

 楼主| 发表于 2003-4-16 13:04:19 | 显示全部楼层
what is vanilla version?
正版?还是什么意思?
回复

使用道具 举报

发表于 2003-4-16 21:46:46 | 显示全部楼层
vanilla kernel means the standard kernel released by linus, which can be downloaded from kernel.org. any kernel that has one or more patch can not be a vanilla kernel. like --acx, --ds, --rmk, these are patched by some people for some purpose. they are hacked ones.
回复

使用道具 举报

 楼主| 发表于 2003-4-20 12:43:03 | 显示全部楼层
但是我用的是redhat8.0的安装盘,难道不行吗?;应该是正版的
回复

使用道具 举报

发表于 2003-4-20 22:23:59 | 显示全部楼层
can u try following steps?
1) use a vanilla or redhat linux kernel. and recompile it.
2) boot with u new kernel
3) make sure that u module makefile has correct INCLUDE=/usr/src/linux-xxx/include.
4) compile u module and try again.
回复

使用道具 举报

发表于 2003-4-22 02:06:00 | 显示全部楼层
哈哈,这么久了还没解决吗?我说说我的看法:
(1)说明一点,写linux用户程序所用的头文件和写kernel module用的头文件是不一样的。用户程序一般使用/usr/include目录下的文件,这些文件其实是你的发行版编译glibc时用的和产生的文件(这点做过 linux from scratch的人能猜出来)。就是说你使用的linux的发行商(redhat公司)的发行版本(redhat编译glibc时用的内核头文件是kernel 2.4.9的。gcc默认情况下使用/usr/include下的文件,所以你编译出来的东西版本会不对。我这样说可能有点绕。而编译kernel module 用的文件必须与你的内核编译的时候用的是一致的,所以应该是/usr/src/linux-2.4.18-14/include下面的文件
(2)下面说你那个模块怎么编译:你其实可以简单得用下面的命令:
gcc -c -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux-2.4.18-14/include helloworld.c
这条命令指定你使用/usr/src/linux-2.4.18-14/include目录下的头文件。cheungming的那个makefile没有问题,问题在于你的系统中并不存在/usr/src/linux/这样一个目录或连接,这样INCLUDEDIR = /usr/src/linux/include这句话其实并没有用。按照习惯,你应该在/usr/src下做个连接指向/usr/src/linux-2.4.18-14/:
cd /usr/src
ln -s linux-2.4.18-14 linux
我相信这样那个makefile可以很完美得工作。
(3)在redhat上用vanilla version 的kernel source编译内核会是一件很痛苦的事情。你会发现很多daemon无法正常启动或终止。建议你要是想真正做几个module那还是用debian或gentoo,或者干脆lfs!
(4)hacked kernel是指redhat公司自做主张得对原本的kernel source做了修改或优化,跟正版盗版可没关系。
回复

使用道具 举报

发表于 2003-4-22 02:11:05 | 显示全部楼层
thx a lot for u explanation. u make things clear.
but
3) i use vanilla kernel on my rh7.3 and works fine.
5) i can not input chinese. sorry.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-14 12:18 , Processed in 0.044017 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表