U-Boot分析、移植及使用

优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/03/26/U-Boot分析、移植及使用/#more

该系列主要是为驱动学习提供基石,从0到Qt。本文是该系列的第二篇:对U-Boot进行分析及移植.


1.U-Boot结构分析

Bootloader一般可以分成两个阶段

  • 第一个阶段通常使用汇编进行必要的硬件初始化,例如:关看门狗、关中断、设置时钟频率、RAM初始化等。除此之外,还要将第二阶段的代码复制到RAM中,设置好栈,然后跳到第二阶段,该阶段主要是与SOC平台相关。
  • 第二阶段一般是用c语言编写,该阶段主要和开发板板载资源相关。该阶段主要初始化后续的硬件处理内存映射、以及将内核和根文件系统从Flash“搬运”到RAM中运行,然后传入启动参数,最后启动引导内核,完成使命。

Linux中系统一般的分区结构,如下图:

![](https://blog-image-1257972744.cos.ap-chongqing.myqcloud.com/hceng/blog_image/170326/1.jpg)

分区主要分为四个分区:Bootloader、Boot parameters、Kernel、Root filesystem。其中Boot parameters是待传入内核的参数,Kernel即内核、Root filesystem是根文件系统。Bootloader在第一个分区(假设该储存介质为Nand Flash),则在Nand Flash的地址为0x0000 0000,S3C2440上电后,硬件自动把Nand Flash上前4k代码复杂到自己内部RAM中运行。该4k代码先要初始化一些必要的硬件,如看门狗,中断等,然后准备好SRAM,并将后续的代码复制到SDRAM中,再跳到SDRAM中运行,完成Bootloader第一阶段。此时在SDRAM中的第二阶段代码开始工作,首先还是初始化硬件,处理内存映射,把Nand Flash上内核和根文件系统“搬运”到SDRAM准备运行,然后根据用户通过串口传入的启动参数放在Boot parameters,然后内核启动,完成使命。内核启动后,开始去Boot parameters寻找启动参数,根据启动参数做出相应的操作,如:控制台输出、串口波特率、根文件系统位置。


2.U-Boot源码分析

这里根据u-boot-1.1.6的源码进行分析,,主要工作有:

  • 第一阶段的硬件初始化(CPU模式、看门狗、中断)
  • 准备SDRAM
  • 设置堆栈
  • 搬运FLASH中的代码到SDRAM
  • 清除.bss段并跳转至第二阶段
  • 第二阶段的硬件初始化(时钟、串口)
  • 内存映射
  • 根据传入参数启动内核

2.1第一阶段

该阶段的源码在/arch/cpu/arm920t/start.S中:首先进行硬件初始化,包括设置CPU模式,关闭看门狗、关闭中断。这里把时钟配置放在了第二阶段。

  • 设置CPU模式
    把CPU设置为SVC模式,将当前程序状态计数器CPSR的值保存到r0中,利用bic指令清除r0的0x1f并存入r0中,再利用orr指令或运算上0xd3并存入r0,最后r0写回CPSR,这一过程就把CPSR设置为SVC模式:
    {% cod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值