学到了Linux设备驱动程序第三版中文版到第三章中,对驱动scull进行了介绍。于是再网上找到了源码来,下载下来后进行编译,发现一些错误,主要是由于Linux版本升级所致。现在记录下来 ,以备查询。scull驱动所针对到版本我也不清楚,应该是2.6.*吧 ,而我到Linux内核版本是3.0.4到。
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;*改成下面到方式/
行了,做饭吃去了。。。。。。到底是先看完书呢,还是先把这个代码一一看懂呢,纠结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中有多处.
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);
行了,做饭吃去了。。。。。。到底是先看完书呢,还是先把这个代码一一看懂呢,纠结ing,呵呵