问题描述
- linux驱动模块加载不成功调试过程
-
版本:linux2.6.30问题出现的过程:
1,我在Ubuntu环境下编译驱动模块
2,编译成功后,在板子上insmod出现了
embest_led: version magic '2.6.30 mod_unload modversions ARMv5 ' should be '2.6.30 preempt mod_unload ARMv5 '
insmod: error inserting 'embest_led.ko': -1 Invalid module format
3,我就更改了/usr/src/linux-2.6.30/include/vermagic.h文件,最终结果是用modinfo查看embest_led.ko信息是‘2.6.30 preempt mod_unload ARMv’同时在板子上insmod后没出现上述错误,而且用lsmod可以查看到embest信息,改动如下:1 #include
2 #include
3
4 #define DEBUG5
6 #ifdef DEBUG
7 #define CONFIG_PREEMPT
8 #define CONFIG_MODULE_UNLOAD
9 #endif
10 /* Simply sanity version stamp for modules. */
11 #ifdef CONFIG_SMP
12 #define MODULE_VERMAGIC_SMP "SMP "
13 #else
14 #define MODULE_VERMAGIC_SMP ""
15 #endif
16 #ifdef CONFIG_PREEMPT
17 #define MODULE_VERMAGIC_PREEMPT "preempt "
18 #else
19 #define MODULE_VERMAGIC_PREEMPT ""
20 #endif
21 #ifdef CONFIG_MODULE_UNLOAD
22 #define MODULE_VERMAGIC_MODULE_UNLOAD "mod_unload "
23 #else
24 #define MODULE_VERMAGIC_MODULE_UNLOAD ""
25 #endif
26
27 #ifdef DEBUG
28
29 #ifdef CONFIG_MODVERSIONS
30 #define MODULE_VERMAGIC_MODVERSIONS ""
31 #else
32 #define MODULE_VERMAGIC_MODVERSIONS "modversions "
33 #endif
34
35 #else
36
37 #ifdef CONFIG_MODVERSIONS
38 #define MODULE_VERMAGIC_MODVERSIONS "modversions "
39 #else
40 #define MODULE_VERMAGIC_MODVERSIONS ""
41 #endif
42
43 #endif
44
45 #ifndef MODULE_ARCH_VERMAGIC
46 #define MODULE_ARCH_VERMAGIC ""
47 #endif4,但是cat /proc/devices 时没有看到相关信息(主次设备号),在/dev/中也没有相应的节点。 5,最高不清楚的是在中断没有打印(我把中断级别调到8了),在/var/volatile/log/messages中也没有相关打印信息。 6,我怀疑是不是没有调用到源文件中module_init中的函数,就写了一个hello_world模块程序。问题是同样的。
解决方案
http://blog.sina.com.cn/s/blog_69dd1a0901019cgd.html
解决方案二:
Linux 驱动模块编译,加载过程
简单的Linux 驱动模块编译,加载过程