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的移植注意事項。

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