嵌入式Linux驱动开发(二)LED驱动
创始人
2024-05-31 11:10:01
0

1. Linux下LED驱动原理

与裸机区别在于,编写驱动要符合linux驱动框架规范。裸机直接对寄存器物理地址进行读写,linux下需要经过MMU。

1.1 地址映射相关概念

1)MMU(Memory Manage Unit - 内存管理单元)
①完成虚拟空间到物理空间映射。(地址映射)
②内存保护,设置存储器访问权限,设置虚拟存储空间缓冲特性。
2)虚拟地址(VA):对于x位处理器,虚拟地址范围为2^x Byte。比如32位处理器,对应4GB虚拟地址范围。

  我的板子上512MB的DDR3就是物理内存,经过MMU映射到4GB的虚拟空间。linux内核启动后会初始化MMU,此后CPU访问的都是虚拟地址。

1.2 物理内存和虚拟内存的转换函数

1)ioremap:用于获取指定物理地址空间对应的虚拟地址空间。

<以对IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03寄存器操作为例>
<映射后对SW_MUX_GPIO1_IO03的操作就是对该寄存器的操作>
#define SW_MUX_GPIO1_IO03_BASE (0X020E0068)                 <寄存器物理地址>
static void __iomem* SW_MUX_GPIO1_IO03;                     <虚拟地址对应的指针>
SW_MUX_GPIO1_IO03 = ioremap(SW_MUX_GPIO1_IO03_BASE, 4);     <进行转换,由于6ULL一个寄存器4字节,所以映射长度为4>

2)ioremap:卸载驱动时释放ioremap做的映射。

iounmap(SW_MUX_GPIO1_IO03);

1.3 I/O内存访问函数

I/O端口:外部寄存器或内存映射到IO空间,称为I/O端口。
I/O内存:外部寄存器或内存映射到内存空间。(ARM下只有I/O内存)
在上面1.2节完成了物理地址和虚拟地址的映射,但是不建议直接对映射后的地址进行读写,使用以下函数进行:
1)读操作函数

<--8-16-32bit 读操作函数:addr为要读取的内存地址-->
u8 readb(const volatile void __iomem *addr)     
u16 readw(const volatile void __iomem *addr)
u32 readl(const volatile void __iomem *addr)

2)写操作函数

<--8-16-32bit 写操作函数:value为写入值,addr为要写入的内存地址-->
void writeb(u8 value, volatile void __iomem *addr)
void writew(u16 value, volatile void __iomem *addr)
void writel(u32 value, volatile void __iomem *addr)

2. Linux下LED驱动流程

<---初始化并注册驱动--->

module_init(led_init)<---向led设备写入,进行亮灭控制--->
led_writeled_switch<---关闭led设备,注销驱动--->

module_exit(led_exit)

测试:
在这里插入图片描述

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...