U-BOOT分析之编译初体验

来源:互联网 发布:java 并发和线程 编辑:程序博客网 时间:2024/06/05 08:58

嵌入式系统:uboot->kernel->挂接根文件系统->应用程序

1.u-boot打补丁,编译,结合Makefile进行分析

a.解压缩u-boot压缩包u-boot-1.1.6.tar.bz2

tar xjf u-boot-1.1.6.tar.bz2

b.进入压缩得到的文件

cd u-boot-1.1.6

c.打补丁

patch -p1 <../u-boot-1.1.6.patch

d.配置

make 100ask24x0_config

e.编译,得到u-boot.bin文件

make

在编译得到u-boot.bin文件之后,我们就可以将文件下载到开发板上去了,uboot支持很多的命令,在命令行输入?或者help查看支持的所有命令。特别的,输入menu回到菜单。菜单的功能是通过usb(usb device线)下载uboot,内核,文件系统。

uboot的最终目的是启动内核

1.从flash读出内核放到sdram

2.启动内核

为达到最终的目的uboot要实现的功能:

1.能够读Flash

2.初始化SDRam,初始化时钟(开发板上电,时钟的运行频率是12M,2440最大的频率是400M)

虽然uboot的最终目的是启动内核,但是在开发阶段我们想增加更多的功能方便开发。

1.初始化串口

2.写flash(这样就可以通过网络,串口下载将uboot,kenel,filesystem下载到flash上去)

3.网卡,usb等等

2.u-boot功能,结构,结合Makefile进行分析

1.分析配置过程make 100ask24x0_config 命令

1.在uboot顶层目录下的makefile中搜索100ask24x0_config 结果如下

100ask24x0_config   :   unconfig    @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

MKCONFIG定义为

MKCONFIG    := $(SRCTREE)/mkconfig

所以输入make 100ask24x0_config命令相当于 把 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 传入mkconfig文件,100ask24x0 是第一个参数$1

2.ln -s asm-arm asm

3.ln -s arch-s3c24x0 asm-arm/arch

4.ln -s proc-armv asm-arm/proc

5.创建config.mk文件 内容追加为ARCH=arm CPU=arm920t BOARD=100ask24x0 SOC=s3c24x0

6.创建config.h文件 内容追加为 /Automatically generated -do not edit/ #include

2.分析编译过程

1.incldue $(OBJTREE)/include/config.mk

2.ifeq($(ARCH),arm) CROSS_COMPLIE = arm-linux-

3.include $(TOPDIR)/config.mk

4.

  • OBJS = cpu/arm920t/start.o
  • LIBS = lib_genertic/libgeneric.a
  • LIBS+=board/100ask24x0/lib100ask24x0.a
  • LIBS+=cpu/arm920t/libarm920t.a

5.在执行make 的时候如果不指定目标,他就执行第一个目标

  • all: $(ALL) aLL 依赖于ALL
  • ALL = (obj)uboot.srec(obj)u-boot.bin(obj)System.map(U_BOOT_NAND)
  • 我们的目的是生成u-boot.bin
  • (obj)uboot.bin:(obj)u-boot #u-boot.bin又依赖于elf格式的u-boot
  • (obj)uboot:dependversion(SUBDIRS) (OBJS)(LIBS)$(LDSCRIPT)……#u-boot又依赖于

6.不想那么麻烦的分析makefile,可以输入make命令后查看最后面的打印信息

7.通过查看打印信息,可以看到这样一句话。arm-linux-ld -Bstatic -T /work/sysytem/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext 0x33f80000 $UNDEF_SYM cpu/arm920t/start.o #链接的时候依赖两个东西,原材料和链接脚本。链接脚本指示映像文件的组织结构。

8.分析u-boot.lds文件(.=0x00000000 0x00000000要加上0x33f80000=uboot运行地址)一开始运行的文件是cpu/arm920t/start.o文件

9.链接地址(运行地址)由连接文件board/100ask24x0/u-boot.lds和board/100ask24x0/config.mk TEXT_BASE共同指定,TEXT_BASE在顶层目录的config.mk LDFLAGS中被引用。