基于AMCC PPC405ep处理器的U(2)

Bootloader(引导装载器)是用于初始化目标板硬件, 给嵌入式操作系统提供板上硬件资源信息,并进一步装载、引导嵌入式操作系统运行的固件。
从嵌入式系统实际开发角度讲,嵌入式操作系统的引导、配置甚至应用程序的运行状况都和bootloader有一定的关联,可以说,掌握Bootloader移植是顺利进行嵌入式系统开发的重要利器。与常见的嵌入式操作系统板级支持包BSP相比,Bootloader与底层硬件更为相关,即每个不同配置的目标板基本都有不同的Bootloader。因为Bootloader往往更依据量体裁衣、定身制作的原则,以满足要求的最小化代码存放在启动ROM 或Flash中。

1. U-Boot简介
全称Universal Boot  Loader,是遵循GPL条款的开放源码项目,从FADSROM、8xxROM、PPCBOOT逐步发展演化而来,其源码目录、编译形式与Linux内核很相似。事实上,不少U—Boot源码就是相应Linux内核源程序的简化,尤其是一些设备的驱动程序,从U-Boot源码的注释中能体现这一点。
u-Boot中Universal的含义:
(1)U-Boot不仅仅支持嵌入式Linux系统的引导,还支持NetBSD。VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系统;
(2)U-Boot支持PowerPC、MIPS、x86、ARM、Nios、XScale等诸多常用系列的处理器;
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。

2. U-Boot主要目录结构
- board            存放电路板相关的目录文件,主要包含SDRAM、Flash驱动。在board目录下的每个子平台目录内,都有一个连接脚本文件u-boot.lds,从中可以找到u-boot的函数入口。另外,该目录下还有一个config.mk文件,用于设置TEXT_BASE的地址,该地址就是希望运行的地址、链接地址;
- common           独立于处理器体系结构的通用代码,如内存大小探测与故障检测。它实现了u-boot的所有命令,其中内置了一个shell脚本解释器(hush.c,a prototype bourne shell grammar parser),busybox中也使用了它;
- cpu              与处理器相关的文件,如mpc8xx子目录下含串口、网口、LCD 驱动及中断初始化等文件。
其中cpu.c负责初始化CPU、设置指令cache和数据cache等;
interrupt.c负责设置系统的各种中断和异常,如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;
start.S负责u-boot启动时执行的第一个文件,它主要设置系统堆栈和工作方式,为跳转到C程序入口点做准备;
- disk             硬盘接口驱动程序
- doc              U-Boot的说明文档;
- drivers          通用驱动驱动程序,如CFI Flash驱动(目前对INTEL Flash支持较好);
- examples         可在U—Boot下运行的示例程序,如hello_world.C,timer.C;
- fs               文件系统相关代码
- include          U-Boot头文件,configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
- net              网络相关代码
- post             开机自检的代码
- rtc              RTC驱动
- tools            存放制作S-Record 或者 U-Boot格式的映像等工具
- Makefile         生成u-boot镜像的Makefile文件
- mkconfig         用来生成各个板子的配置文件
- config.mk        被Makefile所包含,存放编译选项和规则
除了这些目录外,在根目录下还有其他的一些文件, 同时该目录下还有个README的文件,我们可以通过这个文件来熟悉u-boot。
移植过程中重点关注的是board, cpu, 以及Makefile等与平台相关的目录和文件。

3. U-Boot支持的主要功能
(1)系统引导
   支持NFS挂载、RAMDISK系统引导(压缩或非压缩)形式的根文件系统;
   支持NFS挂载,从Flash中引导压缩或非压缩系统内核;
(2)基本辅助
   强大的操作系统接口功能,可传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支持      最为功能强劲;
   支持目标板环境参数的多种存储方式,如Flash、NVRAM、EEPROM;
   CRC32校验,可校验Flash中内核、RAMDISK镜像文件是否完好;
(3)设备驱动
   串口、SDRAM、Flash、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持
(4)上电自检功能
   SDRAM、Flash大小自动检测;
   SDRAM 故障检测;
   CPU型号
(5)特殊功能
   XIP内核引导

4. U-Boot移植过程
(1) 获得发布的最新版本U—Boot源码
     可从U.Boot的官方网站上获得。
(2) 阅读相关文档
     主要是U.Boot源码根目录下的README文档和U—Boot官方网站的DULG(The DENX U—Boot and Linux Guide)文档                         ()。尤其是DULG文档,对如何安装建立交叉开发环境和解决U-Boot移植中常见问       题,都一一给出了详尽说明。
(3) 订阅U—Boot用户邮件列表
    
     当在移植U-Boot过程中遇有问题,在参考相关文档和搜索u.Boot.U ser邮件档案库(?       forum=id=l 2898)仍不能解决时,第一时间提交所遇到的问题,众多U-Boot开发人员会迅速排查问题,而且W.D本人很有可能会直接参与指导。
(4)建立开发环境
   绝大多数的开发环境是交叉开发环境。在这方面,DENX和MontaVista均提供了完整的开发工具集。
(5)在目标板与开发主机间接入硬件调试器
   这是非常关键的调试工具,因为在整个U—Boot的移植工作中,尤其是初始阶段,硬件调试器是我们了解目标板真实运行状态的唯一途径。
   推荐使用BDI2000。一方面,其可靠性高,功能强大,完全能胜任移植和调试U—Boot。另外,网上也有不少关于BDI2000调试方面的参考文档。
(6)如果在参考开发板上移植U—Boot,可能需要移除目标板上已有的Bootloader。可以根据板上Bootloader的说明文档,先着手解决在移除当前Bootloader的情况下,如何进行恢复,以便今后在需要场合能重新装入原先的Boot loader。

5. U-Boot移植方法
当前,对于U.Boot的移植方法,大致分为两种:
(1)先用BDI2000创建目标板初始运行环境,将U-Boot镜像文件u-boot.bin下载到目标板RAM中的指定位置,然后,用BDI2000进行跟踪调试。其好处是, 不用将Uboot镜像文件烧写到Fla sh中去。但弊端在于,对移植开发人员的移植调试技能要求较高,BDI2000的配置文件较为复杂。
(2)是用BDI2000先将U—Boot镜像文件烧写到Flash中去,然后利用GDB和BDI2000进行调试。这种方法所用的BDI2000配置文件较为简单,调试过程与U-Boot移植后运行过程相吻合。即U—Boot先从Flash中运行,再重载至RAM中相应位置,并从那里正式投入运行。唯一感到有些麻烦的就是需要不断烧写Flash。
建议采用第二种移植方法。

6. U-Boot移植主要修改的文件
从移植U—Boot最小要求,U-Boot能正常启动的角度出发,主要考虑修改如下文件:
(1)<目标板>.h头文件,如include/configs/nc650.h
   可以是U-Boot源码中已有的目标板头文件,也可以是新命名的配置头文件;大多数的寄存器参数都是在这一文件中设置完成的。
(2)<目标板>.C文件,如board/NC650/nc650.C
   它是SDRAM 的驱动程序,主要完成SDRAM 的UPM 表设置, 上电初始化。
(3)Flash的驱动程序,如board/NC650/flash.C
   可在参考已有Flash驱动的基础上,结合目标板Flash数据手册,进行适当修改;
(4)串口驱动,如修改cpu/mpc8xx/serial.c
   串口收发器芯片使能部分。

u-boot是一个层次式结构,要让它跑起来,应当至少提供串口驱动(UART Driver)、以太网驱动(Ethernet Driver)、Flash 驱动(Flash驱动)以及USB 驱动(USB Driver)。目前,通过USB口下载程序显得不是十分必要,所以暂时没有移植USB驱动。驱动层之上是u-boot 的应用,command 通过串口提供人机界面。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzjfg.html