LDD3 /scull 驱动实例在linux3.2.0编译实现
来源:互联网 发布:java xssfcellstyle 编辑:程序博客网 时间:2024/05/21 22:25
由于LDD3的驱动实例都是在linux2.6.10中实现,在后期linux内核版本中有些改动,导致有些实例编译不通过。
环境:ubuntu12.04 内核版本:linux3.2.0 实例:LDD3中驱动实例 SCULL
排除错误
这里提示我们修改Makefile中的CFLAGS,用EXTRA_CFLAGS 代替
2、/usr/src/linux-source-3.2.0/drivers/scull/main.c:17:26: 致命错误: linux/config.h:没有那个文件或目录编译中断。
在2.6.19开始的内核中删除了config.h文件,因此只要在mian.c中注释掉#include即可。
3、/usr/src/linux-source-3.2.0/drivers/scull/main.c:556:2: 错误: 初始值设定项里有未知的字段‘ioctl’
这个错误网上搜索发现2.6.38版本内核 file_operation结构体已经删除了ioctl函数,取代的是:
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
file_operation结构体在 /usr/src/linux-2.6.28.8/include/linux/fs.h定义
解决方案:
在globalmem.c中将globalmem_ioctl函数定义做如下修改即可:
static long globalmem_ioctl( struct file *filp,unsigned int cmd, unsigned long arg)在file_operation 赋值处修改:
.unlocked_ioctl = globalmem_ioctl
4、/usr/src/linux-source-3.2.0/drivers/scull/main.c:655:3: 错误: 隐式声明函数‘init_MUTEX’ [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
2.6.25及以后的linux内核版本废除了init_MUTEX函数
新版本使用sema_init函数
平台:X86 32位
内核:2.6.24
定义:
static inline void init_MUTEX (struct semaphore *sem) { sema_init(sem, 1); }
说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。
sema_init (sem, 1) 定义为:
static inline void sema_init (struct semaphore *sem, int val) { /* * *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val); * * i'd rather use the more flexible initialization above, but sadly * GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well. */ atomic_set(&sem->count, val); sem->sleepers = 0; init_waitqueue_head(&sem->wait); }
sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为 0 。
init_waitqueue_head() : 初始化一个等待队列头。
这样不难得出,废除init_MUTEX 后,将原来使用init_MUTEX(sem)的地方统统替换为sema_init(sem,1);即可
5、/usr/src/linux-source-3.2.0/drivers/scull/pipe.c:131:7: 错误: ‘TASK_INTERRUPTIBLE’未声明(在此函数内第一次使用)
出现TASK_INTERRUPTIBLE未定义,这个定义现在在linux/sched.h中,将用到该预定义的文件中加入#inlcude <linux/sched.h>文件;
6、/usr/src/linux-source-3.2.0/drivers/scull/access.c:98:34: 错误: ‘SPIN_LOCK_UNLOCKED’未声明(不在函数内)
将static spinlock_t scull_u_lock = SPIN_LOCK_UNLOCKED;
改为static DEFINE_SPINLOCK(scull_u_lock);
7、/usr/src/linux-source-3.2.0/drivers/scull/access.c:107:29: 错误: 提领指向不完全类型的指针
解决办法是在access.c中就加入两个头文件 #include<linux/sched.h>
8、/usr/src/linux-source-3.2.0/drivers/scull/access.c:109:29: 错误: ‘struct task_struct’没有名为‘uid’的成员
/usr/src/linux-source-3.2.0/drivers/scull/access.c:110:29: 错误: ‘struct task_struct’没有名为‘euid’的成员
current->uid 修改为 current->cred->uid current->euid 修改为 current->cred->euid
- LDD3 /scull 驱动实例在linux3.2.0编译实现
- 编译LDD3的scull驱动问题总结
- (LDD3)Scull在2.6.35-30内核中的编译解决方案
- 在内核3.17.6上编译scull(LDD3)
- ldd3 驱动--测试scull
- LDD3学习笔记--scull的编译
- ubuntu 1204 kernel 3.2编译ldd3 scull
- LDD3学习笔记scull编译错误解决
- LDD3在Ubuntu下编译 scull例子时遇到的一些问题
- LDD3中scull在新内核上编译中的各种error处理
- ldd3 scull代码理解
- LDD3 scull pipe 模块
- [linux设备驱动程序]scull字符设备驱动编译在新内核编译问题解决方案
- 编译驱动scull出错后解决方案
- Scull驱动
- 实现在XP中为QT编译MySQL驱动实例
- LDD3 scull内存驱动程序改写
- ldd3 scull错误移除
- Struts2自定义拦截器
- 几种获取mac地址的方法【转】
- Android目录结构(详细版)
- delphi指针
- C#除法的小数点问题
- LDD3 /scull 驱动实例在linux3.2.0编译实现
- STM32系统保存参数到eeprom的实现方法
- 智能指针实现方式
- 关于chrome中css由于content-type而没有被读出的困惑
- 消费者对团购的体验
- 关于c++ vs2008中数据断点的设置 .
- 一些美剧下载
- svn安装配置详细教程
- jQuery.cookie设置说明