怎么写驱动
- 看原理图
- 写驱动
- 写测试程序
流程
- 分配file_operations结构体
- 设置结构体成员
.open = led_open #配置为输出引脚
.wirte = led__write #设置引脚状态
- 注册(告诉内核)
- 入口
register_chrdev(主设备号,结构体,名字)
- 出口
unregister_chrdev
三种驱动写法
驱动写法:核心不变;差别在于:如何指定硬件资源
-
传统方法:在驱动代码中写死,
-
总线设备驱动模型:
- 稍微复杂,易扩展,冗余代码太多(太多led_dev.c)
- led_drv.c(指定资源)
- .probe(分配、设置、注册file_operations结构体,引脚来自platform_device)
- .driver{.name}
- led_dev.c(指定资源)
- 分配、设置、注册 platform_device
- .resource 指定引脚
- .name
当led_drv.c和led_dev.c中的name相等,.probe函数就会被调用
-
使用设备树指明引脚:
- 稍微复杂,易扩展,无冗余代码,不需要重新编译内核或驱动,只需要更新设备树文件
- led_drv.c(分配设置注册file_operations结构体)
- xxx.dts(指定引脚)
- 内核根据.dts构造platform_device
- 生成.dtb
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)