作为U-boot的鼻祖-ARMboot以其小巧玲珑(代码压缩包仅有400K多),但又麻雀虽小,五脏俱全,不失为研究U-boot的第一步,而且在ARMboot中处处还能看到U-boot的影子。好啦,开始我们的移植之旅吧。
armboot-1.1.0已经支持smdk2410开发板,该开发板和mini2440有一定的相似性,我们在
在SMDK2410开发板的基础上进行移植。
其中的armboot.bin即为最终的可以烧写到NandFlash的文件,由于代码还需修改,现在这个文件还不能适应mini2440的开发板环境,
上面的过程只是验证了smdk2410的配置即程序文件可以在arm-linux-gcc 2.95.3顺利编译通过,我们还需对代码做进一步的修改使得
其可以运行在到MINI2440上。
具体修改的位置为:
改
99 #define CFG_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
为:
99 //#define CFG_PROMPT "SMDK2410 # " /* Monitor Command Prompt */ // snallie, 2011-05-24_090111_Tue
100 #define CFG_PROMPT "ARMboot@MINI2440 # " /* Monitor Command Prompt */ // snallie, 2011-05-24_090111_Tue
3) 修改mini2440的板级的Makefile,文件位置在 board/mini2440/Makefile
改
28 OBJS := smdk2410.o flash.o env.o
为:
28 # OBJS := smdk2410.o flash.o env.o # snallie, 2011-05-24_091150_Tue
29 OBJS := mini2440.o flash.o env.o # snallie, 2011-05-24_091150_Tue
5) 修改顶层的Makefile:找到smdk2410_config,仿照smdk2410_config,添加mini2440_config,如下:
200 smdk2410_config : unconfig
201 @echo "Configuring for $(@:_config=) Board..." ; \
202 cd include ; \
203 echo "ARCH = arm" > config.mk ; \
204 echo "BOARD = smdk2410" >>config.mk ; \
205 echo "CPU = arm920t" >>config.mk ; \
206 echo "#include
207
208 # snallie, 2011-05-24_091758_Tue
209 mini2440_config : unconfig
210 @echo "Configuring for $(@:_config=) Board..." ; \
211 cd include ; \
212 echo "ARCH = arm" > config.mk ; \
213 echo "BOARD = mini2440" >>config.mk ; \
214 echo "CPU = arm920t" >>config.mk ; \
215 echo "#include
216
注意:用vi手工修改时候,Makefile中的新添的210~215行的行首为制表符(TAB键),而不是空格,若输入的是空格,则编译出错
6) 程序的版本号有误,修改:include/version.h
改:
28 #define ARMBOOT_VERSION "ARMboot 1.0.2"
为:
28 //#define ARMBOOT_VERSION "ARMboot 1.0.2"
29 #define ARMBOOT_VERSION "ARMboot 1.1.0" // snallie, 2011-05-24_093229_Tue
通过编译!
*************************************************************************************************************************************************
** 进一步的移植,完成目标中的全部工作:驱动串口;驱动网络芯片dm9000;实现内核的下载(uImage);实现启动 Linux kernel(zImage),实现Nand Flash启动
*************************************************************************************************************************************************
mini2440板配置初步完成,下面进行具体的移植工作 由于SMDK2410 的代码和MINI2440板子略有出入,SMDK2410代码认为程序是直接在NOR或RAM中运行,
而我们的代码最终是烧写到NandFlash中的,可NandFlash不具有片上执行代码的能力,所以程序启动的第一步就是要将整个的程序从NandFlash中搬移到RAM中,
即TEXT_BASE(配置在board/mini2440/config.mk文件中)的起始地址上去。另外SAMSUNG的S3C2440的处理器在系统启动时候会自动将NandFlash的前4K的代码
移动到内部的4K大小的称为Steppingstone的SRAM中运行,所以搬移用的代码必须放到程序映像的头部的4K的范围内,否则不能正常启动。综上所述,对SMDK2410
代码的改造主要为:实现代码的搬移工作,并将搬移用的代码放到程序映像的头部的4K的范围内;而后要驱动串口,这样我们才能获取到程序的运行时的输出状态
信息,串口驱动不起来等于是瞎子一样,所以串口驱动很重要,有了串口还可通过串口下载小体积的代码;在这之后再驱动网络芯片,实现网络下载代码,启动内核等等。
查看SMDK2410的代码,知道和CPU相关的代码通过在include/configs/config_smdk2410.h的宏定义CONFIG_S3C2410进行控制,和开发板SMDK2410相关的代码通过
在include/configs/config_smdk2410.h的宏定义CONFIG_SMDK2410进行控制,如下所示:
#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC