驱动-IMX6ULL LED

本文详细介绍了IMX6ULL处理器的LED驱动开发,包括创建驱动的五个标准步骤,寄存器读写技巧,volatile关键字的应用,以及使用面向对象思想构建驱动框架。涉及内容有数据映射、寄存器操作实例和为何采用虚拟地址而非物理地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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、为什么不能直接访问物理地址,而使用虚拟地址?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值