zoukankan      html  css  js  c++  java
  • 第二天-uboot学习

    源码阅读方法
    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
    加密算法
    数字签名


    作业:实验三

  • 相关阅读:
    Codeforces 845E Fire in the City 线段树
    Codeforces 542D Superhero's Job dp (看题解)
    Codeforces 797F Mice and Holes dp
    Codeforces 408D Parcels dp (看题解)
    Codeforces 464D World of Darkraft
    Codeforces 215E Periodical Numbers 容斥原理
    Codeforces 285E Positions in Permutations dp + 容斥原理
    Codeforces 875E Delivery Club dp
    Codeforces 888F Connecting Vertices 区间dp (看题解)
    Codeforces 946F Fibonacci String Subsequences dp (看题解)
  • 原文地址:https://www.cnblogs.com/renchong/p/5756380.html
Copyright © 2011-2022 走看看