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

先到u-boot的官方网站http://sourceforge.net/projects/u-boot去下载源代码。我用的是u-boot-1.1.4版本。在u-bootB2板就是S3C44B0CPU,所以就对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.Scpu运行的第一个文件。

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];读取flashIDu-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的移植注意事项。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章