UBOOT第二天

    xiaoxiao2026-08-12  4

    源码阅读方法 1、源码目录结构 2、配置(支持当前使用的硬件) 3、编译(Makefile) 4、启动流程 工具使用 1、在同一文件查找 shitf+8  N n进行上下查找 2、在工程目录中 ctags uboot版本选择:2013 uboot 2010版本前 只能识别zImage 文件  uboot 2013 能够识别uImage文件 选用原则: 1、适用于当前开发板 2、资料问题 uboot目录结构 平台相关 arch(架构)  board(板级结构)   平台无关 common(uboot命令)  disk(磁盘)  doc(文档)  drivers(uboot阶段驱动)  fs(文件系统) include lib(通用的头、库文件) net(网络支持)   tools(编译相关工具)                                                                                                               uboot配置 1、步骤 make fs4412_config make XXXX_config 2.流程 进入Makefile  790 %_config::  unconfig                                                                                                                                   791     @$(MKCONFIG) -A $(@:_config=)  131 MKCONFIG    := $(SRCTREE)/mkconfig      ==>  mkconfig    126 SRCTREE     := $(CURDIR)   ==> 当前路径 $(@:_config=)    @指的是目标文件  fs4412_config  字符串A:字符串B=   将A中B去掉   fs4412 ./mkconfig -A  fs4412 进入mkconfig中 #代表了参数个数 ^[[:space:]]*${2}[[:space:]]  正则表达式        前面没有空格fs4412 后面有空格  一行的开头位置 line = fs4412               arm     armv7       fs4412      samsung    exynos      $1 $2 $3 $4 $5 $6 set line 将line中的值以空格为分隔编程执行参数 ./mkconfig fs4412               arm     armv7       fs4412      samsung    exynos         $1 $2 $3 $4 $5 $6  CONFIG_NAME=fs4412_config  BOARD_NAME=fs4412_config  awk文本分析工具  arch = arm  cpu = armv7  spl_cpu = armv7  board  = fs4412  vendor = samung  soc = exynos  113     cd ./include 114     rm -f asm 115     ln -s ../arch/${arch}/include/asm asm    创建符号链接  arch/arm/include/asm  asm shell中 条件判断 -z选项 判断变量有值 返回0 123     ln -s arch-exynos asm/arch    127     rm -f asm/proc 128     ln -s proc-armv asm/proc 添加了三个符号链接 现在位于include路径下 创建了一个config.mk 将小写arch等参数 赋给了大写的ARCH等参数 154     BOARDDIR=${vendor}/${board}      ==>samung/fs4412  创建了一个板级特定的头文件 config.h 总结:创建了三个符号链接,创建config.mk(包含板级特定全局变量)创建了config.h(创建板级特定头文件,添加了一些宏) uboot编译 1、步骤 make 2、流程 进入Makefile 先去找all: 429 all:        $(ALL-y) $(SUBDIR_EXAMPLES)           412 ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map       444 $(obj)u-boot.bin:   $(obj)u-boot 445         $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ 446         $(BOARD_SIZE_CHECK) (obj)==> 指明的是当前Makefile路径 objcopy --gap-fill -O binary u-boot(源文件)  u-boot.bin(目标文件) 581 $(obj)u-boot:   depend \ 582         $(SUBDIR_TOOLS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds 583         $(GEN_UBOOT)        关于CONFIG_这样的宏配置 include/config.h 和 include/configs/fs4412.h 160 SUBDIR_TOOLS = tools    (编译需要的工具)查找 237 OBJS  = $(CPUDIR)/start.o    当前Makefile下没有CPUDIR  查找include 194 include $(TOPDIR)/config.mk    config.mk   127 TOPDIR      := $(SRCTREE)    166 CPUDIR=arch/$(ARCH)/cpu/$(CPU)     arch/arm/cpu/armv7 arch/arm/cpu/armv7/start.o(启动的第一个文件) 365 LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).o      ==>board/samung/fs4412/libfs4412.o      板级结构相关库文件                                                                366 LIBBOARD := $(addprefix $(obj),$(LIBBOARD))  addprefix拼接路径(obj) (LIBBOARD) 362 LIBS := $(addprefix $(obj),$(sort $(LIBS-y)))    sort $(LIBS-y) 进行排序 (LIBS-y) 添加的是通用的库文件(文件很多) wildcard 扩展通配符 确定当前文件是否存在 如果扩展的路径文件不存在,返回空值 219         LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds    完成了赋值,但是当前路径下文件并不存在 221     ifeq ($(wildcard $(LDSCRIPT)),) 当前路径下文件不存在 返回空值,判断成立 222         LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds  arch/arm/cpu/armv7/u-boot.lds 完成了赋值,但是当前路径下文件并不存在 225         LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds    arch/arm/cpu/u-boot.lds 赋值成功 这就是我们想要的 613 $(obj)u-boot.lds: $(LDSCRIPT) $(obj)include/u-boot.lst                                                                  614         $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@  cpp预处理命令 生成了u-boot文件,经过格式转换生成了u-boot.bin u-boot.bin是bootloader的半成品,缺少三星提供的安全启动代码 u-boot-fs4412.bin bl1 bl2 u-boot.bin 加密算法 数字签名 作业:实验三
    转载请注明原文地址: https://ju.6miu.com/read-1311104.html
    最新回复(0)