内核物理地址和虚拟地址之间的静态映射过程

简介:

一:当我们开启了MMU之后,使用的都是虚拟地址,这时就需要考虑物理地址到虚拟地址的映射问题。建立映射表的三个关键部分是:

(1)映射表

(2)映射表建立函数

(3)映射表建立函数被调用

1:映射表

(1)映射表是具体的物理地址和虚拟地址的起始地址定义,在我们前面使用静态映射来操作LED时有介绍,三星版本的移植的内核,其主映射表在arch/arm/plat-s5p/include/plat/map-s5p.harch/arm/plat-samsung/include/plat/map-base.h

arch/arm/plat-s5p/include/plat/map-s5p.h的主要内容如下

arch/arm/plat-samsung/include/plat/map-base.h的主要内容如下

在这里,我们指定了虚拟地址的基地址,也就是宏S3C_ADDR_BASE  0XFD000000,在我们开启了MMU之后,其映射的虚拟地址都是根据这个基地址+偏移量来得到的某个具体的寄存器的,这样当我们建立了映射之后,就可以直接操作虚拟地址来操作我们对应的寄存器,在这里,也只是映射了需要用到的寄存器的虚拟地址,假如要添加,则只需在map-s5p.h中添加相应的映射即可。

(2)GPIO相关的主映射表位于:arch/arm/machs5pv210/include/mach/regs-gpio.h

GPIO的具体寄存器定义位于:arch/arm/mach-s5pv210/include/mach/gpio-bank.h

需要注意的是,不同版本的内核其映射表的位置是不同的,,但是一般都在arch/arm/xxx/map_xx.h文件中

2:映射表的建立过程

上面,我们介绍了内核通过宏定义定义了很多寄存器对应虚拟地址的基地址,那么这些宏是在哪被调用的呢,映射表又是如何被调用的呢。

答案就是kernel/arch/arm/mach-s5pv210/mach-smdkc110.c中的smdkc110_map_io函数。它的调用层级如下:

smdkc110_map_io

s5p_init_io

iotable_init

iotable_init(s5p_iodesc, ARRAY_SIZE(s5p_iodesc));

iotable_init函数就是最终实现建立虚拟地址映射的函数。其中S5P_iodesc是一个数组,它里面包括了我们上面用大量的宏定义得到的映射表。也就是说我们上面创建的宏都在这里被使用到了。


所以当我们需要添加新的虚拟地址映射时只需要做两步

(1)在我们的map-s5p.h或者是map-base.h中添加相应的宏定义

(2)在我们的s5p_iodesc中添加相应的数组元素

3:映射表建立函数的调用过程




本文转自 菜鸟养成记 51CTO博客,原文链接:http://blog.51cto.com/11674570/1937462

相关文章
|
缓存 网络协议 数据库连接
C/S架构中HTTP错误状态码原因分析及解决办法
HTTP(Hypertext Transfer Protocol)是用于在客户端和服务器之间传输数据的协议。当在浏览器或其他HTTP客户端中访问网页时,可能会发生各种访问报错。我们需要根据网页提供的错误状态码分析错误原因,以找到相对应的解决办法。
1172 0
|
SQL 存储 Oracle
6 张图带你彻底搞懂分布式事务 XA 模式
XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。
13712 1
6 张图带你彻底搞懂分布式事务 XA 模式
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
867 3
|
12月前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
1541 3
|
消息中间件 调度 数据安全/隐私保护
xenomai内核解析--任务同步互斥机制(一)--优先级倒置
本文是关于Xenomai实时操作系统中资源管理和优先级倒置问题的概述。Xenomai使用`xnobject`和`xnregistry`管理任务间的同步互斥资源,如信号量、互斥锁等。资源管理涉及访问控制和资源保存,确保共享资源的正确调度。文章还介绍了优先级倒置现象,即高优先级任务因低优先级任务持有资源而被阻塞。为解决此问题,Xenomai采用了优先级继承策略,临时提升低优先级任务的优先级,以防止持续的优先级反转。文章后续将深入分析`xnsynch`模块和优先级倒置解决方案。
300 1
xenomai内核解析--任务同步互斥机制(一)--优先级倒置
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
数据采集 物联网 数据挖掘
API接口的应用
API接口在现代技术中至关重要,它使不同软件、设备间能相互通信和数据共享。在社交网络中,如Facebook及Twitter的API让开发者能够构建交互式应用;移动应用则依赖API与服务器通信,实现天气查询、地图定位等功能;云计算平台如AWS通过API提供了资源管理和配置服务;物联网设备使用API实现数据交换;视频游戏开发商利用各类平台API发布游戏。此外,API爬虫数据接口技术通过爬虫抽取并输出数据,被广泛应用于获取商业、金融、医疗等领域的大数据,以支持数据分析、策略制定及业务流程优化,极大地提高了数据收集与处理的效率和准确性。
Open3D File Io 文件IO
Open3D File Io 文件IO
149 1
|
XML 存储 关系型数据库
10分钟手把手教你用Android手撸一个简易的个人记账App(一)
接下来就来讲解,如何从0到1实现一个简易的个人记账系统。
10分钟手把手教你用Android手撸一个简易的个人记账App(一)
|
存储 缓存 Linux
深入了解Linux内核跟踪:ftrace基础教程
深入了解Linux内核跟踪:ftrace基础教程
深入了解Linux内核跟踪:ftrace基础教程