第三课 Boot Loader 移植(U-boot)之一

来源:互联网 发布:linux如何禁用端口 编辑:程序博客网 时间:2024/06/06 00:09

Linux有许多Boot Loader可用,比较常见的有U-boot,vivi,RedBoot等,本课程介绍U-boot的版级移植,对应的硬件平台是S3C2440。
   嵌入式系统中,系统上电或复位后,CPU通常从地址0X00000000处读取第一条指令开始执行,而Boot Loader就放置与此,他比较类似PC机的Bios。他的工作非常重要:初始化硬件设备、建立内存空间映像图,将硬件环境带到一个合适的状态。
     一般我们可以把U-boot的启动过程分为两个阶段,阶段一和阶段二,第一阶段一般用汇编编写,第二阶段一般用C编写,具体如下
    阶段一:
          初始化基本的硬件设备(中断、关闭处理器的指令、数据Cache)
          初始化系统内存
          设置堆栈
          跳转到第二阶段的C语言程序入口点。
   阶段二:
          初始化本阶段使用的硬件(串口、以太网口等)
          检测系统内存映射
          将内核镜像和根文件系统从Flash读到内存中。
          为内核设置启动参数。
          调用内核,将系统控制权交给内核。

    下面我们来分析U-boot的源代码。ftp://ftp.denx.de/pub/u-boot/
    下载U-boot 1.2.0压缩包u-boot-1.2.0.tar.bz2通过SSH上传到用户的跟目录/home/21iee下,解压:
           tar -jxvf u-boot-1.2.0.tar.bz2
     通过SSH我们可以看到U-Boot源代码结构,如图:

   U-Boot的源代码高度模块化。其中我们关心的主要目录有:

  • Board:U-boot支持的开发板相关程序原代码。其中board/SMDK2410目录包含了三星官方SMDK2410开发板的源文件。

  • Common:与体系无关的文件。

  • cpu:包含U-Boot所支持的所以CPU的源代码。S3C2440A属于ARM920T家族,所以只需要关心cpu/arm920t目录,其中start.S文件最终会成为u-boot.bin文件的第一段代码。

  • Drivers:通用设备驱动程序,如串口,网口,usb等

  • Doc:说明文档。

  • fs:U-Boot支持的文件系统。

  • include:包含的头文件目录。其中include/configs/board_name.h中定义了所以和开发板相关的硬件资源配置参数,如网卡地址、内核启动参数、物理内存映射等。

  • lib_arm:与arm体系结构有关的一些公用接口代码。

  • net:网络相关代码。

  • tools:编译相关工具。

      

  在动手操作前,不管三七二十一,先编译一把(我用的是GCC3.3.2的环境用3.4.1有一个error,可根据第二课内容更改bashrc文件修改)

   

命令为:Make smdk2410_config //smdk2410_config 是目标平台。

             然后通过 make all 命令编译,几分钟后如果提示

说明U-Boot已经创建完成。

-----------------------------------------------------------------------------------------------------------------------

U-Boot移植到新的S3C2440A平台上,首先在board目录下增加一个新的开发板目录。

1.新建开发板目录,我取名为hztour2440A

     u-boot-1.2.0/board/下建立目录 hztour2440A,该目录下需要几个基本文件:config.mk、flash.c、Makefile、mensetup.S、u-boot.lds,以及以开发板命名的hztour2440A.c文件。

 

cd board/
cp -arv smdk2410 hztour2440A  
//我们2440和2410类似,所以我们复杂smdk2410下的所有文件
mv hztour2440A/smdk2410.c hztour2440A/hztour2440A.c   //重命名为hztour2440A.c


2.include/configs/目录下建立目标板配置头文件。

 

cd include/configs
cp smdk2410.h hztour2440A.h   //复制smdk2410.h头文件

 

3.修改Makefile文件,添加编译项

 

hztour2440A_config: unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t hztour2440A NULL s3c24x0

这里hztour2440A与board/目录下目标板文件夹名称hztour2440A一致。

4.确认编译环境(可选)
  该Makefile中定义了CROSS_COMPILE的值,用于在交叉编译时指定交叉编译器,默认为

ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-    //默认的交叉编译器名的前缀,如果用crosstool生产的编译器,前缀该是arm-9tdmi-linux-gnu-
endif                         //也可以直接写路径


5.修改board/hztour2440A下的Makefile
  

COBJS    := hztour2440A.o flash.o

 

6.测试编译

 

make hztour2440A_config     //出现Configuring for hztour2440A board...提示,说明配置成功
make                        //测试编译

到这里为止,我们编译出来的这个u-boot还不能真正适用于我们的目标板,只是实现了对新目标板的定义,接下来我们还要根据新的目标板的特性来移植,请关注 第四课 Boot Loader 移植(U-boot)之二的内容

                作者:hztour  转载请注明出处

原创粉丝点击