uboot移植记录之一
23小时前一,移植可以从Nor flash启动的uboot
这个阶段是移植一个最简单的uboot,可以烧在Nor flash内运行.
二,移植支持Nand flash驱动的uboot
加入Nand flash驱动的支持,可以在uboot命令行下操作Nand flash.但还未能从Nand flash启动,只能在Nor flash内运行.
三,移植可以从Nor flash启动的uboot
可以烧录在Nand flash,并设置从Nand flash启动运行uboot.
1.编译uboot1.1.4
#make smdk2410_config |
注:编译针对arm的平台时,uboot默认使用arm-linux-gcc编译,若交叉编译器名字不一样,需要自行在Makefile里修改。
cc1: Invalid option `abi=apcs-gnu'
make[1]: *** [hello_world.o] Error 1
make[1]: Leaving directory `/root/u-boot-1.1.4/examples'
make: *** [examples] Error 2
解决办法:
出错的文件是/cpu/arm920t/下的config.mk:
将
PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改成:
PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))
make[1]: *** No rule to make target `hello_world.srec', needed by `all'. Stop.
make[1]: Leaving directory `/work/src/u-boot-1.1.4/examples'
解决方法:
打开 examples/Makefile
把example文件夹下的Makefile中的
第126行
%.srec: % 改成 %.srec: %.o
第129行的
%.bin: % 改成 %.bin: %.o
注意: 默认u-boot的smdk2410_config是不支持nandflash的,只能在nor flash内运行,所以只能烧录到nor flash内运行。如果烧录到nandflash下是不能运行的。
启动信息如下:
U-Boot 1.1.4 (Dec 30 2007 - 23:25:02) |
1) 启动时开发板蜂鸣器一直在响。
怀疑是我的开发板蜂鸣器对应的GPIO口和smdk2410的GPIO口地址不对应,从而导致启动时误赋了值,一直在响。
2) Warning - bad CRC, using default environment
这个问题是因为第一次使用uboot时没有设置过变量,设置保存一下就不会在出现了。
3) Flash: 512 kB
我的板子Nor flash是1MB的,而这里显示512KB
这里主要根据开发板硬件的实际情况,基于smdk2410的源码进行修改(主要是配置文件include/configs/smdk2410.h),并解决如上碰到的问题1和3。
首先修改include/configs/smdk2410.h。里面包含了很多对目标板设置的宏。
#define CONFIG_BOOTDELAY 3
|
将
#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
#if 0
#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
#endif
改为:
#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
#if 0
#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
#endif
注意如下两个地方:
#ifdef CONFIG_AMD_LV800
#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
这里解决了u-boot启动时的问题3即Nor Flash大小为512 kB ,是因为没有选择正确的Nor flash型号。
#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
宏CFG_ENV_ADDR定义了存放uboot变量的地址,换算一下为1MB-64KB=960KB地方,而实际uboot编译出来的大小仅为120KB左右,由此可以得出,即使从新烧录了新编译的uboot到Nor flash内,也不会影响先前设定使用的uboot变量。
#endif
查看ARMSYS2410-B底板电路图,在Reset Singal模块里可以看到蜂鸣器(BUZZER)控制口连接到TOUT1引脚,并且低电平响。如下:
修改smdk2410.c
#vi board/smdk2410/smdk2410.c
找到board_init()函数
在gpio->GPBUP = 0x000007FF;下面
添加如下内容:
/*******stop beep******/ |
#make clean
#make ARCH=arm
启动信息:
U-Boot 1.1.4 (Jan 3 2008 - 23:11:07)
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 1 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
ARMSYS2410 #
|