FL2440之U-Boot移植记录(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013483704/article/details/47302833

开发板:FL2440

uboot版本:u-boot-2010.09   

uboot所有版本下载地址为:ftp://ftp.denx.de/pub/u-boot/

       

        U-boot,全称为Universal Boot Loader ,即通用Bootloader,是遵循GPL条款的开源代码项目。为是德国DENX小组的创建的工程。

一、uboot目录结构

       uboot2010.09解压后,获得以下目录,其目录作用在READEME中有介绍:

.

|--api                                -->存放uboot提供给外部app的应用程序接口

|--arch                              -->与体系结构相关的代码,uboot的重头戏

|-- board                           -->平台依赖,存放电路板相关源文件的目录

|--common                      --> 通用的多功能函数实现

|--disk                               --> 硬盘接口驱动程序

|-- doc                               --> 开发使用文档

|--drivers                           -->通用设备的驱动程序

|-- examples                    -->应用例程,一些独立运行的应用程序的例子

|-- fs                                  -->文件系统,支持嵌入式开发板常见的文件系统

|--include                         -->头文件和开发板配置文件

|--lib                                  -->通用库文件

|--nand_spl                      -->NAND存储器相关代码

|--net                                 -->存放网络相关的程序

|--onenand_ipl                 -->一个小boot,放在u-boot.bin之前,用于以onenandflash为mem的系统中

|--post                               -->存放上电自检的程序

`--tools                              -->工具,制作 S-Record 或者 U-boot 格式的映像等工具

uboot启动过程

2.1 启动的两种模式

        启动加载(Boot loading)模式:也称为"自主"(Autonomous)模式。即Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 BootLoader 的正常工作模式,用于嵌入式产品发布的时侯。

下载(Downloading)模式:目标机上的Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 BootLoader 保存到目标机的 RAM 中,然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中。通常在第一次安装内核与根文件系统时被使用。

2.2 Bootloader的两个阶段

        Bootloader的启动过程可以分为单阶段(single stage)、多阶段(multi-stage)两种。对于使用S3c2440的开发板来说,u-boot为多阶段的Bootloader。第一阶段使用汇编来实现,第二阶段通常使用C语言实现。

这两个阶段完成的功能如下:

第一阶段:

  • 硬件设备初始化

  • 准备RAM空间

  • 加载u-boot第二阶段代码到RAM空间

  • 设置好栈

  • 清除未初始化数据段BSS

        硬件初始化包括:关闭看门狗、关中断、设置CPU速度和时钟频率、RAM初始化等。对于S3C2440所用的Uboot来说,其中硬件初始化中的设置CPU速度和时钟频率将放在第二阶段代码中实现。另外对于NOR Flash等存储设备来说,也可以直接在上面运行代码而不用将第二段代码拷贝到RAM空间中,只不过执行效率会大大降低。

第二阶段:

  • 初始化本阶段所用到的硬件设备
  • 检测系统内存映射
  • 将内核映象和根文件系统映象从Flash读到ARM空间中
  • 为内核设置启动参数
  • 调用内核
        为了方便开发,需要至少初始化一个串口用来与Bootloader进行交互。检测系统内存映射是要确定开发板使用了多少内存及地址空间。由于是针对某类板子的Bootloader,所以可以根据板子的情况直接设置。另外将根文件系统复制到ARM中也不是必需的。取决于是什么类型的根文件系统,以及内核访问它的方法。

三、Uboot编译测试

    对于这样一个大的工程,看Makefile应该是不错的选择。另外顶层目录下的README也提供了不少帮助,说明了如何使用uboot。

先编译体验一下:

在/board目录下创建一个自己的开发板目录:mkdir fl2440

以smdk2410为模板将之复制到自己的开发板目录下:cpsamsung/smdk2410/*  fl2440/

将smdk2410.c 重命名为 fl2440.c :mvsmdk2410.c fl2440.c

进入fl2440目录下的makefile,将COBJS :=smdk2410.o flash.o改为COBJS := fl2440.o flash.o

回到uboot目录下,复制并重命名include/configs/smdk2410.h为fl2440.h

进入uboot目录下的boards.cfg,在 smdk2410 一行下面仿照其格式添加fl2440 这一行

最后进入uboot目录下的Makefile,添加上我们的交叉编译器,大致位置如下:

......

exportARCH CPU BOARD VENDOR SOC

CROSS_COMPILE= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-

......

这样配置后就差不多了,根据READEME中的说明,要使用开发板/board/<board_name>,就先执行“make <board_name>_config”命令进行配置,然后才执行make。如下:

      [@centos6 u-boot-2010.09]$ make fl2440_config

       Configuringfor fl2440 board...

      [@centos6 u-boot-2010.09]$ make

       ......

      /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-objcopy--gap-fill=0xff -O binary u-boot u-boot.bin

 至此整个uboot编译就完成了,编译成功后会生成三个文件,分别为:

  • U-Boot.bin:二进制可执行文件,可以直接烧入ROM、 FLASH的文件

  • U-Boot:ELF格式的可执行文件

  • U-Boot.srec:Motorola S-Record格式的可执行文件

        对于S3C2410的开发板,U-Boot.bin可以直接使用。但对于S3C2440的开发板来说,并没有现象。因为U-Boot.bin的代码是基于smdk2410开发板的,并没有对这个代码进行修改,所以要想适用于fl2440,就必须对源代码进行修改。

        另外,U-Boot编译成功后会在tools目录下生成一些工具,如mkimage等。将其复制到/usr/local/bin目录下,以后就可以直接使用它们了,比如之后编译内核时会使用mkimage来生成U-Boot格式的内核映象文件uImage。

        虽然README中说了要用make <board_name>_config之后才能用make,不过为什么这么用还不清楚,硬件的初始化也是不明白,明天再好好看下这一部分。




猜你喜欢

转载自blog.csdn.net/u013483704/article/details/47302833
今日推荐