linux驱动开发-linux驱动模块加载不成功调试过程

问题描述

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 DEBUG

5
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 #endif

            4,但是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 驱动模块编译,加载过程

时间: 2024-08-29 18:03:41

linux驱动开发-linux驱动模块加载不成功调试过程的相关文章

Linux驱动的两种加载方式过程分析

一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低.若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间. 动态加载利用了Linux的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行

红帽-台式机x64 架构linux 驱动开发的安装问题

问题描述 台式机x64 架构linux 驱动开发的安装问题 我们知道Linux下的驱动开发可以静态加载也可以动态加载的.本人想在台式机上面的小红帽 下静态安装驱动.每次动态加载太费事了,但是貌似没有嵌入式Linux 下面的简单.有哪些方法可以实现系统自动加载,难道只有修改启动脚本么? 请大牛不吝赐教!跪拜!三客优! 解决方案 自己编译一个系统内核吧,这样想怎么弄就怎么弄了 或者查阅红帽的开发手册,看看有木有说明 解决方案二: 谢谢,网上可以下载到红帽的内核么 台式机上面怎么放系统里面启动呢? 解

《Linux设备驱动开发详解 A》一一3.4 Linux内核的编译及加载

3.4 Linux内核的编译及加载 3.4.1 Linux内核的编译 Linux驱动开发者需要牢固地掌握Linux内核的编译方法以为嵌入式系统构建可运行的Linux操作系统映像.在编译内核时,需要配置内核,可以使用下面命令中的一个: make conf?ig(基于文本的最为传统的配置界面,不推荐使用) make menuconf?ig(基于文本菜单的配置界面) make xconf?ig(要求QT被安装) make gconf?ig(要求GTK+被安装) 在配置Linux内核所使用的make c

Linux驱动开发必看详解神秘内核(完全转载)

Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念.我们将学习内核定时器.同步机制以及内存分配方法.不过,我们还是得从头开始这次探索之旅.因此,本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点. 2.1 启动过程 图2-1显示

《Android深度探索(卷1):HAL与驱动开发》——1.5节如何学习Linux驱动开发

1.5 如何学习Linux驱动开发 Android深度探索(卷1):HAL与驱动开发 由于Linux的内核版本更新较快(稳定版本1至3月更新一次,升级版本1至2周更新一次),每一次内核的变化就意味着Linux驱动的变化(就算不需要修改驱动代码,至少也得在新的Linux内核版本下重新编译),所以Linux内核的不断变化对从事Linux驱动开发的程序员影响比较大.不过这对于学习Linux驱动开发来说影响相对较小.因为不管是哪个版本的Linux内核,开发Linux驱动的方法和步骤基本相同,只要掌握了一

linux 3.10 的模块加载机制

问题描述 linux 3.10 的模块加载机制 跪求有关linux 3.10的模块自动加载有关的见解,资料,连接等,中英文都可---以 灰常感谢各位大神咯!!! 解决方案 http://www.cnblogs.com/image-eye/archive/2011/08/19/2145858.html

linux下整合Apache+subversion加载mod_dav_svn.so报错

问题描述 linux下整合Apache+subversion加载mod_dav_svn.so报错 报错信息: httpd: Syntax error on line 219 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_dav_svn.so into server: /usr/local/subversion/lib/libsvn_subr-1.so.0: undefined symbol: apr_hash_

ce6的sd驱动加载失败-CE6 的驱动加载不成功?

问题描述 CE6 的驱动加载不成功? 这两天给CE6的系统加入SD卡驱动,结果发现启动后,SD卡驱动不运行.检查了编译的库文件(sdhc.dll)及目标板中的文件(sdhc.dll),都正常的,不知道是什么原因.不知有没有那位遇到过相同的情况?

ios7-ios开发 UITableView异步加载图片,滑动时会很卡

问题描述 ios开发 UITableView异步加载图片,滑动时会很卡 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellIdentifier = @"cellIdentifier"; BrandTableViewCell *cell = (BrandTableViewCell *)[tab