一、IMX6ULL LED操作方法
1、创建一个驱动程序的标准五个步骤:
如下图步骤5还可以创建一个class,在class下游创建一个device ,步骤5为了让系统自动创建设备节点,但不是驱动的核心。
如下图,驱动通过copy_的这两个函数和软件进行数据交流。而在Linux系统中,驱动不是直接通过物理地址和硬件进行数据交换,而是通过映射虚拟地址和驱动进行交流。
具体过程见程序。
2、一些基础知识补充讲解
(1)、
如下图绿框所示,读取寄存器时,可以通过指针,直接将寄存器地址传给p,从而达到读取寄存器的目的。
(2)、volatile 的用法
如下图所示,在编译器中,编译器可能会自作聪明,只执行a=2。但在硬件中,不能这样,假如a=1为使灯亮,a=2为使灯灭。如果照编译器那样执行,就不能实现上面的这个操作。所以可以通过加入volatile来定义a,例如volatile int a。
(3)、a&=~b的意思就是a=a&(~b)
二、LED驱动程序框架(支持不同开发板)
1、利用面向对象的思想,将框架(leddrv.c)和单板分层。
具体见代码。
2、为什么不能直接访问物理地址,而使用虚拟地址?