现在的位置: 首页 > 综合 > 正文

linux 内核驱动学习之scull代码编译

2013年11月25日 ⁄ 综合 ⁄ 共 1038字 ⁄ 字号 评论关闭

学到了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,呵呵

抱歉!评论已关闭.