Uboot启动

(一)uboot 配置编译分析

u-boot源码是通过gcc和Makefile组织编译的,顶层目录下的Makefile可通过boards.cfg来设置开发板的定义
然后递归调用各级子目录下的Makefile,把编译过的程序连接成u-boot

boards.cfg文件:
开发板在Makefile下配置定义,例如:

TargetARCHCPUBoard name(开发版名)Vendor(厂商)SoC(具体系列)Options
tiny4412armarmv7tiny4412samsungexynos

make tiny4412_config 表示在当前目录下的Makefile查找一个tiny4412的目标文件来执行,在Makefile中没有tiny4412
但有%_config::unconfig %表示匹配模式,可以匹配任意字符

2. U-boot操作过程
  1. 将u-boot-1.3.4.tar.gz复制到Linux系统中,然后解压缩该u-boot后,打开u-boot文件夹后,点右键从终端打开。
  2. 在终端中 输入:make clobber (清工程文件,范围大一些,清除原来已经编译的文件)
                   make clean(清除文件)
                   make xyd2440_config(将xyd2440_config文件导入准备编译)
                   make all (编译)
  1. 然后可在文件夹中生成.bin的文件。
  2. 然后通过j-link将生成的.bin文件烧入NORFLASH中。J-LINK的用法详见附录3。
  3. 通过串口就可以看到u-boot运行的相关信息(在开始-附录-通信-超级终端中查看)。
(二) U-boot移植测试过程
  1. 在u-boot添加具体一个开发板,需要添加哪些文件?
    boards.cfg里面添加自己开发板的信息

     	myboard4412     arm    armv7   myboard4412    samsung     exynos
     	
        编译:  make myboard4412
        
        复制board/samsung/tiny4412/ 一份代码,修改名字为myboard4412
        
        cp board/samsung/tiny4412/ -r board/samsung/myboard4412  -rf
        
        复制include/configs/tiny4412.h 一份代码,修改名字为myboard4412.h
        cp include/configs/tiny4412.h  include/configs/myboard4412.h
    
  2. 编译

[root@localhost uboot_tiny4412]# make myboard4412_config
Configuring for myboard4412board...
[root@localhost uboot_tiny4412]# make -j8

提示错误:
arm-linux-ld: cannot find board/samsung/tiny4412/libtiny4412.o
make: *** [u-boot] 错误 1

错误说明:arm-linux-ld是编译器的链接工具,也是就是链接时候出错了,根据出错信息,是在寻找board/samsung/tiny4412/libtiny4412.o 文件时候出错了,仔细看一下发现,现在我们的板级文件是xyd4412 ,而不是tiny4412,但是,却去找这个文件,很明显,应答是在链接文件中指定需要这个文件。所以打开board/samsung/myboard4412/u-boot.lds文件,文件中有这样的条语句:

board/samsung/tiny4412/libtiny4412.o (.text)

这个语句正是出错提示的信息,很明显这个位置要做相应修改,修改如下:

board/samsung/xyd4412/libxyd4412.o (.text)

修改后保存,重新编译。
[root@localhost uboot_tiny4412]#make -j8

ers/watchdog/libwatchdog.o fs/cramfs/libcramfs.o fs/ext2/libext2fs.o fs/fat/libfat.o fs/fdos/libfdos.o fs/jffs2/libjffs2.o fs/reiserfs/libreiserfs.o fs/ubifs/libubifs.o fs/yaffs2/libyaffs2.o lib/libfdt/libfdt.o lib/libgeneric.o lib/lzma/liblzma.o lib/lzo/liblzo.o net/libnet.o post/libpost.o board/samsung/xyd4412/libxyd4412.o --end-group /media/sdb1/4412/u-boot/uboot_tiny4412/arch/arm/lib/eabi_compat.o -L /usr/local/arm/4.3.2/bin/…/lib/gcc/arm-none-linux-gnueabi/4.3.2 -lgcc -Map u-boot.map -o u-boot
arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
[root@localhost uboot_tiny4412]#
编译正确,会得到 u-boot.bin文件。

(三)U-boot启动:

程序入口是:arch/arm/cpu/armv7/start.S
由上面的代码跳转到C语言代码,C的入口:arch/arm/lib/board.c

1)从uboot源码顶层目录boards.cfg文件中找到tinny4412配置信息,利用这些信息生成文件
2)根据配置信息在include下创建指向具体架构arm的软件链接,arm芯片是指向arch/arm/include/asm/,
因为后面有文件包含#include<asm/config.h>,编译时找到对应架构
3、根据配置信息创建include/config.mk,这个文件被顶层Makefie包含,内容
ARCH=arm
CPU=armv7

4、在include创建config.h文件 查看内容
增添了一块开发板支持需要添加的文件(当前u-boot已经支持CPU)
boards 厂家名 开发板名
include/config 开发板名.h
以上步骤时候以一个最接近的板子为起点,移植到自己的开发板,开发平台对应的u-boot的第一步,如果自己板子和参考版的最小系统(DDR EMMC CPU )不一样,那就需要修改两个开发平台的硬件参数上的差异,具体的要求知道u-boot启动的流程,从上电执行了哪些文件的代码,然后执行代码,那些是和硬件参数有关,要求相应的修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值