zoukankan      html  css  js  c++  java
  • UBoot讲解和实践-------------讲解(二)

                                  UBoot  ARM移植之阶段二   理论篇

     stage2:

               1.初始化本阶段要使用的硬件设备:

                 通常包括两方面:

                  1)初始化至少一个串口,以便和终端用户进行I/O输出信息。
                  2)初始化计时器等

              2.检测系统的内存映射

                 内存映射就是指在整个4GB物理地址空间中有哪些地址被分配用来寻址系统的RAM单元。必须知道CPU预留的全部RAM地址空间中的哪些被真正映射到RAM地址单元,哪些处于"unused状态。

                使用数据结构体memory_area_struct来描述RAM地址空间中的一段连续的地址范围

               处有一个可用来检测整个RAM地址空间内存映射情况的简单而有效的算法。(具体研究此算法需要另看别的书)

             3.加载内核映像和根文件系统映像

                  有两个工作要做:

                   1)规划内存占用的布局。包括两个方面:内核映像所占用的内存范围、根文件系统所占用的内存范围。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。

                  2)从flash上复制。由于像ARM这样的嵌入式CPU通常都在统一的内存空间地址中寻址flash等固态存储设备的,因此从flash上读取数据与从RAM单元中读取数据并没有什么不同。用一个简单的循环就可以完成从flash设备上复制映像的工作

                     while(count)

                     {

                            *dest++=*src++;
                             count -= 4;//arm 是4字节的,由总线决定的。
                      }

               4.设置内核的动参数

                   即设置linux内核的启动参数。

                   数据结构tag和tag_header定义在linux内核源码的include/asm/setup.h头文件中。(这里面大有文章)

               5.调用内核

                   Boot Loader调用Linux内核的方法是直接跳转到内核的第一条指令处,跳转需要满足的条件:

                   1)CPU寄存器的设置:R0=0;

                   (具体参看内核代码文件:linux/arch/arm/tools/mach --types)
                   2)CPU模式:必须禁止中断(IRQs和FIQs),同时必须应该是SVC模式(特权模式,可以访问更多的硬件资源)。
                   3)Cache和MMU的设置:MMU必须关闭;指令Cache可以打开也可以关闭;数据cache必须关闭。

                    

                 

    The future's not set,there is no fate but what we make for ourselves.
  • 相关阅读:
    Web Site Administration Tool 文章收集
    Sql中补零方法及其它
    PowerDesigner 教程
    什么是Zend
    什么是CMS系统?
    谈谈今天遇到的编译工具查错的问题
    Lec4快速排序
    堆排序 zz
    强大的Python
    Lec6待学习的堆排序
  • 原文地址:https://www.cnblogs.com/wang1994/p/5481221.html
Copyright © 2011-2022 走看看