linux 内核驱动学习之scull代码编译
2011-11-16 20:53
501 查看
学到了Linux设备驱动程序第三版中文版到第三章中,对驱动scull进行了介绍。于是再网上找到了源码来,下载下来后进行编译,发现一些错误,主要是由于Linux版本升级所致。现在记录下来 ,以备查询。scull驱动所针对到版本我也不清楚,应该是2.6.*吧 ,而我到Linux内核版本是3.0.4到。
1、main.c:17: fatal error: linux/config.h: No such file or directory 不需要该文件,直接注释掉即可。
2、main.c:556: error: unknown field ‘ioctl’ specified in initializer这个错误主要是由于struct file_operations结构发生了编号,而再对其成员进行初始化到时候由于ioctl已经不再该结构中,所以出错,而新增了其他两个成员,由于我此次到目的只是编译通过,即注释掉即可,再pipe.c和access.c文件中都存在对该结构进行赋值到操作,都需要相应到处理access.c中有多处.
3、main.c:652: error: implicit declaration of function ‘init_MUTEX’,该错误是因为init_MUTEX函数再新到内核中已经被废弃,不再使用,改成sema_init函数。因为原来到 init_MUTEX的实现里面调用到也是这个函数。如/*init_MUTEX(&scull_devices[i].sem);改成下面那样即可*/
sema_init(&scull_devices[i].sem,1);
4、access.c:99: error: ‘SPIN_LOCK_UNLOCKED’ undeclared here (not in a function),是说SPIN_LOCK_UNLOCKED不被认识了,其实也是被废弃了,改用DEFINE_SPINLOCK即可,如
/*static spinlock_t scull_w_lock = SPIN_LOCK_UNLOCKED;*改成下面到方式/
static DEFINE_SPINLOCK(scull_w_lock);
以上几处改了后,就OK了,能够生产scull.ko了,至于安装和运行会不会有问题,God才知道,我还没有尝试,那是以后到事了。但总的来说这几个错误都是由于版本升级导致到问题,感谢那些先行者们,让我轻松搞定这个问题。
行了,做饭吃去了。。。。。。到底是先看完书呢,还是先把这个代码一一看懂呢,纠结ing,呵呵
1、main.c:17: fatal error: linux/config.h: No such file or directory 不需要该文件,直接注释掉即可。
2、main.c:556: error: unknown field ‘ioctl’ specified in initializer这个错误主要是由于struct file_operations结构发生了编号,而再对其成员进行初始化到时候由于ioctl已经不再该结构中,所以出错,而新增了其他两个成员,由于我此次到目的只是编译通过,即注释掉即可,再pipe.c和access.c文件中都存在对该结构进行赋值到操作,都需要相应到处理access.c中有多处.
3、main.c:652: error: implicit declaration of function ‘init_MUTEX’,该错误是因为init_MUTEX函数再新到内核中已经被废弃,不再使用,改成sema_init函数。因为原来到 init_MUTEX的实现里面调用到也是这个函数。如/*init_MUTEX(&scull_devices[i].sem);改成下面那样即可*/
sema_init(&scull_devices[i].sem,1);
4、access.c:99: error: ‘SPIN_LOCK_UNLOCKED’ undeclared here (not in a function),是说SPIN_LOCK_UNLOCKED不被认识了,其实也是被废弃了,改用DEFINE_SPINLOCK即可,如
/*static spinlock_t scull_w_lock = SPIN_LOCK_UNLOCKED;*改成下面到方式/
static DEFINE_SPINLOCK(scull_w_lock);
以上几处改了后,就OK了,能够生产scull.ko了,至于安装和运行会不会有问题,God才知道,我还没有尝试,那是以后到事了。但总的来说这几个错误都是由于版本升级导致到问题,感谢那些先行者们,让我轻松搞定这个问题。
行了,做饭吃去了。。。。。。到底是先看完书呢,还是先把这个代码一一看懂呢,纠结ing,呵呵
相关文章推荐
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录
- linux驱动学习--第六天:第四章 Linux 内核模块 之 Linux 内核模块编译
- [linux设备驱动程序]scull字符设备驱动编译在新内核编译问题解决方案
- linux 驱动学习笔记01--Linux 内核的编译
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- linux驱动学习(1)-ubuntu 内核源码下载及编译
- tony之linux driver_LDD3_scull字符设备驱动编译在新内核编译问题
- linux内核驱动的学习第一天——linux系统的结构
- 学习内核---Linux网卡驱动分析
- 转:linux启动时对编译进内核驱动模块的加载
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--互斥篇
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响—linux2.4单独编译驱动模块
- linux的内核编译和驱动安装
- 【转老迈】linux内核编译学习笔记
- 学习笔记 --- MINI2440 linux按键驱动代码分析
- Linux学习日志(10)- 编译内核make uImage出错“mkimage" command not found…”
- linux 驱动 指定下载的内核源码树编译
- linux驱动的动态加载和编译内核的方式加载
- 轻松学习Linux之内核编译