嵌入式linux软件开发学习笔记--uboot介绍

2019-07-12 16:03发布

为什么要使用交叉编译工具?

1 嵌入式系统硬件资源限制:cpu主频、内存容量…
2 嵌入式系统MCU体系结构和指令集不同:ARM、MIPS、PowerPC…
3 提高开发效率

编译器的主要部件

1 分析器: 将源代码转变为汇编代码
2 汇编器: 将汇编代码转变成机器码
3 链接器: 将生成的机器码进行组装生成最后的可执行文件
4 标准C库 : 核心的C函数被打包成库,被链接成可执行文件的一部分

嵌入式软件的分层

这里写图片描述

嵌入式linux系统移植的要点

搭建交叉开发环境
bootloader的选择和移植
kernel的配置 编译 移植和调试
根文件系统的制作

为什么要移植uboot

每种不同的CPU体系结构都有不同的bootloader
bootloader还依赖具体的嵌入式板级设备的配置,比如板卡的硬件地址的分配,外设芯片的类型等…

uboot启动流程

stage1 (直接在对应nanflash这样的内存上运行):
  • 硬件设备初始化
  • 为加载bootloader的stage2准备ram空间
  • 拷贝bootloader的stage2到ram空间
  • 设置好堆栈(为C语言提供运行环境)
  • 跳转到stage2的入口点
    stage2:
  • 初始化本阶段所要用到的硬件设备
  • 将内核映像和根文件系统映像从flash拷贝到ram中
  • 调用内核
    这里写图片描述
    ## 内存分布:arm32##
    这里写图片描述

uboot目录结构

board:uboot移植主要修改的地方
common:实现uboot支持的命令行功能
include:头文件定义,顶层目录所包含的configs目录与开发板配置 寄存器地址定义相关

这里写图片描述
平台相关目录:board include…
平台五个目录:common net fs drivers
工具和文档:tools doc