u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划

u-boot分析(十一)

  通过前面十篇博文,我们已经完成了对BL1阶段的分析,通过这些分析相信我们对u-boot已经有了一个比较深入的认识,在BL2阶段大部分是对外设的初始化,并且有的我们已经分析过,在这篇博文我打算对BL1阶段没有分析到的重要外设进行简单分析,并结束对u-boot的分析,同时对后面自己的博文进行简单的规划,希望有兴趣的朋友跟我一块学习和研究嵌入式。

今天我们会分析到以下内容:

1.      MMU分析(内容出自我以前的博客)

2.      裸机开发总结

3.      后期学习规划

MMU分析

1.       MMU作用

MMU就是负责虚拟地址(virtual address)转化成物理地址(physical address)。

2.       基本概念

下面我来说一下ARM CPU上的地址转换过程涉及三个概念:虚拟地址(VA)(CPU内核对外发出VA),变换后的虚拟地址(MVA)(VA被转换为MVA供cache和MMU使用,在此将MVA转换为PA),物理地址(PA)(最后使用PA读写实际设备)。

1.      CPU看到的用到的只是VA,CPU不管VA最终是怎样到PA的。

2.      cache、MMU也是看不到VA的,它们使用的是MVA(VA到MVA的转换是由硬件自动完成的)。

3.      实际设备看不到VA、MVA,读写设备使用的是PA物理地址。

3.       如何地址转换

在此过程中要用到以下两个必备的东西:

1.      cp15协处理器的c2寄存器(这个里面的东西需要程序员自己装载)

2.      虚拟地址MVA。

接下来我说以下mmu对虚拟地址到物理地址的转化过程。

1.        无论进行那种有效转换都必须进行一级页表的转换,所以我们先去产生一级页表。产生一级页表经过以下步骤

a)        由协处理器CP15中的寄存器C2(高18位,即[31:14]为转换表基地址,低14位为0)为一级转换表基地址,即TTB该地址指向了一个2^14=16KB大小的存储区,即一级转换表。

b)        将MVA的高12位,即位[31:20]作为一级转换表的地址索引,因此一级转换表具有2^12=4096项,这4096项的地址为32位,最高的18位[31:14]为寄存器C2的高18位,中间12位为MVA的高12位[31:20],最低2位为0b00。这4096项中的内容称为一级描述符。至此一级页表产生完毕。

2.        mmu拿到一级描述符首先看它的后两位也就是bits[1:0],根据这两位的取值mmu会进入不同的转换模式,这两位会出现下面四种取值。其中这四种取值分别对应四种模式,下面我一一解释。

a)        00          无效不进行转换

b)        01          进行粗页式转换

c)        10          进行段式转换

d)        11          进行细页式转换

3.        接下来对于不同的转换模式,就要进行不同的转换。我下面将对三种转换模式进行一一分析。

a)        0b10(段式转换),把段式转换放在第一个说的原因是在ARM中大量用到了段式和细页式转换。

段式转换是最简单的一种转换方式,它是将我们刚才产生的一级描述符(即4096项中的内容)的高12位作为段的基地址,用MVA的低20位作为每个段的偏移量,由此我们可以轻松的推出每个段的大小为2^20=1MB,至此我们就得到了一个物理地址PA。

b)        0b11(细页式转换)

细页式转换,它是将我们刚才产生的一级描述符的高20位bits[31:12],再加上MVA的bits[19:10](第二级表索引)合体,bits[1:0]补0,获取第二级描述符的地址,至此其一级转换结束,因为其二级转换方式和粗页式的二级转换方式相同所以我下面一块分析。

c)        0b01(粗页式转换)

粗页式转换,它是将我们刚才产生的一级描述符的高22位bits[31:10],再加上MVA的bits[19:12](第二级表索引)合体,最后两位补0,获取第二级描述符的地址(32位),至此其一级转换结束。

4.        下面我们将进入二级转换,对于二级转换只针对细页式和粗页式,没有段式转换。

a)        经过一级转换我们得到了二级描述符的地址,我们通过此地址可以得到二级描述符,我们根据二级描述符的低两位bits[1:0]同样可以分为四种转换模式:

i.              00            无效不进行转换

ii.              01            大页描述符

iii.              10            小页描述符

iv.              11            极小页描述符

b)        接下来我将对各个模式进行分析。

i.              01(大页描述符)

此时我们取出二级描述符中的bits[31:16]——大页基址,它和MVA的bits[15:0]组成一个32位的物理地址,这就是MVA对应的PA。

ii.              10(小页描述符)

此时我们取出二级描述符中的bits[31:12]与MVA的bits[11:0]组成一个32位的地址,这就是MVA对应的PA。

iii.              11(极小页描述符)

此时我们取出二级描述符中的bits[31:10]与MVA的bits[9:0]组成一个32位的地址,这就是MVA对应的PA。

裸机开发总结

在前十篇博文中我们分析了整个u-boot的工作流程,并对其中重要的代码和外设进行了分析,对于嵌入式的外设是相当多的,我们要全部分析的话是不太现实的,所以我们应该在学习中总结方法,下面我将自己对于裸机的方法跟大家进行分享,不足之处还望大家互相交流。

1)        熟悉外设大体工作原理,比如我们在前几篇博文中首先分析的就是该外设的工作原理,这些工作原理以及运作方式大部分都可以在该外设的手册中找到相应的说明。

2)        从该外设的芯片手册中找到其控制方法,比如时序图,通信方式等等可控制信息。

3)        从我们使用的控制芯片中找到有没有专门为此外设提供的控制接口,比如我们以前说到的内存控制器、串口控制器、nand控制器等。

4)        从控制芯片手册中找到其对该外设提供的控制方式,比如控制流程等信息。

5)        检查硬件连接方式,确定管脚等信息

6)        根据从外设芯片得到的所需要的控制信息,配置我们控制芯片所提供的控制信息,得到所需数据。

7)        根据6)得到的内容进行代码的编写。

8)        编译调试(这个过程可以用到串口、示波器、万用表、j-link等进行调试)

以上就是自己简单总结的外设裸机开发步骤,有很多不足之处,希望各位提宝贵意见。

后期学习规划

通过对u-boot的分析,我们对arm裸机的开发有了一定认识,在接下来我会去分析linux中的各种子系统、驱动模型等内容,整个过程必然很困难,自己只是进行简单的分析,有不足之处还请各位大神及时指导,让我们向内核进军。

时间: 2024-11-04 08:46:13

u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划的相关文章

用OSSIM简单实现分布式Netflow分析系统

用OSSIM简单实现分布式Netflow分析系统 若干要对网络异常流量进行分析,首先要深入了解其产生原理及特征,对异常流量的种类.流向.产生后果.数据包类型.地址.端口等多个方面进行分析.Linux下Netflow数据采集分析工具为Nfdump,通过Nfsen,以Web界面展示出来,然而如果让你完全通过之前编译安装的方式搭建Netflow采集分析平台确非常复杂. 以下三幅图展示了在OSSIM系统中实现分布式Netflow系统的截图. 如何轻松设置Netflow,大家请参考<开源安全运维平台OSS

一个简单的HTML病毒分析

一直就想写这篇东西了,只是上班时说要上班,不写,回家后又忙着玩游戏,丢一边去了.现在只好不务正业的开写了,希望头儿不会知道我的blog.哈哈 在很久之前就对HTML的病毒很感兴趣了,很好奇怎么能远程向本地不经过允许就能下载可执行文件的,只是一直没机会搞得到ASP的原码,所以不才敢断章取义的去作什么分析.最近一次听一朋友说他看一个网页时病毒防火墙提示有病毒,叫我小心(先感谢一下他先),我闪了一下念头,就打开FlashGet把那个病毒首页下了下来. 稍微看了一下发现在首页代码的下面几行里有一个隐含的

Javac源码简单分析之Javac简单介绍

一.简单介绍 javac 是java语言编程编译器.javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件. 二.源码获取 OpenJDK6源码:http://download.java.net/openjdk/jdk6/ Javac的源码就在OpenJDK源码里面. 或者在CSDN下载:http://download.csdn.net/detail/p_3er/7383741 三.Javac的包 Javac的公共入口点是com.sun.tools.javac

Sql Server之旅——第十一站 简单说说sqlserver的执行计划

原文:Sql Server之旅--第十一站 简单说说sqlserver的执行计划 我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么执行的,这样 就可以方便的找到sql的缺陷和优化点. 一:执行计划生成过程 说到执行计划,首先要知道的是执行计划大概生成的过程,这样就可以做到就心中有数了,下面我画下简图: 1. 分析过程 这三个比较容易理解,首先我们要保证sql的语法不能错误,select和join的表是必须存在的,以及你是有执行

Spring源码分析——BeanFactory体系之抽象类、类分析(二)

上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之抽象类.类分析(一),今天继续分析. 一.工厂Bean注册支持——FactoryBeanRegistrySupport 废话不多说,直接看我注释的源码: /* * Copyright 2002-2012 the original author or authors. * * Licensed und

Cordova Android源码分析系列二(CordovaWebView相关类分析)

本篇文章是Cordova Android源码分析系列文章的第二篇,主要分析CordovaWebView和CordovaWebViewClient类,通过分析代码可以知道Web网页加载的过程,错误出来,多线程处理等. CordovaWebView类分析 CordovaWebView类继承了Android WebView类,这是一个很自然的实现,共1000多行代码.包含了PluginManager pluginManager,BroadcastReceiver receiver,CordovaInt

mybatis源码分析(四) mybatis与spring事务管理分析

mybatis源码分析(四) mybatis与spring事务管理分析 一丶从jdbc的角度理解什么是事务 从mysql获取一个连接之后, 默认是自动提交, 即执行完sql之后, 就会提交事务. 这种事务的范围是一条sql语句. 将该连接设置非自动提交, 可以执行多条sql语句, 然后由程序决定是提交事务, 还是回滚事务. 这也是我们常说的事务. Connection connection = dataSource.getConnection(); // connection.setTransa

NLP+语篇分析(五)︱中文语篇分析研究现状(CIPS2016)

摘录自:CIPS2016 中文信息处理报告<第三章 语篇分析研究进展.现状及趋势>P21 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bcebos.com/cips2016.pdf NLP词法.句法.语义.语篇综合系列: NLP+词法系列(一)︱中文分词技术小结.几大分词引擎的介绍与比较 NLP+词法系列(二)︱中文分词技术及词性标注研究现状(CIPS2016) NLP+句法结构(三)︱中文句法结构研究现状(CIPS2016) NLP+语义分析(四)

OpenStack_Swift源码分析——Ring的rebalance算法源代码详细分析

今天有同学去百度,带回一道面试题,和大家分享一下: 打印: n=1 1 n=2 3 3 2 4 1 1 4 5 5 n=3 7 7 7 7 6 8 3 3 2 6 8 4 1 1 6 8 4 5 5 5 8 9 9 9 9 提供一段参考程序: <pre name="code" class="cpp">// ConsoleApplication1.cpp: 主项目文件. #include "stdafx.h" #include &quo