当前位置:首页 > 学习资源 > 讲师博文 > Linux驱动中的ioremap

Linux驱动中的ioremap 时间:2024-01-19      来源:华清远见

要回答“Linux驱动开发过程中操作外设寄存器前为什么需要对外设寄存器地址调用ioremap函数?”这个问题,需要从操作系统内核怎样对内存进行管理说起。

 

# 一、操作系统为什么需要对内存进行管理?

 

操作系统的核心工作就是支持多任务并发或并行执行,不管是并发还是并行宏观上均认为多任务同时执行,而操作系统运用进程形式组织任务,也就形成了多进程同时运行的情形,任何进程和操作系统内核的运行都需要依赖于一定量的内存,也就意味着多进程和操作系统内核需要同时占用内存的不同部分,这样才能相互不干扰,包括进程间不相互干扰、进程与内核不相互干扰,为了确保互不干扰也为了内存这种稀缺资源的高效利用,整个计算机系统必须对内存进行合理规划使用(业内称为内存管理),这一重要工作自然由操作系统内核这个关键角色去完成,因此内存管理成为操作系统内核这个特殊程序的核心工作之一!!!

 

# 二、操作系统怎样进行内存管理?

 

现代操作系统借助于一种特殊的硬件装置来进行内存管理,这种硬件装置称为MMU(内存管理单元)。管理思路类似于某些一线城市上车牌号,需要车牌号的人首先参与摇号获得购买车牌号的资格号(虚拟号),然后再购买实际的车牌号(实际号或物理号)。为了公平起见,这个城市给每个行政区固定数目的虚拟号(假设均为从0开始的连续1200个虚拟号),作为城市的管理方,同时也为了与普通民众进行区分,为政府公务人员也准备固定数目的虚拟号(假设均为从1200开始的连续400个虚拟号),假设每次这个城市售卖5000个车牌,任何想要购买车牌的人,必须先按角色(普通民众还是公务人员)和行政区(普通民众所在住地)在指定地点参与摇号,首先获得虚拟号,然后车管所会为这些虚拟号与未售完的实际车牌号建立关联,这样每个行政区和政府部门各获得一张虚拟号与实际车牌号的对应表格,位于此表格中虚拟号对应人员获得最终的购买实际车牌的权利,摇到虚拟号的人可以在指定地点的某台机器上输入自己虚拟号查阅自己是否拥有最终车牌的购买权,这台机器就类似于MMU这个硬件装置,可以帮助人们查阅各自虚拟号和实际车牌号的关联表,以便获知得到购买权以及可以购买的实际车牌号。以上过程中各行政区与政府部分各用各的虚拟号,互不干扰!!!

 

操作系统采用类似思路,首先为每个进程和操作系统内核安排一块虚拟空间(假想的、无法实际存储二进制位的、每个字节编号类似于购买车牌过程中的虚拟号),借助于各自虚拟空间每个字节的地址值(虚拟地址),来争取最终实际内存(物理内存,其每个字节的地址值被称为物理地址)的使用权。由于各个进程执行过程中代码中全部使用各自虚拟空间的虚拟地址,这样万一地址值计算、使用错误只涉及自身虚拟空间,100%避免了干扰其它进程和内核,而每次使用内存前将代码中的虚拟地址传给CPU,CPU将之传给MMU这个特殊硬件装置,MMU则完成查阅操作系统内核为这个进程创建的页表(虚拟地址与物理地址关联表)将获得的虚拟地址转换为物理地址,最后使用实际内存。而内核比较特殊,在计算机运行内核的初期,由于MMU还未能正常工作,所以代码中均使用物理地址,一旦MMU开始正常工作的后期(设备驱动代码和所有进程的运行)代码中均使用虚拟地址,因此内核后期使用内存与各个进程类似,只是使用其自身的页表。

 

为了区分内核和进程使用的虚拟地址范围,32位计算机平台,操作系统:

1. 为各个进程准备的虚拟空间的地址值范围是0x00000000 ~ 0xBFFFFFFF(大小3G Bytes)

  2. 为内核自身准备的虚拟空间的地址值范围是0xC0000000 ~ 0xFFFFFFFF(大小1G Bytes)

 

 

# 三、ioremap

 

ARM系列处理器芯片内所有外设寄存器都是作为物理内存的一部分,只是这些物理内存的作用已经固定,不能作为其它程序执行过程中可重复使用的运行内存用,各款芯片的使用手册中注有所有这些外设寄存器的物理地址,在无操作系统的裸机开发过程中可以直接在外设驱动程序使用这些物理地址值访问这些外设寄存器以达到操控外设的目的。但在有操作系统的驱动开发过程中,外设驱动程序的运行位于操作系统内核后期,代码中只能使用虚拟地址,操作系统内核提供一个函数ioremap为这些外设寄存器的物理地址在内核的虚拟地址空间中安排容量相同的虚拟地址空间相关联,从而得到对应的虚拟地址,并在内核页表中添加一条关联记录,方便在驱动程序运行过程中方便MMU通过查询内核页表将外设虚拟地址转换为芯片手册中查到的物理地址以便达到访问外设寄存器的目的,而在驱动开发的过程中则使用这些虚拟地址访问外设寄存器以达到操控外设的目的!!!

上一篇:嵌入式开发工程师入门需要具备哪些技能

下一篇:嵌入式应用开发和嵌入式驱动开发,如何选择?

戳我查看2020年嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部