3、创建目标板文件和makefile控制项
U-Boot本身支持很多开发板,在其源代码中,每个板子都对应一个board/目录下的文件夹,以及include/configs/目录下的目标板配置头文件。因此,要添加U-Boot对我们的目标板的支持,首先就是要建立目标板文件夹和配置头文件,并修改相关的Makefile。
目标板命名:spear310_rc。
以ST的spear310板为模板,在/board/spear/spear310目录下,spr310_board.c和对应的spear310.h(/include/configs/spear310.h定义了板上的硬件选择,以及大量的参数配置)。
复制/spear310文件夹为/spear310_rc文件夹作为目标板的文件夹,同样在/include/configs/复制spear310.h为spear310_rc.h作为目标板的配置文件。此文件须要精读,可对照着VxWorks 的BSP看懂这些宏定义。
根据目标板硬件运用和需要加载镜像类型修改spear310_rc.h,修改u-boot目标板版本信息,在u-boot根目录下的makefile中添加spear310_rc的编译连接控制项。
spear310_rc.h参数配置
使能加载VxWork.elf命令 #defineCONFIG_CMD_ELF
DDR RAM参数配置:
#define CONFIG_NR_DRAM_BANKS 1 /*we have 2 Chip select */
#define PHYS_SDRAM_1 0x00000000 /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB */
SNOR Flash ROM参数配置:
#define CFG_MAX_FLASH_BANKS 2 /* max number of memory banks */
#define CFG_FLASH_BASE (0xF8000000)
#define CFG_FLASH_ADDR_BASE {0xF8000000,0xF9000000}
#define CFG_MAX_FLASH_SECT 128 /* Size in KBytes */
#define PHYS_FLASH_SIZE 0x04000000 /* 32Mb minimum */
#define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */
#define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */
配置文件及参数:
/* U-Boot code length */
#define CFG_MONITOR_LEN 0x00040000 /* Upto sector-3 */
#define CFG_MONITOR_BASE CFG_FLASH_BASE
#define CFG_ENV_SIZE 0x00002000 /* 8 kB */
/* Environemnt variables will be saved to sector-3. Start address =0xF804_0000 */
#define CFG_ENV_ADDR (CFG_MONITOR_BASE+ CFG_MONITOR_LEN)
#define CFG_ENV_SECT_SIZE 0x00010000 /* 64KB */
#define CONFIG_BOOTARGS "console=ttyS0mem=128Mroot=/dev/mtdblock8 rootfstype=jffs2"
#define CONFIG_BOOTCOMMAND "cp.b0xf8310000 0x00800000 2d0000; bootm 0xf8050000" /* how will these change?*/
CPU核信息 #define CONFIG_IDENT_STRING _ARM926
配置u-boot RAM加载地址
/spear310_rc目录下config.mk文件中 TEXT_BASE = 0x01000000
根目录下Makefile文件修改
版本信息 EXTRAVERSION = "_RC.v10"
添加spear310_rc的编译连接控制项
spear300_config : unconfig
@$(MKCONFIG)$(@:_config=) arm arm926ejs spear300 spear spear
spear310_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm926ejs spear310 spear spear
spear320_config : unconfig
@$(MKCONFIG) $(@:_config=) armarm926ejs spear320 spear spear
spear600_config : unconfig
@$(MKCONFIG) $(@:_config=) armarm926ejs spear600 spear spear
spear310_rc_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm926ejs spear310_rc spear spear
4、相关文件
外围驱动:略;
u-boot入口:
/cpu/arm926ejs/start.S
/lib_arm/board.c voidstart_armboot (void)
Image文件头结构定义:
/include/image.h
环境变量:
/common/environment.c
/include/environment.h
全局变量:
/include/asm-arm/global_data.h
5、编译链接
Make命令:
# make mrproper; make spear310_rc_config;make
成功编译连接后部分打印信息:
-Map u-boot.map -o u-boot
arm-linux-objcopy--gap-fill=0xff -O srec u-boot u-boot.srec
arm-linux-objcopy--gap-fill=0xff -O binary u-boot u-boot.bin
./tools/mkimage -A arm -Tfirmware -C none \
-a 0x01000000 -e 0 \
-n "U-Boot 1.3.1_RC.v10for spear310_rc board" \
-d u-boot.bin u-boot.img
Image Name: U-Boot 1.3.1_RC.v10for spear310
Created: Fri Nov 19 16:59:56 2010
Image Type: ARM Linux Firmware (uncompressed)
Data Size: 167968 Bytes = 164.03 kB = 0.16 MB
Load Address: 0x01000000
Entry Point: 0x00000000
镜像文件头分析:
[root@localhost st-uboot-rc]#readelf -h u-boot
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement,little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executablefile)
Machine: ARM
Version: 0x1
Entry point address: 0x1000000
Start of program headers: 52 (bytes into file)
Start of section headers: 593316 (bytes into file)
Flags: 0x4000002, hasentry point, Version4 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 1
Size of section headers: 40 (bytes)
Number of section headers: 21
Section header string table index: 18
OK,搞定啦!