u-boot编译过程

u-boot编译过程

  1. 配置:make **config
  2. 编译:make

1. 配置

2440使用命令make 100ask24x0_config来配置makefile,此过程主要内容:

查看100ask24x0_config所在makefile选项:
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
其中$(@:_config=)表示把100ask24x0_config的_config替换为空格即删掉。
@$(MKCONFIG)的值是$(SRCTREE)/mkconfig,即目录下的mkconfig文件,而mkconfig是一个脚本文件。
主要是设置一些参数:
echo "ARCH = $2" > config.mk echo "CPU = $3" >> config.mk echo "BOARD = $4" >> config.mk

2. 编译

编译过程主要是编译和链接

make的时候执行:

$(obj)u-boot:		depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)  

    UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
    cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
    	--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
    	-Map u-boot.map -o u-boot
UNDEF_SYM=`arm-linux-objdump -x lib_generic/libgeneric.a board/100ask24x0/lib100ask24x0.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/usb/libusb.a drivers/sk98lin/libsk98lin.a common/libcommon.a |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
        cd /home/book/2440/u-boot-1.1.6 && arm-linux-ld -Bstatic -T /home/book/2440/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext 0x33F80000  $UNDEF_SYM cpu/arm920t/start.o \
                --start-group lib_generic/libgeneric.a board/100ask24x0/lib100ask24x0.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/usb/libusb.a drivers/sk98lin/libsk98lin.a common/libcommon.a --end-group  \
                -Map u-boot.map -o u-boot

其中分析arm-linux-ld -Bstatic -T /home/book/2440/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext 0x33F80000
链接文件u-boot.lds的内容:

//连接脚本定义链接地址
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
	. = 0x00000000;//当前地址为0加上传入参数0x33F80000,所以此时当前地址为0x33F80000,即下面的东西排放的开始地址为0x33F80000
	               

	. = ALIGN(4);
	.text      ://文件代码段
	{
	  cpu/arm920t/start.o	(.text)
          board/100ask24x0/boot_init.o (.text)
	  *(.text)
	}

	. = ALIGN(4);//所有文件只读数据段
	.rodata : { *(.rodata) }

	. = ALIGN(4);//所有文件数据段
	.data : { *(.data) }

	. = ALIGN(4);
	.got : { *(.got) }

	. = .;//所有文件uboot命令段
	__u_boot_cmd_start = .;
	.u_boot_cmd : { *(.u_boot_cmd) }
	__u_boot_cmd_end = .;

	. = ALIGN(4);//bss段
	__bss_start = .;
	.bss : { *(.bss) }
	_end = .;
}

上面定义了u-boot一开始运行在0x33F80000地址,开始运行cpu/arm920t/start.o文件,即启动文件。
里面会通过一个.lds链接文件链接所有.o文件并设置链接地址,链接地址(0x33F80000)在:u-boot-1.1.6\board\100ask24x0 文件中,此时的值是0x33F80000即是uboot存放的地址。

通过查看链接脚本.lds来查看u-boot启动的地址和启动的第一个文件,从而通过启动文件了解u-boot的启动流程。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值