移植環境
linux
硬件平臺:FS2410
ios
U-Boot版本:u-boot-1.1.6bash
編譯器:arm-linux-gcc version 3.4.1ide
U-Boot主要目錄結構
post
U-Boot的 stage1代碼一般放在 cpu/……/start.S文件中,它用匯編語言寫成;spa
U-Boot的 stage2代碼一般放在 lib/……/board.c文件中,它用 C語言寫成。3d
步驟blog
一、下載並解壓U-Boot源碼ip
tar xvf u-boot-1.1.6.tar.bz2
二、編譯開發板項目
ci
目前U-Boot對不少CPU直接支持,能夠查看 board目錄的一些子目錄
mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6/board$ ls a3000 cu824 icecube mpc8266ads pn62 snmc adder dave icu862 mpc8349emds ppmc7xx sorcery adsvix dbau1x00 ids8247 mpc8540ads ppmc8260 spc1920 alaska delta impa7 mpc8540eval prodrive spd8xx altera dnp1110 incaip mpc8560ads psyent ssv amcc eltec inka4x0 mpc8641hpcn purple stamp amirix emk innokom mpl pxa255_idp stxgp3 armadillo ep7312 integratorap musenki quantum stxxtc assabet ep8248 integratorcp mvblue r360mpi svm_sc8xx at91rm9200dk ep8260 ip860 mvs1 r5200 sx1 atc ep82xxm iphase4539 mx1ads rattler tb0229 AtmarkTechno ep88x ispan mx1fs2 rbc823 total5200 atmel eric ivm nc650 rmu tqm5200 barco esd ixdp425 netphone RPXClassic tqm8260 bc3450 esteem192e jse netstar RPXlite tqm834x bmw etin kb9202 netta RPXlite_dw tqm85xx BuS etx094 kup netta2 rpxsuper tqm8xx c2mon evb4510 lantec netvia RRvision trab canmb evb64260 lart ns9750dev rsdproto uc100 cds eXalion LEOX nx823 sacsng utx8245 cerf250 exbitgen logodl o2dnt sandburst v37 cm4008 ezkit533 lpd7a40x omap1510inn sandpoint v38b cm41xx fads lubbock omap1610inn sbc2410x versatile cmc_pu2 flagadm lwmon omap2420h4 sbc405 voiceblue cmi funkwerk m5271evb omap5912osk sbc8240 w7o cobra5272 g2000 m5272c3 omap730p2 sbc8260 wepep250 cogent gcplus m5282evb oxc sbc8560 westel cpc45 gen860t MAI pb1x00 sc520_cdp xaeniax cpu86 genietv Marvell pcippc2 sc520_spunk xilinx cpu87 gth mbx8xx pcs440ep scb9328 xm250 cradle gth2 mcc200 pleb2 shannon xpedite1k cray gw8260 ml2 pm520 siemens xsengine csb226 hermes modnet50 pm826 sixnet zpc1900 csb272 hidden_dragon mousse pm828 sl8245 zylonite csb472 hmi1001 mp2usb pm854 smdk2400 csb637 hymod mpc8260ads pm856 smdk2410
在最下面能夠看到已經有 smdk2410目錄了,看看目錄下面有什麼東西
mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6/board/smdk2410$ ls config.mk flash.c lowlevel_init.S Makefile smdk2410.c u-boot.lds mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6/board/smdk2410$
OK,都是編譯要用到的源文件,如今回到 U-Boot根目錄
mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6/board/smdk2410$ cd ../.. mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6$ ls arm_config.mk fs MAKEALL avr32_config.mk i386_config.mk Makefile blackfin_config.mk include microblaze_config.mk board lib_arm mips_config.mk CHANGELOG lib_avr32 mkconfig CHANGELOG-before-U-Boot-1.1.5 lib_blackfin nand_spl common lib_generic net config.mk lib_i386 nios2_config.mk COPYING lib_m68k nios_config.mk cpu lib_microblaze post CREDITS lib_mips ppc_config.mk disk lib_nios README doc lib_nios2 rtc drivers lib_ppc rules.mk dtt m68k_config.mk tools examples MAINTAINERS mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6$
查看 U-Boot根目錄下的Makefile
咱們的目標平臺是三星的2410,因此找到裏面的 smdk2410_config
這就是默認的配置選項了,因爲 U-Boot裏面已經給2410配置好了,因此這裏直接編譯項目
mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6$ make smdk2410_config Configuring for smdk2410 board... mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6$
OK,出現Configuring for smdk2410 board...,就說明項目編譯成功了
下面編譯 U-Boot.bin文件
mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6$make
看着滿屏幕的命令不停的閃,總以爲會出問題,果真
而後百度,說是 gcc庫使用是硬浮點,而 uboot指定了使用軟浮點,可是都未提供解決辦法,只提到註釋掉 Makefile裏面的
可是我在另一個文件中找到了這個參數
mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6$ cd cpu/arm920t/ mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6/cpu/arm920t$ ls at91rm9200 cpu.c imx interrupts.o libarm920t.a s3c24x0 start.S config.mk cpu.o interrupts.c ks8695 Makefile start.o mystery@lcw:~/Desktop/transplant/u-boot/u-boot-1.1.6/cpu/arm920t$ more config.mk
看看這個 config.mk 文件
我把其中的 -msoft-float刪除了,可是仍是編譯到這裏就出錯了,囧……
而後我又換了u-boot-2009.08.tar.bz2,可是編譯到這裏時仍然是這個錯誤……
因此,改這個是不對滴!
解決方案
咱們須要修改兩個文件:lib_arm/_umodsi3.S、lib_arm/_udivsi3.S
bl __div0 (PLT) 改成 bl __div0
而後再進行編譯
OK,成功!