1 第一代
首先使用ioremap将寄存器的物理地址,转换成虚地址,这样CPU才会操作实际的寄存器
使用readl这样的函数控制配置寄存器
register_chrdev注册驱动设备,包括 file_operations
在命令行使用 加载驱动,创建节点文件
depmod
modprobe led.ko
mknod /dev/led c 200 0
使用./ledApp /dev/led 1调用用户app来控制驱动
2 第二代,
主要解决需要用命令行来创建节点文件时候,带来的不便,还有就是之前方法是需要提前知道主设备号,
3 第三代 采用设备树方法
4 采用pinctrl是为了把设备树中,fsl,pins这种配置io语法执行,得到默认的io配置,gpio子系统能完成更多的事情
linux中 中断上部实现简单,直接编写对应程序,而下半部需要使用软中断,tasklet,工作队列机制实现,这里推荐用tasklet(不可睡眠),工作队列(可等待资源,意思是可睡眠)