i.MX8MM处理处罚器采取了先辈的14LPCFinFET工艺,提供更快的速率和更高的电源服从;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口包罗万象。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供干系进程,支持8路PDM接口、5路SAI接口、2路Speaker。体系支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9体系。实用于智能充电桩,物联网 ,工业控制,医疗,智能交通等,可用于任何通用工业和物联网 应用、
【粉丝群】258811263(加群获取驱动文档+例程)
第四十一章 物理地点与假造地点
本章导读
本章讲授了在裸机步伐中使用寄存器方式和Linux体系中使用MMU。讲授了在Linux体系中物理地点到假造地点的转换。
本章内容对应视频讲授链接(在线观看):
linux物理地点到假造地点映射 → https://www.bilibili.com/video/BV1Vy4y1B7ta?p=12
现在,大多数嵌入式微控制器(如ARM、PowerPC等)中并不提供I/O空间,而仅存在内存空间。内
存空间可以直接通过地点、指针来访问,步伐及在步伐运行中使用的变量和其他数据都存在于内存空间中。
内存地点可以直接由C语言指针使用,比方,使用一个寄存器,可以界说一个指针来使用寄存器,如下所示:
unsighted int *p = 0x12345678;
*p=0x87654321;
以上步伐的意义是在绝对地点0x12345678(ARM、PowerPC)中写入0x87654321。
高性能处理处罚器一样寻常会提供一个内存管理单位(MMU),该单位辅助使用体系举行内存管理,提供虚
拟地点和物理地点的映射、内存访问权限掩护和Cache缓存控制等硬件支持。使用体系内核借助MMU可以
让用户感觉到步伐好像可以使用非常大的内存空间,从而使得编程职员在写步伐时不消思量盘算机中物理
内存的实际容量。
MMU具有假造地点和物理地点转换、内存访问权限掩护等功能,这将使得Linux使用体系能单独为系
统的每个用户进程分配独立的内存空间并包管用户空间不能访问内核空间的地点,为使用体系的假造内存
管理模块提供硬件底子。上层应用看到的内存都是假造内存,应用就不能直接访问硬件,以是如许就包管了体系安全。
对于包罗MMU的处理处罚器而言,Linux体系提供了复杂的存储管理体系,使得进程所能访问的内存到达
4GB。在Linux体系中,进程的4GB内存空间被分为两个部分——用户空间与内核空间。用户空间的地点一
般分布为0~3GB(即PAGE_OFFSET,在0x86中它便是0xC0000000),如许,剩下的3~4GB为内核空间,如下图所示。用户进程通常只能访问用户空间的假造地点,不能访问内核空间的假造地点。用户进程只有通过体系调用(代表用户进程在内核态实行)等方式才可以访问到内核空间。
每个进程的用户空间都是完全独立、互不干系的,用户进程各自有差异的页表。而内核空间是由内核
负责映射,它并不会跟着进程改变,是固定的。内核空间的假造地点到物理地点映射是被全部进程共享的,内核的假造空间独立于其他步伐。
MMU非常复杂,那么我们怎样完成物理地点到假造地点的转换呢?内核给我们提供了干系的函数,我们先来相识下这些函数。函数界说在内核源码目次include/asm-generic/io.h
- ioremap: 把物理地址转换成虚拟地址
- iounmap: 释放掉ioremap映射的地址
复制代码 函数
| static inline void __iomem *ioremap(phys_addr_t offset, size_t size)
| | 参数phys_addr_t offset
| 映射物理地点的起始地点
| 参数size_t size
| 要映射多大的内存空间
| 返回值
| 乐成返回假造地点的首地点失败返回NULL。
| 功能
| 把物理地点转换成假造地点
|
函数
| static inline void iounmap(void __iomem *addr)
| 参数*addr
| 要取消映射的假造地点的首地点
| 参数size_t size
| 要映射多大的内存空间
| 功能
| 开释掉ioremap映射的地点
| 注意: 物理地点只能被映射一次,多次映射会失败。怎样查察哪些物理地点被映射过了呢?可以使用以下下令来查察。
cat /proc/iomem
|