u-boot学习笔记一(makefile)

来源:互联网 发布:香港理工大学就业知乎 编辑:程序博客网 时间:2024/05/25 12:22

最近两天在看U-boot的源码,现对u-boot流程和部分源码做个分析,备忘!还没有进行实践,有什么错误的地方还请指正!

1.Makefile分析

 

将顶层的config.mk包含进来,如果include目录下右config.mk也包含进来!include/config.mk将在后面的脚本中配置board的时候自动生成!

这是配置板子!./mkconfig调用当前目录下的shell脚本mkconfig。后面就是需要为这个脚本传递的参数!

此脚本的主要作用就是根据传入的参数,生成两个文件!一个是上面提到的include/config.mk另一个是include/config.h!执行完#make ***_config 后就可以生成这两个文件!有了这两个文件下一步就可以make

生成我们所需要的bin,map等文件!

 make all生成三个文件.bin .srec .map!唯一需要注意的就是LDFLAGS这个在config.mk有定义

LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds

LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)

注意两点一:TEXT_BASE为uboot在SDRAM中放置的位置,二:u-boot.lds链接脚本,这个在board中有定义!

打开文件有这两句

OUTPUT_ARCH(arm)
ENTRY(_start)

SECTIONS
{
 . = 0x00000000;

 . = ALIGN(4);
 .text      :
 {
   cpu/arm920t/start.o (.text)
   board/yl2410/lowlevel_init.o (.text) /* Ali + */
   board/yl2410/nand_boot.o (.text) /* Ali + locate nand boot code at first 4k*/
   *(.text)
 }

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

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

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

 . = .;
 __u_boot_cmd_start = .;
 .u_boot_cmd : { *(.u_boot_cmd) }
 __u_boot_cmd_end = .;

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

这个start是在TEXT_BASE为基址的基础上的偏移(可以这样理解)

根据这个链接脚本就可以知道我们应该从什么地方分析源代码!这个脚本还要注意的就是__u_boot_cmd_start = 和 .got 段!__u_boot_cmd_start 段为用户自定义的段,可以查看comand.h文件,你大概就清楚!

makefile大概就是这个样子!分三步走1.make distclean 清理垃圾文件 2.make ***—config配置目标板,这步将通过shell脚本生成两个下步必须的文件include/config.mk和include/config.h  3.make all生成.bin文件!

下篇将对u-boot中的脚本做一个简单的分析!