Linux version: 4.14
Code link: Linux source code (v4.14) - Bootlin
1 如何编写驱动
(1)看原理图
① 查看引脚
② 查看芯片手册(确定如何操作引脚)
(2)写驱动
APP: open read write ioctl
————————————————————————————————————————
驱动: dev_open drv_read drv_write drv_ioctl
————————————————————————————————————————
硬件:
① 分配一个 file_oprerations
② 设置
.open = led_open 把led引脚设置为输出
.write = led_write 根据app传入的值设置引脚状态
③ 注册(告诉内核) [drv1]—[drv1]—[drv1]—[drv1]
④ 入口函数: register_chardev(主设备号,file_operations, name)
⑤ 出口函数: unregister_chrdev
(3)编写测试程序
2 在驱动中如何指定引脚
三种方法:
(1)传统方法,在代码中写死 (led_drv.c)
(2)总线设备驱动模型:
① led_drv.c 分配/设置/注册/入口/出口
② led_dev.c 指定引脚
(3)使用设备树指定引脚
① led_drv.c 分配/设置/注册/入口/出口
② dts文件 指定引脚
小结:这三种驱动的写法,核心不变,差别在于如何指定硬件资源
三种方法比较:
(1)第一种方法:传统方法
简单,不易扩展,需要重新编译
(2)第二种方法:总线设备驱动模型
稍复杂,易扩展,冗余代码太多,每次修改设备需要重新编译
(3)第三种方法:设备树的方法
稍复杂,易扩展,无冗余代码,修改设备后无需重新编译驱动