【嵌入式】FS2410移植U-Boot-1.1.6

移植环境

   硬件平台:FS2410

   U-Boot版本:u-boot-1.1.6

   编译器:arm-linux-gcc version 3.4.1


U-Boot主要目录结构


   U-Boot的 stage1代码通常放在 cpu/……/start.S文件中,它用汇编语言写成;

   U-Boot的 stage2代码通常放在 lib/……/board.c文件中,它用 C语言写成。

 


步骤

   1、下载并解压U-Boot源码

tar xvf u-boot-1.1.6.tar.bz2

   2、编译开发板项目

   目前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里面的-msoft-float参数,但是在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.Slib_arm/_udivsi3.S
bl __div0 (PLT) 改为 bl __div0

   然后再进行编译

OK,成功!

 

本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1223166

原文地址:https://www.cnblogs.com/lcw/p/3159375.html