linux device driver 3 简单的字符驱动
来源:互联网 发布:广告机分屏编辑软件 编辑:程序博客网 时间:2024/05/17 23:08
p { margin-bottom: 0.08in; }
ldd 第三章
鉴于书中附带代码是综合性的,虽然很简单,但是对于初学者来说还是有点复杂,
我把作者的例子进行了一些简化,更有利于看清最重要的东西。也有利于一步步的学习,循序渐进。
首先,了解一下涉及到数据结构。
我们简化一下ldd中的设计,如下,
下面,我简要的介绍一下,例子中的函数的作用:
function
mydev_init_module:
申请设备号 register_chrdev_region or alloc_chrdev_region
分配,初始化设备,并添加设备
分配:静态或者 cdev_alloc
初始化:cdev_init
添加:cdev_add
mydev_clearup_module :
释放分配的用于存放数据的内存
删除设备cdev_del
释放“设备结构体”所占内存
释放申请的设备号
mydev_llseek:
修改文件的当前的读写位置(f_pos值)
mydev_open:
保存”设备“指针到文件结构体的private_data域
mydev_release:
open 的逆操作
mydev_read:
将写入的数据按照一定规则读出
mydev_write
讲用户数据保存到某个位置(内存或者硬件设备)
下面是简化后的代码结构
macro
MYDEBUG
ELEMENT_SIZE
struct
dataelem
mydev
variable
mydev0
mydev_major
mydev_minor
element_size
mydev_ops
mydev_init_module
mydev_clearup_module
function
mydev_init_module
mydev_setup_cdev
mydev_clearup_module
mydev_free_mem
mydev_llseek
mydev_open
mydev_release
mydev_read
mydev_write
说明:本例子为了更突出重点,而很简陋,重复打开设备的结果是不可预料的
源码:
操作过程:
# make //生成mydev0.ko
# insmod mydev0.ko //插入生成的模块
# cat /proc/devices //查看分配的主设备号
...
250 mydev <-----我们的模块
251 hidraw
252 usbmon
...
# mknod /dev/mydev0 c 250 0 //创建设备结点
# echo “” > /var/log/messages //清空记录方便查看
# echo “ I love you Linux” >/dev/mydev0 //向设备中写入数据
#cat /dev/mydev0 //从设备中读出数据
#cat /var/log/messages //查看打印出来的调试信息
- linux device driver 3 简单的字符驱动
- 简单字符设备驱动(driver of simple char device)
- 字符驱动移植---(系统总线),device, driver-
- 【Linux device driver】网络设备驱动注意的问题(三)
- linux device driver之usb驱动编程
- linux device driver之sdio驱动编程
- linux 驱动 device,driver ,bus 关系
- linux device driver之sdio驱动编程
- linux audio device driver 音频设备驱动讲解
- linux device driver --- 驱动 poll 执行流程图
- linux设备驱动模型之device-driver
- 《Linux device driver》字符设备和scull
- Linux device driver 的概念
- Linux device driver 的概念
- 字符驱动移植--bus(平台总线), device, driver
- Linux设备模型中三个很重要的概念: 总线,设备,驱动.即bus,device,driver
- [linux driver]驱动模型中为什么用一个虚拟的platform_bus/device?
- linux 简单字符驱动
- 网站访问量过大问题的策略
- DefaultList 与 ArrayOutOfBoundsException
- 完成dhtmlxtree控件替换treelist.htc
- Javascript 最简单检测网速的方法和应用
- 键盘事件中的keypress事件和keyup事件的区别
- linux device driver 3 简单的字符驱动
- 难忘报务生涯
- 金山可牛合并成金山网络 金山毒霸全面免费
- C#图像格式转换工具
- JAVA Socket服务器 判断客户端连接断开
- div浮动层ie6历险
- YY
- Android学习笔记7——常用控件
- 11月8日金蝶向雷先生的启发