概述
对于嵌入式处理器而言,访问外设均是通过以地址指针的方式访问,不过在嵌入式系统中,因为MMU(MemoryManagementUnit)的存在,不管是内核程序还是应用程序都不允许直接访问外设的物理地址。
注意
1、MMU(MemoryManagementUnit)内存管理单元,主要完成虚拟地址和物理地址的映射。
2、操作系统启动之前都会初始化MMU,设置好内存映射。
3、CPU访问的地址均是虚拟地址。
接口
在linux中使用ioremap/iounmap完成物理地址到虚拟地址的映射,映射后访问虚拟地址就等价于直接访问对应的物理地址。
/*ioremap用于物理地址到虚拟地址的映射,iounmap用于解除映射*/externvoid__iomem*__ioremap(phys_addr_tphys_addr,size_tsize,pgprot_tprot);externvoid__iounmap(volatilevoid__iomem*addr);#defineioremap(addr,size)__ioremap((addr),(size),__pgprot(PROT_DEVICE_nGnRE))#defineiounmap__iounmap
左右滑动