您的位置:首页 > 其它

u-boot-1.1.4移植的几个错误解决方法(转载)

2010-09-17 15:32 344 查看
先到u-boot的官方网站http://sourceforge.net/projects/u-boot去下载源代码。我用的是u-boot-1.1.4版本。在u-boot中B2板就是S3C44B0的CPU,所以就对B2板进行修改,不必重新做起。其实修改的地方也不多。主要修改处:
1、 修改u-boot/ include/configs/B2.h文件,B2.h文件是u-boot的配置文件,主要修改
1、#define CONFIG_S3C44B0_CLOCK_SPEED 60 (改成自己的主频)
2、除去
/*#define CONFIG_DRIVER_LAN91C96 */
/*#define CONFIG_LAN91C96_BASE 0x04000300 *//* base address
的定义,增加
#define CONFIG_DRIVER_RTL8019
#define RTL8019_BASE 0x06000000 /* net base address */
定义,因为我是用RTL8019的网络芯片,地址为0x06000000
3、#define CONFIG_BAUDRATE 115200 (改成自己的波特率)
4、#define CONFIG_BOOTARGS "root=/dev/ram0 console=ttyS0,115200" (启动参数,其他在最面的系统运行中,没有这些参数也没问题的)
5、增加
#define CFG_ENV_IS_IN_FLASH 1 /* use EEPROM for environment vars */
#undef CFG_ENV_IS_IN_NOWHERE
#define CFG_ENV_ADDR (PHYS_FLASH_1+0x20000)
#define CFG_ENV_SECT_SIZE 0x10000
把环境变量放在flash中,注译掉I2C EEPROM (STM24C02W6) for environment部分。
以上是B2.h重点要修改的地方,还有一些要改的,根据情况修改。
2、 修改u-boot/cpu/s3c44b0/start.S文件。start.S是cpu运行的第一个文件。
1、 注掉
add pc, pc, #0x0c000000
add pc, pc, #0x0c000000
add pc, pc, #0x0c000000
add pc, pc, #0x0c000000
add pc, pc, #0x0c000000
add pc, pc, #0x0c000000
add pc, pc, #0x0c000000
增加

ldr pc,Undefined_Addr
ldr pc,SWI_Addr
ldr pc,Prefetch_Addr
ldr pc,Abort_Addr
ldr pc,RESERVE_Addr
ldr pc,IRQ_Addr
ldr pc,FIQ_Addr
同时也要在start.S中定义这些符号,如:
Undefined_Addr:
.word 0x0c000004
SWI_Addr:
.word 0x0c000008
Prefetch_Addr:
.word 0x0c00000c
Abort_Addr:
.word 0x0c000010
RESERVE_Addr:
.word 0x0c000014
IRQ_Addr:
.word 0x0c000018
FIQ_Addr:
.word 0x0c00001c
如果不这样做,运行时会出现问题。
2、修改CPU_init_critical registers部分。看其体情况修改初始化寄存器。
经过这步后u-boot可以运行了。但是无法识出我的SST39VF1601,这个折腾我好几天呢。所以要对flash方面的修改。主要是修改u-boot/board/dave/common/flash.c文件,在345行中增加
case (CFG_FLASH_WORD_SIZE)SST_ID_xF1601:
346 info->flash_id += FLASH_SST1601;
347 info->sector_count = 512;
348 info->size = 0x00200000;
349 break;
因为在value = addr2[CFG_FLASH_READ1];读取flash的ID,u-boot没有识出我的flash就是没有对39VF1601的定义。在154行也增加
154 case FLASH_SST1601: printf ("SST39VF1601 (16Mbit,uniform sec tor size)/n");
这样就基本完成u-boot的移植工作了,最后
cd u-boot
vi Makefile //修改编译环境,把arm-linux-改为arm-elf-
make B2_config
make
就OK了。如果是在FC6中编译的话,还要注意两个编译上的问题。
第一,出现:
isystem /usr/local/arm/bin/../lib/gcc-lib/arm-linux/3.2/include -pipe -DCONFIG_ARM -D__ARM__ -march=armv4 -mtune=arm7tdmi -msoft-float -mabi=apcs-gnu -Uarm -Wall -Wstrict-prototypes -c -o hello_world.o hello_world.c
cc1: invalid option `abi=apcs-gnu'
修改:
出错的文件是/cpu/s3c44b0/下的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 `/home/mort/src/targa/u-boot/u-boot-TOT/examples'
make: *** [examples] Error 2

解决方法:
打开 vi examples/Makefile

119 $(LIB): .depend $(LIBOBJS)
120 $(AR) crv $@ $(LIBOBJS)
121
122 %: %.o $(LIB)
123 $(LD) -g $(EX_LDFLAGS) -Ttext $(LOAD_ADDR) /
124 -o $@ -e $(<:.o=) $< $(LIB) /
125 -L$(gcclibdir) -lgcc
126 %.srec: %
127 $(OBJCOPY) -O srec $< $@ 2>/dev/null
128
129 %.bin: %
130 $(OBJCOPY) -O binary $< $@ 2>/dev/null

把126行和129行改为:
%.srec: %.o
%.bin: %.o

以上是u-boot的移植注意事项。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: