u-boot编译笔记

比较多的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烧写。

 

 

### 回答1: zynq-linux移植学习笔记应包含以下内容: 1. 对zynq架构和硬件资源的理解,包括PS和PL部分的特点。 2. 如何使用Xilinx SDK来编译和配置u-boot和Linux内核。 3. 如何在硬件平台上运行和调试Linux系统。 4. 怎样在Linux系统中配置和使用各种硬件资源,如DMA、Ethernet、Flash等。 5. 如何在Linux系统中移植和运行应用程序,并与硬件资源进行交互。 6. 如何进行系统优化和资源管理,以提高系统性能和稳定性。 ### 回答2: Zynq是一款Xilinx公司开发的一种嵌入式系统芯片,其使用了双核Cortex-A9处理器和可编程逻辑器件(FPGA)的组合。移植Linux到Zynq芯片中,可以使其具备无限的扩展能力,极大地拓展了其应用领域,因此掌握Zynq-Linux移植技术是非常重要的。 Zynq-Linux移植分为四个主要步骤: 第一,准备工作 在移植前,需要确认硬件平台是否支持Linux运行,并且需要对硬件进行配置,最好使用Zynq开发板的官方配置; 第二,内核移植 内核移植是整个移植过程中最关键的一步。需要根据硬件平台的特性对内核进行选择和配置。可以从内核源代码库中获取内核代码,然后进行交叉编译。移植内核的过程中需要注意内核配置参数的设置,同时也要确保内核模块和驱动程序的编写。 第三,文件系统移植 在移植Linux的过程中,文件系统也是非常重要的。可以使用开发板官方Linux镜像,也可以自己编译镜像。移植文件系统还涉及到root文件系统的配置、挂载方式、网络配置和各种服务的配置等问题。 第四,驱动移植 驱动程序是连接硬件和软件的关键部分,需编写相应的驱动程序来实现对硬件的控制。移植驱动程序的过程中需要关注各种硬件接口和设备驱动API的使用,确保驱动程序与硬件配合良好。 总结来说,Zynq-Linux移植技术的掌握需要具备较强的Linux基础知识、驱动开发经验和交叉编译工具链的使用能力。同时,还需要有耐心和细心,对每个步骤进行仔细的分析和处理。 在学习中,需要结合实际开发项目,多进行实践操作才能更好地掌握Zynq-Linux移植技术,为后续项目的开发和应用提供更好的支持。 ### 回答3: Zynq-7000系列是一种由Xilinx开发的SoC(系统级芯片),它将双ARM Cortex-A9处理器和可编程逻辑(FPGA)集成在一起。这使得开发人员可以使用硬件加速加速器来加速运行在Linux上的各种应用。然而,实现这个目标需要进行移植。 在开始Zynq Linux移植学习笔记之前,需要一些基本的知识。首先,需要了解Linux内核的基本工作原理和Linux驱动程序的编写技术。然后,需要了解FPGA和SoC体系结构。 在开始移植之前,需要为SoC开发板选择正确的Linux发行版。这通常需要考虑处理器体系结构,内存大小和设备驱动程序的可用性。另外,还需要考虑是否需要自定义内核或驱动程序以满足应用程序的需求。 接下来,需要编写设备树文件(DT)来描述SoC架构。设备树文件是一种描述硬件配置信息的特殊语言。它会告诉内核有哪些设备可用以及如何访问这些设备。 接下来,需要配置Linux内核以支持Zynq-7000处理器。这可能包括启用适当的内核配置选项,编写设备驱动程序以及配置启动过程。 最后,需要启动Zynq板并验证Linux系统稳定运行。这些步骤包括在启动过程中将设备树文件加载到内存中,以及启动用户空间应用程序。 总之,移植Zynq Linux是一项复杂的任务,需要广泛的专业知识和技术。但是,它可以为开发人员提供强大的硬件加速支持,使他们能够加速处理一系列计算密集型应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值