没有合适的资源?快使用搜索试试~ 我知道了~
高级字符设备驱动程序(不错的,代码比较全)
资源详情
资源评论
资源推荐
Linux 设备驱动工程师之路——高级字符设备驱动程序
Y-Kee
转载请注明来自于衡阳师范学院 08 电 2 Y-Kee http://blog.csdn.net/ayangke, QQ:843308498
高级字符设备驱动在简单字符驱动的基础上添加 ioctl 方法、阻塞非阻塞读写、poll 方法、和
自动创建设备文件的功能。
一、重要知识点
1.ioctl
ioctl 命令:使用 4 个字段定义一个 ioctl 命令,包括
type: 幻数,一般使用一个字符定义,在内核中唯一。
number: 序数。
direction: 数据传输方向,当不涉及数据传输时,此字段无效。
size: 所涉及用户数据的大小,当不涉及数据传输时,此字段无效。
_IOC_NONE
_IOC_READ
_IOC_WRITE
“方向”字段的可能值。“读”和“写”是不同的位,可以用“OR”在一起指定读写。
_IOC(dir, type, size)
_IO(type,nr)
_IOR(type, nr, size)
_IOW(type, nr, size)
用于生产 ioctl 命令的宏
_IOC_DIR(cmd)
_IOC_TYPE(cmd)
_IOC_NR(cmd)
_IOC_SIZE(cmd)
用于解码 ioctl 命令的宏
int access_ok(int type, const void *addr, unsigned long size)
这个函数验证指向用户空间的指针是否可用,如果允许访问,access_ok 返回非 0 值。
int put_user(datum, ptr)
int get_user(local, ptr)
int __put_user(datum, ptr)
int __get_user(local, ptr)
用于向(或从)用户空间保存(或获取)单个数据项的宏。传送的字节数目由 sizeof(*ptr)
决定。前两个要先调用 access_ok,后两个(__put_user 和__get_user)则假设 access_ok 已经
被调用过了。
2.阻塞型 I/O
typedef struct {/*…..*/} wait_queue_head_t
void init_waitqueue_head(wait_queue_head_t *queue)
DECLARE_WAIT_QUEUE_HEAD(queue)
wingyouyc
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0