在飞凌S5PV210开发板上移植U-Boot 的过程主要包括以下四个步骤:
1.下载U-Boot源码
2.修改相应的文件代码
3.编译U-Boot
4.烧写到开发板上,运行
U-Boot是universal bootloader,也就是通用的bootloader。它存在于nandflash或者SD卡中,它是在开机上点之后,操作系统起来之前用来引导的一个程序。U-boot 的主要作用是进行内存的初始化、CPU的初始化、串口初始化等一系列的初始化工作,完成这些之后,再将操作系统加载到内存中,从而运行起来。
U-Boot 源码文件下包括一些目录文件和文本文件,这些文件可分为”与平台相关的文件”和”与平台无关的文件”,其中common文件夹下的文件就是与平台无关的文件;与平台相关的文件又分为CPU级相关的文件和与板级相关的文件:arch目录下的文件就是与CPU级相关的文件,而board、drivers、include等文件夹下的文件都是与板级相关的文件。我们在移植的过程中,需要修改的文件也就是这些与平台相关的文件。
下面是移植2011.06版本到210处理器上时修改(或添加)的文件:
以下文件均为与CPU级相关的文件
uboot2011.06/arch/arm/cpu/armv7/start.s
uboot2011.06/arch/arm/cpu/armv7/Makefile
uboot2011.06/arch/arm/include/asm/arch-s5pc1xx/hardware.h
uboot2011.06/arch/arm/lib/board.c
uboot2011.06/arch/arm/lib/Makefile
uboot2011.06/arch/arm/config.mk
以下文件均为与板级相关的文件
uboot2011.06/board/samsung/OK210/tools/mkv210_image.c
uboot2011.06/board/samsung/OK210/lowlevel_init.S
uboot2011.06/board/samsung/OK210/mem_setup.S
uboot2011.06/board/samsung/OK210/OK210.c
uboot2011.06/board/samsung/OK210/OK210_val.h
uboot2011.06/board/samsung/OK210/mmc_boot.c
uboot2011.06/board/samsung/OK210/Makefile
uboot2011.06/drivers/mtd/nand/s5pc1xx_nand.c
uboot2011.06/drivers/mtd/nand/Makefile
uboot2011.06/include/configs/OK210.h
uboot2011.06/include/s5pc110.h
uboot2011.06/include/s5pc11x.h
uboot2011.06/spl/Makefile
uboot2011.06/boards.cfg
uboot2011.06/config.mk
uboot2011.06/Makefile
移植过程就是在新的U-Boot代码中增加与S5PV210开发板CPU级和Board级代码,使之能够在210开发板上面运行。
1.看一下源代码里面是否有CPU级相关代码,比如S5PV210是ARMV7架构,看一下CPU目录下面是否有ARMV7的目录,因为U-Boot已经是开发板里面应用很广泛的Bootloader了,所以基本上都已经有了CPU级相关代码。
2.下一步就是查看板级相关代码了。一款主流CPU发布的时候,厂商一般都会提供官方开发板,比如S5PV210发布的时候三星公司提供了官方开发板,使用的U-Boot是1.3.4版本,三星在U-Boot官方提供的1.3.4基础上面进行了改进,比如增加SD卡启动和NandFlash启动相关代码 等等。在移植新版本的U-Boot到开发板的时候,我们需要看一下U-Boot代码里面是否已经含有了板级代码,如果已经有了,就不需要自己改动了,编译以后就可以使用,而有的时候在较新的U-Boot代码里面,是不含有这些板级支持包的,这个时候就需要增加自己的板级包了。
3.板级包的增加需要参考CPU官方提供的U-Boot代码,因为我们移植的是最小功能的U-Boot,让U-Boot能够运行起来即可,所以只需要抓最关键的代码,比如系统时钟的配置,DDR2内存的初始化代码,调试串口的初始化等,这些代码是需要参考U-Boot1.3.4的,不需要我们自己去写每一行,但是需要我们知道U-Boot 能够在S5PV210上面运行起来,必须做的工作。