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

作业:实验三

第二天-uboot学习的更多相关文章

  1. 第二章 开始学习C++

    第二章  开始学习C++ 2.1  main函数 简单代码如下: #include <iostream> int main() { //This is my first program u ...

  2. 【深度解析】Google第二代深度学习引擎TensorFlow开源

    作者:王嘉俊 王婉婷 TensorFlow 是 Google 第二代深度学习系统,今天宣布完全开源.TensorFlow 是一种编写机器学习算法的界面,也可以编译执行机器学习算法的代码.使用 Tens ...

  3. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...

  4. 1.ok6410移植bootloader,移植u-boot,学习u-boot命令

    ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的. 一.配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生 ...

  5. (转).net开发者对android第二周的学习体会

    这一周相对没有春节时这么闲了,白天也比较多的工作要做,每天晚上又要被我三岁的女儿折腾到十点, 实在没有多少时间学习.在前一周的基础上,这周我试着自己练习写了一个个人管理的android的程序,主要实现 ...

  6. 第二周C++学习总结

    经过这个星期的学习,认识C语言C++语言,学会打代码,但是打出第一个代码还是经历了很大困难,首先我对于打代码真的一窍不通,其次我连打代码的软件也不会装,但在班导的帮助下我还是装好了软件,在打第一个代码 ...

  7. 201521123110第二周Java学习总结

    1.本章学习总结 本周的Java学习相对前一周更进了一步,初步学习了Java简单的输入和输出,String类的对象创建后不能修改,它是不可变的,在Java中浮点型默认是double型与C中的int型不 ...

  8. 第二周java学习总结

    学号 20175206 <Java程序设计>第二周学习总结 教材学习内容总结 第二章是基本数据类型与数组,第三章是运算符.表达式和语句的内容.如果说第一章是让我们了解JAVA,那么第二章和 ...

  9. 2018年-2019年第二学期第二周C#学习个人总结

    在本学期的第二周,我们又开始了C#的学习.在星期一的C#课上时,我们学了this关键字的用法其中包括1.this访问属性2.this访问成员方法3.this访问构造方法.在this访问属性中通过thi ...

随机推荐

  1. mysql报错: 1548-Cannot load from mysql.proc. The table is probably corrupted 解决办法

    use mysql: ALTER TABLE `proc` MODIFY COLUMN `comment` text CHARACTER SET utf8 COLLATE utf8_bin NOT N ...

  2. 超像素经典算法SLIC的代码的深度优化和分析。

    现在这个社会发展的太快,到处都充斥着各种各样的资源,各种开源的平台,如github,codeproject,pudn等等,加上一些大型的官方的开源软件,基本上能找到各个类型的代码.很多初创业的老板可能 ...

  3. 由一个多线程共享Integer类变量问题引起的。。。

    最近看到一个多线程面试题,有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC- 看到这个题目,首先想到的是解决方法是定义一个Integer类对象,初始化为0,由3个线 ...

  4. [html/css]清除浮动的相关技巧

    以前只了解得很浅显,转载了一篇不错的文,学习参考 浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的代码,在各种浏览器中显示效果也有可 ...

  5. j2ee之Filter使用实例(页面跳转)

    javax.servlet.Filter类中主要有三个方法. public void destroy(); //销毁对象 public void doFilter(ServletRequest req ...

  6. Web Service

    Web Service全称XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP ...

  7. 1066: [SCOI2007]蜥蜴

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3545  Solved: 1771[Submit][Status] ...

  8. C#体检套餐项目

    使用泛型集合写的一个小项目 1.要实现新建体检套餐,并且如果已经有了该体检套餐就不能再次新建, 2.要实现套餐列表动态更新,没添加一个体检套餐,在套餐列表里就自动添加一项; 3.向当前套餐类表里添加检 ...

  9. Mysql完全手册(笔记二,使用数据与性能优化)

    一.使用数据 1.使用变量 MySQL也可以让我们以用户自定义的变量来存储select查询的结果,以便在将来select查询中使用.它们只会在客户会话期间存在,但是它们提供一个方便有效的方法来连接查询 ...

  10. Linux 进程与线程六

    //线程间的通信 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <e ...