用户空间的驱动程序
2016-06-30 14:32
260 查看
大部分设备驱动程序倾向于工作在拥有特权的内核模式。但是有些无所谓的,如SCSI,USB,I2C等内核子系统在一定程序上支持用户模式驱动程序,可以不写就可以控制这些设备。
从用户空间驱动
1.访问IO区域
linux上用户访问IO端口受到两个函数控制
ioperm()
iopl()
2. 访问内存区域
对于一个文件进行内存映射(mmaping )将使它与用户空间的一段虚拟内存区域相关联。因为linux把设备当作文件。可以将设备内存映射到RAM,然后从用户空间直接操作它。
mmap()
1.图形用户接口,将视频内存做内存映射,并直接访问图形硬件。
2.madplay是MP3播放器,可运行在几个系统上。
3.MPEG解码器通过直接操作映射缓冲播放视频。
4.用户模式SCSI
有了SG接口可以从用户空间直接发送SCSI命令。sg驱动程序输出一个字符接口。可以用open(),close(),read(),write(),ioctl(),poll(),fcntl(),mmap()系统调用与底层设备通信。
5.用户USB模式
usbfs 虚拟文件系统从用户空间以原始的方式访问USB设备。usbfs挂载/proc/bus/usb/上。
6.用户I2C模式
如果需要支持大量低速I2C设备,从用户空间驱动有意义。i
i2c-dev模块有助于开发用户模式I2C/smbus设备驱动程序。用户空间代码能通过设备节点访问I2C主机适配器。
数据结构
sched_param /usr/include/bits/sched.h
usb_dev_handle libusb包中的头文件
从用户空间操作USB设备的结构体
用户空间函数
iopl() 控制所有IO端口的访问权限
usb open()
msync 写回对比映射的内存区域的改动
mmap() 将一个文件或一个设备地址区域或一块用户空间虚拟内存绑定。
从用户空间驱动
1.访问IO区域
linux上用户访问IO端口受到两个函数控制
ioperm()
iopl()
2. 访问内存区域
对于一个文件进行内存映射(mmaping )将使它与用户空间的一段虚拟内存区域相关联。因为linux把设备当作文件。可以将设备内存映射到RAM,然后从用户空间直接操作它。
mmap()
1.图形用户接口,将视频内存做内存映射,并直接访问图形硬件。
2.madplay是MP3播放器,可运行在几个系统上。
3.MPEG解码器通过直接操作映射缓冲播放视频。
4.用户模式SCSI
有了SG接口可以从用户空间直接发送SCSI命令。sg驱动程序输出一个字符接口。可以用open(),close(),read(),write(),ioctl(),poll(),fcntl(),mmap()系统调用与底层设备通信。
5.用户USB模式
usbfs 虚拟文件系统从用户空间以原始的方式访问USB设备。usbfs挂载/proc/bus/usb/上。
6.用户I2C模式
如果需要支持大量低速I2C设备,从用户空间驱动有意义。i
i2c-dev模块有助于开发用户模式I2C/smbus设备驱动程序。用户空间代码能通过设备节点访问I2C主机适配器。
数据结构
sched_param /usr/include/bits/sched.h
usb_dev_handle libusb包中的头文件
从用户空间操作USB设备的结构体
用户空间函数
iopl() 控制所有IO端口的访问权限
usb open()
msync 写回对比映射的内存区域的改动
mmap() 将一个文件或一个设备地址区域或一块用户空间虚拟内存绑定。
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍