初涉驱动实验
u-boot:启动内核
内核:启动应用
应用:读写文件,点灯,获取按键
应用: open,read,write
c库
|ststem call interaface swi val 根据发生异常的原因,调用处理函数
内核|
|驱动 led_open,led_read,led_write 硬件
驱动框架:
1、 led_open,led_open........
2、怎么告诉内核
a、定义一个file_operations结构,填充
b、注册,告诉内核
c、谁来调用register_chrdev驱动入口函数
crw-rw---- 1 0 0 3, 173 Jan 1 00:00 ttyzd
crw-rw---- 1 0 0 3, 174 Jan 1 00:00 ttyze
crw-rw---- 1 0 0 3, 175 Jan 1 00:00 ttyzf
crw-rw---- 1 0 0 1, 9 Jan 1 00:00 urandom
crw-rw---- 1 0 0 253, 0 Jan 1 00:00 usbdev1.1_ep00
crw-rw---- 1 0 0 253, 1 Jan 1 00:00 usbdev1.1_ep81
crw-rw---- 1 0 0 7, 0 Jan 1 00:00 vcs
crw-rw---- 1 0 0 7, 128 Jan 1 00:00 vcsa
crw-rw---- 1 0 0 10, 130 Jan 1 00:00 watchdog
crw-rw---- 1 0 0 1, 5 Jan 1 00:00 zero
c开头的为字符设备
-rw-r--r-- 1 1000 1000 210 Dec 26 2015 fstab
drwxr-xr-x 2 1000 1000 4096 Dec 26 2015 init.d
-rw-r--r-- 1 1000 1000 53 Dec 26 2015 inittab
-表常规文件
d代表文件目录
app: open("/dev/xxx"),read ,write
属性 c 111 主设备号
-----------------|--------------------------------------------
| c库
----------------- |------------------------------------------chrdv
VFS | 0,1,2,3,4......111,.....找到file_operations
------------------|-------------------------------------------内核
------------------|-------------------------------------------
led_open,led_read,led_write 驱动
---------------------------------------------------------------
驱动程序1、^2、定义^file_operation: open=led_open write=led_write
3、入口函数用register——chrdev(major,name,^)
突然发现编译时不能使用大写字母文件编译时
major = register_chrdev(0, "first_drv", &First_drv_fops);
系统自动分配主设备号
cat /proc/devices 查看设备
mknod /dev/xxx c 252 0 添加设备文件
insmod first_drv.ko 注册驱动
rmmod first_drv.ko 卸载驱动
1、驱动
a、自动分配设备号
b、手动分配
2、应用程序
a、mknod /dev/xxx c 主 从
手动
b、自动建立 udev ,mdev 根据驱动提供系统信息来创建设备节点
firstdrv_class = class_create(THIS_MODULE, "firstdrv"); //´´½¨Àà
firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xxx"); /* /dev/xxx */
需要添加MODULE_LICENSE("GPL");否者无法注册
# cat dev
252:0
# ls
dev subsystem uevent
-r--r--r-- 1 0 0 4096 Jan 1 03:14 dev
lrwxrwxrwx 1 0 0 0 Jan 1 03:19 subsystem -> ../../../class/firstdrv
--w------- 1 0 0 4096 Jan 1 03:19 uevent