知识储备。
基本的框架
在linux系统中,App无法操作硬件的,不具备相应的权限。在mmu(内存管理单元)作了划分的,应用层只能操作属于它的mmu部分。操作硬件只能是通过驱动程序。应用程序与驱动程序之间有严格的界限。驱动程序在内核中。
app如何调用驱动机制
如App使用open函数打开设备时,会先设置某个寄存器,会触发一个异常swi指令(此时由用户态切换到内核态才有更高的权限),此时会有中断服务程序被调用。然后根据先前设置的寄存器判断是什么操作;然后去读写硬件。
字符设备驱动编写步骤
1. 实现入口函数 XXX_init()和卸载函数 XXX_exit()
2. 申请设备号 register_chrdev_region(与内核相关)
静态分配设备号:在事先知道设备主设备号的情况下通过参数函数指定第一个设备号而向系统申请分配一定数目的设备号。
动态分配:alloc_chrdev_region():通过参数仅设置第一个次设备号(通常为0,事先不会知道主设备号)和要分配的设备数目而系统动态分配所需的设备号文章来源:https://www.toymoban.com/news/detail-741601.html
3. 注册字符设备驱动 cdev_alloc / cdev_init /cdev_add(与内核相关)
4. 利用udev/mdev机制创建设备文件(节点)class_create,device_create(与内核相关)
5. 硬件部分初始化
io资源映射 ioremao,内核提供gpio库函数(与硬件相关)
注册中断(与硬件相关)
初始化等待队列(与内核相关)
初始化定时器(与内核相关)
6. 构建file_operation结构(与内核相关)
7. 实现硬件操作方法 XXX_open,XXX_read,XXX_write…(与硬件相关)
通用GPIO驱动框架的问题及理解
setup_timer()函数
原型:#define setup_timer(timer, fn, data) \ __setup_timer((timer), (fn), (data), 0)
第一个参数文章来源地址https://www.toymoban.com/news/detail-741601.html
到了这里,关于嵌入式驱动开发之框架及调试技巧累积的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!