u-boot編譯筆記

來源:互聯網
上載者:User

比較多的arm-linux-gcc版本包有:
arm-linux-gcc-2.95.3.tgz
arm-linux-gcc-3.3.2.tar.bz2
arm-linux-gcc-3.4.1.tar.bz2
這幾個包在網上都比較容易下載到,由於在3.4.1版本中使用的是硬浮點,對

於u-boot使用軟浮點來說不適合。可以使用較低版本來編譯u-boot。我使用的

是arm-linux-gcc-3.3.2.tar.bz2。
我使用的是debian5.0

錯誤記錄:
1.使用arm-linux-gcc-3.4.1軟浮點報錯:
lib_arm/libarm.a(_udivsi3.o)(.text+0x8c):/home/qsg/u-boot-

1.2.0/lib_arm/_udivsi3.S:67: relocation truncated to fit:

R_ARM_PLT32 __div0
    lib_arm/libarm.a(_umodsi3.o)(.text+0xa8):/home/qsg/u-boot-

1.2.0/lib_arm/_umodsi3.S:79: relocation truncated to fit:

R_ARM_PLT32 __div0

{  
  這是因為你用的編譯的版本不一致,
  你的uboot裡面指定了 -msoft-float 編譯選項, 是軟浮點的,
  但是你串連的gcc庫是用的硬浮點的,
  解決辦法   
  1, 把uboot裡面的Makefile裡面的 “-msoft-float”去掉;
  或者
  2,換一個soft float軟浮點的 工具鏈;
  I know there is a link error happened when the arm-linux ld want

to link two different types of libs.  
  編譯使用的是arm-linux-gcc-3.4.1.tar.bz2,可能由於glibc使用

Hardware FP,而U-boot使用的是
  Software FP,所以無法正確連結,可能要將glibc用Software FP的方法

重新編譯,怎樣重新編譯呢?   
  有人建議編譯u-boot的時候用2.95.3 編譯核心時用3.4.1
  在網上找google 了一會,發現什麼patch to fix the problem,可惜看

不懂這個補丁。
  無奈之下只好grep R_ARM_PLT32 -r u-boot根目錄,就是找不到哪個檔案

裡有這個參數。
}

別人出現過的錯誤以及修改方法:
錯誤二:
make[1]: *** 沒有規則可以建立“libmy2410.a”需要的目標“smdk2410.o”

。 停止。
make[1]: Leaving directory `/home/tom/u-boot-1.1.4/board/my2410'
make: *** [board/my2410/libmy2410.a] 錯誤 2
解決方案:
修改board/my2410/Makefile
將28行的
OBJS    := smdk2410.o flash.o
改為
OBJS    := my2410.o flash.o

錯誤三:
    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/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),)

錯誤四:
把編譯好的uboot燒進nand flash不能運行,什麼反應都沒有,
看來還是要從代碼改起
原來是沒有加nand flash的驅動,燒進nand flash不能運行,
燒進nor flash 可以運行了,不過命令提示字元是
smdk2410,看看在哪兒可以改為自己定義的

Bug 1
cc1: error: invalid option `abi=apcs-gnu'
------------------------------------------------------------------
    1)改用GCC為arm-linux-gcc-3.4.1.tar.bz2即可. 或者:
    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),)

Bug 2
make[1]: *** 沒有規則可以建立“all”需要的目標“hello_world.srec”。

停止。
------------------------------------------------------------------
    make[1]: Leaving directory `/home/a-ki/at91rm9200/u-boot-

1.1.4/examples'
    make: *** [examples] 錯誤 2

    在網上查了查,有人說是make 3.81的一個BUG!
    http://blackfin.uclinux.org/gf/project/u-boot/tracker/?action

=TrackerItemEdit&tracker_item_id=1324
    可以簡單的改一個目錄examples下的Makefile來解決:
    vi examples/Makefile
    #SREC   = hello_world.srec
    #BIN    = hello_world.bin hello_world
    SREC    = hello_world.o
    BIN     = hello_world.o hello_world

===========================================================
下載了uboot的目錄結構如下所示
目錄                  內容
      
Board             和一些已有開發板有關的檔案. 每一個開發板都以一個子

目錄出現在當前目
                      錄中,比如說:SMDK2410,子目錄中存放與開發板相關

的設定檔.
Common          實現uboot命令列下支援的命令,每一條命令都對應一個文

件。例如go命令對
                      應就是cmd_boot.c
Cpu               與特定CPU架構相關目錄,   每一款uboot下支援的CPU在

該目錄下對應一個子 目錄,比如有子目錄arm920t等。
Disk              對磁碟的支援
Doc               文檔目錄。uboot有非常完善的文檔,推薦大家參考閱讀。
drivers           uboot支援的裝置驅動程式都放在該目錄,比如各種網卡、

支援CFI的Flash、串口和USB等。       
Fs       支援的檔案系統,uboot現在支援cramfs、fat、fdos、jffs2和

registerfs。
         uboot使用的標頭檔,還有對各種硬體平台支援的彙編檔案,系統的配

置檔案
         和對檔案系統支援的檔案。     該目錄下configs目錄有與開發板

相關的配置頭文
include
         件,如smdk2410.h。該目錄下的asm目錄有與CPU體繫結構相關的頭文

件,asm
         對應的是asmarm.
lib_xxxx 與體繫結構相關的庫檔案。如與ARM相關的庫放在lib_arm中。
Net      與網路通訊協定棧相關的代碼,BOOTP協議、TFTP協議、RARP協議和NFS文

件系統
的實現。
        
Tools    Uboot的工具,如:mkimage, crc等等。

===========================================================
編譯記錄:
1.u-boot官方網下載:
http://www.icdev.com.cn/batch.viewlink.php?itemid=1694

2.現在我們要自己在uboot的目錄裡加一點自己的東西好定製自己的板子)'_'


先給我們的板子取一個名字,就叫my2410吧,修改主的makefile,加上自己的

配置,可以參照arm已知的配置
my2410_config    :    unconfig
    @./mkconfig $(@:_config=) arm arm920t my2410 NULL s3c24x0
各項的意思如下:
arm:CPU的構架(ARCH)
arm920t:CPU的類型(CPU),對應於cpu/arm920t子目錄
my2410:開發板的型號(BOARD),對應一會兒要建立的board/my2410 目錄
NULL:開發人員或經銷商(vender)
s3c24x0:片上系統(SOC)

3.現在在board目錄下建立自己的板子目錄
tom@tom-ubuntu:~/u-boot$mkdir board/my2410
tom@tom-ubuntu:~/u-boot$ cp board/smdk2410/* board/my2410/     ##直

接拿過來用^_~
tom@tom-ubuntu:~/u-boot$ cd board/my2410
tom@tom-ubuntu:~/u-boot/board/my2410$ mv smdk2410.c my2410.c ##名字

也改一下,不然通不過編譯

4.在my2410的目錄下有一個Makefile檔案,有一句修改為:
COBJS := my2410.o flash.o

5.在include/configs/中建立配置標頭檔:
tom@tom-ubuntu:~/u-boot$ cp include/configs/smdk2410.h

include/configs/my2410.h

6.編譯之前,先
tom@tom-ubuntu:~/u-boot$ make distclean #做一下清除工作,主要是刪除

一些連結檔案

7.如果前面被編譯過請執行
make clean

8.配置編譯環境
tom@tom-ubuntu:~/u-boot$ make my2410_config ##這個my2410_config就是

我們自己加到makefile中去的^__^
這時應該出現
Configuring for my2410 board...
表明沒問題

9.編譯
tom@tom-ubuntu:~/u-boot$ make CROSS_COMPILE=arm-linux-
不出意外的話,應該編譯通過了

編譯完成後,可以得到u-boot各種格式的映像檔案和符號表
    # ls -lh u-boot*
    u-boot.bin    118K    u-boot映像原始的二進位格式
    u-boot        448K    u-boot映像的ELF格式
    u-boot.srec   354K    u-boot映像的S-Record格式
    u-boot.map    52K     u-boot映像的符號表

    u-boot的3種映像格式都可以燒寫到Flash中,但需要看載入器能否識別這

些格式。一般u-boot.bin最為常用,直接按照二進位格式下載,並且按照絕對

地址燒寫到Flash中就可以了。u-boot和u-boot.srec格式映像都內建定位資訊

10.編譯好後,推薦使用H-jtag燒寫。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.