uboot移植学习笔记

uboot的文件框架
在这里插入图片描述
在这里插入图片描述


2、uboot的配置
首先肯定是先对uboot进行配置,因为这个UBOOT支持很多的的板子和芯片,所以首先肯定是先设定一下参数

TQ2416_config :       unconfig	
	@$(MKCONFIG) $(@:_config=) arm s3c24xx TQ2416 EmbedSky s3c2416
	@echo "RAM_TEXT = 0xC3E00000" > $(obj)board/EmbedSky/TQ2416/config.tmp
#	@echo "#undef CONFIG_TQ2416_128MB" > $(obj)include/ddr_mem.h

这行这一行相当于是执行 。
./mkconfig TQ2416 arm s3c24xx TQ2416 EmbedSky s3c2416

mkconfig的用法是:
./mkconfig target(目标) architecture(架构) CPU board vendor soc
执行这个命令的结果是:

1)、开发板BOARD_NAME等于$1

2)、创建平台的的头文件链接 例如:
ln -s asm-$2 asm
ln -s arch-$6 asm-$2/arch
ln -s proc-armv asm-$2/proc

3)、创建顶层makefile包含的文件include/config.mk
ARCH =$2
CPU =$3
BOARD =$4
VENDOR=$5
SOC=$6

4)、创建开发板相关的头文件include/config.h
#include <configs/$1.h>


3、顶层config,mk对交叉编译器的选择

CROSS_COMPILE ?= arm-linux-

4,Uboot顶层makefile的编译链接过程

OBJS  = cpu/$(CPU)/start.o

OBJS := $(addprefix $(obj),$(OBJS))

LIBS  = lib_generic/libgeneric.a
LIBS += lib_generic/lzma/liblzma.a
LIBS += lib_generic/lzo/liblzo.a
LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ]; then echo \
	"board/$(VENDOR)/common/lib$(VENDOR).a"; fi)
LIBS += cpu/$(CPU)/lib$(CPU).a
ifdef SOC
LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
endif

以上的编译都是带有$(CPU)等这些变量,这些就是前面执行mkconfig而确定的。上面的OBJS 和 LIBS所代表的.o和.a就是uboot 的构成,他们是通过下面的语句编译得到的

$(OBJS):	depend
		$(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))

$(LIBS):	depend $(SUBDIRS)
		$(MAKE) -C $(dir $(subst $(obj),,$@))

$(LIBBOARD):	depend $(LIBS)
		$(MAKE) -C $(dir $(subst $(obj),,$@))

$(SUBDIRS):	depend
		$(MAKE) -C $@ all

再进行编译链接的时候,是通过uboot.lds来指定编译顺序的。它是根据变量
TEXT_BASE来确定基地址

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
 . = 0x00000000;
 . = ALIGN(4);
 .text :
 {
   cpu/s3c24xx/start.o (.text)
   cpu/s3c24xx/s3c2416/cpu_init.o (.text)
   board/EmbedSky/TQ2416/lowlevel_init.o (.text)
   cpu/s3c24xx/mmu_table.module (.text)
   cpu/s3c24xx/nand_cp.o (.text)
   cpu/s3c24xx/movi.module (.text)
   *(.text)
   lib_arm/div0.o
 }
 . = 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);
 .mmudata : { *(.mmudata) }
 . = ALIGN(4);
 __bss_start = .;
 .bss : { *(.bss) }
 _end = .;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值