Chinaunix

标题: 编写内核模块问题,不能生成.ko文件? [打印本页]

作者: 我是害虫    时间: 2008-11-16 19:33
标题: 编写内核模块问题,不能生成.ko文件?
编译使不能生成.ko

环境是fc9,因为它本身不包含内核,所以我下载了一个,重新编译了

不知道是什么原因
[root@localhost project]# make -C /usr/src/linux-2.6.27.6 M=$PWD modules
make: Entering directory `/usr/src/linux-2.6.27.6'
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory `/usr/src/linux-2.6.27.6'

程序是按ldd3上面写的

达人指点一下,弄很长时间了

谢谢
作者: Godbach    时间: 2008-11-16 19:58
你编译的内核执行make modules_install了吗
作者: Godbach    时间: 2008-11-16 19:59
就是/lib/modules目录下生成了以你使用源码版本命名的目录了吗
作者: dreamice    时间: 2008-11-16 20:09
标题: 回复 #1 我是害虫 的帖子
应该是重新编译的时候除了问题,你可以找个最简单的helloworld编译一下试试
作者: 我是害虫    时间: 2008-11-16 20:38
原帖由 Godbach 于 2008-11-16 19:59 发表
就是/lib/modules目录下生成了以你使用源码版本命名的目录了吗


make modules_install命令作了
在lib/modules下面也生成了2。6。27。6的目录
作者: 我是害虫    时间: 2008-11-16 20:41
原帖由 dreamice 于 2008-11-16 20:09 发表
应该是重新编译的时候除了问题,你可以找个最简单的helloworld编译一下试试


试过了,没问题

我想可能是不是,gcc还是用的以前内核头文件的原因阿,或者说当初标准库编译的时候,用的旧的内核头文件

郁闷阿
作者: dreamice    时间: 2008-11-16 21:28
原帖由 我是害虫 于 2008-11-16 20:41 发表


试过了,没问题

我想可能是不是,gcc还是用的以前内核头文件的原因阿,或者说当初标准库编译的时候,用的旧的内核头文件

郁闷阿


如果helloworld可以编译的话,你把你的代码贴出来看看,到底是怎么回事。
作者: 我是害虫    时间: 2008-11-16 21:51
原帖由 dreamice 于 2008-11-16 21:28 发表


如果helloworld可以编译的话,你把你的代码贴出来看看,到底是怎么回事。
  1. #include <linux/module.h>       
  2. #include <linux/kernel.h>       

  3. int init_module(void)
  4. {
  5.         printk(KERN_ALERT "Hello world \n");
  6.         return 0;
  7. }
  8. void cleanup_module(void)
  9. {
  10.         printk(KERN_ALERT "Goodbye world\n");
  11. }

  12. module_init(init_module);
  13. module_exit(cleanup_module);

复制代码


makefile文件是
obj-m +=hello.o


[root@localhost project]# make -C /usr/src/linux-2.6.27.6 M=$PWD modules        //在源程序目录里执行的
make: Entering directory `/usr/src/linux-2.6.27.6'
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory `/usr/src/linux-2.6.27.6'


我觉得不是程序的问题,不知道您用的是什么环境

[ 本帖最后由 我是害虫 于 2008-11-16 21:53 编辑 ]
作者: dreamice    时间: 2008-11-16 22:11
给你一个参考的Makefile试一下
  1. TARGET = hello
  2. KDIR = /lib/modules/$(shell uname -r)/build
  3. PWD = $(shell pwd)
  4. obj-m := $(TARGET).o
  5. default:
  6.         make -C $(KDIR) M=$(PWD) modules
  7. clean:
  8.         $(RM) *.o *.ko *.mod.c Module.symvers
复制代码

作者: 我是害虫    时间: 2008-11-16 22:30
谢谢你
成功了
能告诉我是因为什么原因吗

我感觉把您给我的makefile展开,和我得差不多阿

make语句真难懂啊,给推荐本书把
再次谢谢你

[ 本帖最后由 我是害虫 于 2008-11-16 22:36 编辑 ]
作者: dreamice    时间: 2008-11-17 09:23
原帖由 我是害虫 于 2008-11-16 22:30 发表
谢谢你
成功了
能告诉我是因为什么原因吗

我感觉把您给我的makefile展开,和我得差不多阿

make语句真难懂啊,给推荐本书把
再次谢谢你


你要明白其中的每一条语句是什么含义,我给你贴一本电子书,关于makefile编写的。

makev3.80manua-zhl1.3.pdf

1.29 MB, 下载次数: 1320


作者: zenglingping    时间: 2008-11-29 17:22
书是不错,但没有基础的人看得较晕;

关于ko文件,我也在发愁,还没有搞定。。。
作者: dreamice    时间: 2008-11-29 18:22
原帖由 zenglingping 于 2008-11-29 17:22 发表
书是不错,但没有基础的人看得较晕;

关于ko文件,我也在发愁,还没有搞定。。。


看一下模块编译,置顶的Linux Kernel Module Programming
作者: shuaiying    时间: 2008-12-17 11:17
标题: 不能生成.ko
为什么我按上面的方法还不能生成.ko呢?
我只装了红帽子企业版12,在/lib/modules中有linux目录,为什么不行呢?
作者: 442358772    时间: 2013-06-16 23:46
这是我真要用的知识很好啊太感谢了
作者: xifanlover    时间: 2013-06-26 14:34
/usr/src/linux-2.6.27.6你的这个内核源代码目录是错的。你改成/lib/modules/2.6.25-14.fc9.i686/build就可以了。2.6.25-14.fc9.i686这个文件夹名字可能和你的不一样,你自己确定一下。其实和dreamice的/lib/modules/$(shell uname -r)/build是同样的含义。shell命令 uname -r就是查看你操作系统的发行版号的。



作者: wsxingjun    时间: 2017-04-20 14:42

遇到了与您同样的问题。
找到了问题的根源:
①Makefile中"obj-m" 书写时中间不能具有空格;
②"obj-s" 也不行;
③“Hello.o”不能写成"Hello.c"
仅供参考;





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2