关于驱动程序模块编译

derest12 2010-08-31 11:24:20
为什么我的驱动程序模块编译时候通过了,并生产了.ko文件,当我加载到系统上时不能出现我想要的结果,我是初学者,
#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT "hello, world\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);
应该出现的结果是在加载的时候出现hello,wrold,在卸载模块的时候出现Goodbye,cruel wrold,但是我加载后卸载了什么都没出现。请问各位高手这个可能是哪点出错了?
...全文
369 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
derest12 2010-09-04
  • 打赏
  • 举报
回复
呵呵,我知道那点出错了,是我的Kcongfig和Mskefile文件的里面的标题有一个字母写反了,悲剧,太不仔细了,
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
要想在内核配置选项中出现这个模块,必须要修改Kconfig这个文件,
derest12 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hao507 的回复:]
我上周也弄的这个问题
http://blog.csdn.net/hao507/archive/2010/08/27/5843351.aspx
看我这篇文章~~希望对你有所帮助~
[/Quote]
为什么我照着你这个 到内核里面的编译模块,但内核模块下,调用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- xconfig出现的是一个内核模块配置选项,但是我在里面并没有找到相应的新加的驱动程序选项,请问一下你是怎么做的?
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 derest12 的回复:]
没事 反正是对了的,不过我编译模块是调用的一个Makefile文件,没有专门在内核里面去修改Kconfig和Makefile文件,我试过那样了,但是没有生产我要的.ko文件,我也不知道怎么回事
看来还要继续探索
[/Quote]
呵呵,是的哈,靠自己调出来的时候,心情很爽~~
祝你好运~
derest12 2010-09-01
  • 打赏
  • 举报
回复
没事 反正是对了的,不过我编译模块是调用的一个Makefile文件,没有专门在内核里面去修改Kconfig和Makefile文件,我试过那样了,但是没有生产我要的.ko文件,我也不知道怎么回事
看来还要继续探索
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 derest12 的回复:]
10楼的,呵呵 不好意思哈,我的交叉编译器弄错了,改过来了就好了,呵呵,
我还有一个疑问,为什么我在卸载我的模块时,控制台会多出一句提示rmmod: module 'hello' not found,我在网上看了别人的帖子,但是在我的lib/modules/2.6.28.6/删除了那个modules.dep.bb文件还是一样的 不行,我在那个看见,而且这个文件是在卸载指令调用的时候 才会生成,删……
[/Quote]
你说说你动态加载具体的做法是怎样的
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 derest12 的回复:]
我已经修改了同目录下的Kconfig和Makefile,并在内核模块看到了相应的选项了,我标记为M,再调用模块编译,但是在相应的目录下并未看见生成的.ko文件,你们知道一般这样的情况 ,可能是什么地方出错吗?
[/Quote]
你重新编译了么?
最好把你的Kconfig和Makefile的代码贴出来,这样方便大家交流~~~
derest12 2010-09-01
  • 打赏
  • 举报
回复
我已经修改了同目录下的Kconfig和Makefile,并在内核模块看到了相应的选项了,我标记为M,再调用模块编译,但是在相应的目录下并未看见生成的.ko文件,你们知道一般这样的情况 ,可能是什么地方出错吗?
lkncjy 2010-08-31
  • 打赏
  • 举报
回复
莫非是init()和exit()函数前面分别还要有个关键字修饰的问题,LZ试一下啵,我也不确定。
wwwunix 2010-08-31
  • 打赏
  • 举报
回复
1、用dmesg看看有没有输出。
2、用lsmod看看你的模块是否加载成功。
deep_pro 2010-08-31
  • 打赏
  • 举报
回复
dmesg 了没
九个太阳2023 2010-08-31
  • 打赏
  • 举报
回复
我上周也弄的这个问题
http://blog.csdn.net/hao507/archive/2010/08/27/5843351.aspx
看我这篇文章~~希望对你有所帮助~
derest12 2010-08-31
  • 打赏
  • 举报
回复
10楼的,呵呵 不好意思哈,我的交叉编译器弄错了,改过来了就好了,呵呵,
我还有一个疑问,为什么我在卸载我的模块时,控制台会多出一句提示rmmod: module 'hello' not found,我在网上看了别人的帖子,但是在我的lib/modules/2.6.28.6/删除了那个modules.dep.bb文件还是一样的 不行,我在那个看见,而且这个文件是在卸载指令调用的时候 才会生成,删除了也没有用的
derest12 2010-08-31
  • 打赏
  • 举报
回复
我看了,那个打印的提示语在/var/log/messages文件中的,为什么会这样呢,那个高手能告诉我
hurricane880 2010-08-31
  • 打赏
  • 举报
回复
$cat /var/log/message | grep hello
九个太阳2023 2010-08-31
  • 打赏
  • 举报
回复
我的那篇文章在我的平台上是测试过的~~呵呵,
九个太阳2023 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 derest12 的回复:]
二楼的,我照着你那个步骤编译,但是我在内核的主目录下调用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-xconfig指令,会一直报错误信息,编译不来,提示如下:
make: arm-none-linux-gnueabi-xconfiggcc:命令未找到
CHK include/linux/version.h
make[1]: “……
[/Quote]
你的交叉编译器用的是什么??
wwwunix 2010-08-31
  • 打赏
  • 举报
回复
你的交叉编译器用的是什么?
如果是
arm-linux-gcc
那么这样用:
make ARCH=arm CROSS_COMPILE=arm-linux-
derest12 2010-08-31
  • 打赏
  • 举报
回复
二楼的,我照着你那个步骤编译,但是我在内核的主目录下调用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-xconfig指令,会一直报错误信息,编译不来,提示如下:
make: arm-none-linux-gnueabi-xconfiggcc:命令未找到
CHK include/linux/version.h
make[1]: “include/asm-arm/mach-types.h”是最新的。
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-arm
CC kernel/bounds.s
/bin/sh: arm-none-linux-gnueabi-xconfiggcc: command not found
make[1]: *** [kernel/bounds.s] 错误 127
make: *** [prepare0] 错误 2
请问一下 各位怎么解决
derest12 2010-08-31
  • 打赏
  • 举报
回复
lsmod 模块是成功加载了的,我是用的虚拟机,在终端上没有输出,
dmesg是什么意思?
加载更多回复(2)

4,468

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧