嵌入式系统: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)u−boot.srec (obj)u-boot.bin (obj)System.map (U_BOOT_NAND)
- 我们的目的是生成u-boot.bin
- (obj)u−boot.bin: (obj)u-boot #u-boot.bin又依赖于elf格式的u-boot
- (obj)u−boot: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中被引用。