嵌入式BootLoader分析:U-Boot简介(二)

2019-07-12 17:29发布

概述

ARM处理器的芯片商很多,所以每种芯片的开发板都有自己相应的BootLoader。其中,U-Boot(Universal BootLoader)称为通用BootLoader,是目前开发嵌入式系统引导代码使用最广泛的,如今已成为ARM平台事实上额标准BootLoader。 U-Boot是德国DENX小组开发的用于多种嵌入式CPU的BootLoader程序,可以运行在基于PowerPC、ARM、MIPS等多种嵌入式开发板。其本质还是单片机程序。

U-Boot源码的目录结构

从http://u-boot.sourceforge.net/或ftp://ftp.denx.de/pub/u-boot/站点都可以下载U-Boot的源码,其主要目录结构如下:
  • boad: 平台依赖;存放与开发板相关的目录文件和源码,与具体开发板的硬件和地址分配有关。
  • cpu:平台依赖;存放与CPU相关的目录文件和源码,所有的子目录都是以U-Boot所支持的CPU命名。
  • lib_arm:平台依赖;存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数。
  • common平台通用;与体系结构无关的代码文件,实现了U-Boot的所有命令,其中内置了一个shell脚本解释器,busybox中也使用了它。
  • drivers:平台通用;通用设备驱动程序,如网卡、Flash、串口和USB总线等。
  • Doc:文档;U-Boot开发相关文档。
  • examples:应用例程;一些可以独立运行的应用程序例子,如helloword。
  • include:平台通用;U-Boot与硬件平台相关的头文件和开发板配置文件。config子目录下与目标板相关的配置头文件是移植过程中经常需要修改的文件。
  • net:平台通用;存放网络相关源码,BOOTP协议,TFTP协议,RARP协议代码,无需移植。
  • Post:平台通用;存放上电自检程序。
  • rtc:平台通用;RTC驱动程序。
  • tools:工具;用于创建U-Boot S-RECORD和BIN镜像文件的工具。
对于定制的开发板,配置编译过程中只需要其中的部分程序。在board目录下找到与自己的开发板相近的配置,然后在此基础上做些修改,就可以实现相应的功能。

U-Boot支持的主要功能

  • 系统引导:支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统。支持NFS挂载,从Flash中引导压缩或非压缩系统内核。
  • 基本辅助功能:强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系统,对Linux支持好。
  • 支持目标板环境参数多种存储方式:如Flash、NVRAM、EEPROM。
  • CRC32校验:可校验Flash中内核、RAMDISK镜像文件是否完好。
  • 设备驱动:串口、SDRAM、Flash、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持。
  • 上电自检:SDRAM、Flash大小自动检测,SDRAM故障检测;CPU型号。
  • 特殊功能:XIP内核引导。

U-Boot基本命令及环境变量

  • ?:得到所有命令列表
  • Help:如help usb,列出USB的功能使用说明
  • ping:只能从开发板ping别的机器
  • setenv:设置环境变量,如:
    -setenv serverip 192.168.1.110
    -setenv ipaddr 192.168.1.177
    -setenv bootcmd ‘tftp 32000000 vmlinux; kgo 32000000’
  • saveenv:保存环境变量到内存。设置好环境变量后,保存变量值。
  • tftp:通过网络下载文件
  • bootp:通过网络用Boot/TFTP协议来启动镜像
  • protect:对Flash进行写保护或取消写保护
  • erase:删除Flash的扇区
  • cp:在内存中复制内容,cp 32000000 40000(把内存中0x32000000开始的0x40000字节复制到0x0处)
  • mw:对RAM中内容做写操作,mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设置为0xFF
  • md:修改RAM中的内容,md 32000000(内存的起始地址)
  • flinfo:列出Flash的信息
  • kgo:启动没有压缩的Linux内核,kgo 32000000
  • go:在地址‘addr’处开始程序执行
  • run:运行一个环境变量所定义的命令
  • bootm:启动U-Boot Tools制作的压缩Linux内核,从内存中运行经过mkimage加工的程序映像,boot 32000000
  • loadb:通过串口线(kermit mode)装载二进制文件
  • printenv:打印环境变量
UBoot中的简单环境变量如下:
  • baudrate:波特率
  • bootdelay:Boot延迟
  • bootcmd:Boot命令
  • bootargs:Boot参数
  • bootfile:默认下载启动的内核
  • ipaddr:客户机IP地址
  • serverip:服务器地址
  • loadaddr:装载地址
  • ethaddr:网卡MAC地址
对于U-Boot代码级启动过程及源码分析在下一篇文章中详细介绍。