IMX6ULL嵌入式Linux驱动开发学习
以下内容是我在学习正点原子IMX6ULL
开发板alpha
中记录的笔记,部分摘录自正点原子IMX6ULL开发手册
。
一、地址映射
因为
linux
使用MMC
,因此在驱动开发时,不能直接对寄存器物理地址进行读写操作。在
linux
里面操作的都是虚拟地址,所以需要先得到物理地址对应的虚拟地址。获得物理地址对应的虚拟地址使用va = ioremap(cookie,size)
函数,第一个参数是物理地址起始地址,第二个参数就是要转换的字节数量,返回的是申请到的虚拟地址。卸载驱动的时候使用iounmap(va)
;操作虚拟地址时使用
readb(const volatile void __iomem *addr)
8bitreadw(const volatile void __iomem *addr)
16bitreadl(const volatile void __iomem *addr)
32bitwriteb(u8 value,volatile void __iomem *addr)
8bitwritew(u16 value, volatile void __iomem *addr)
16bitwritel(u32 value, volatile void __iomem *addr)
32bit
1 | /** |
二、驱动程序编写(正常开发中不使用这种方式)
- 初始化时钟、IO、GPIO等。
- 如果要在卸载驱动时关闭LED,一定要在取消地址映射前操作LED。
1 |
|
三、应用程序编写
1 |
|
四、测试
- 先输入
depmod
。 - 然后输入
modprobe led.ko
加载驱动 - 再输入
mknod /dev/led
创建设备节点 - 输入
./ledAPP /dev/led 0
或./ledAPP /dev/led 1
来点亮和关闭led
。
- 本文作者: 路痴的兔子
- 本文链接: https:/proudrabbit.gitee.io/IMX6ULL嵌入式Linux驱动学习笔记(三).html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!