Uboot 所用版本 u-boot-2013.01

u-boot-2013.01 中有上千文件,要想了解对于某款开发板,使用哪些文件、哪些文件首先执行、可执行文件占用内存的情况,最好的方法就是阅读它的Makefile。

根据顶层Readme文件的说明:

可以知道如果使用开发板board/<board_name>,就先执行“make <board_name>_config”命令进行配置,然后执行“make all”, 就可以生成如下3个文件:

U-Boot.bin:二进制可执行文件,它就是可以直接烧入eMMC中的文件。

U-Boot : ELF格式的可执行文件。

U-Boot.srec : 摩托罗拉格式的可执行文件。

对于Exynos4412开发板,这里用的其实是Fs4412,执行“make fs4412_config"、“make all"后生成的u-boot-fs4412.bin可以烧入eMMC中执行。

一、U-Boot 配置过程

1、在顶层Makefile中可以看到如下代码:

假定在u-boot-2013.01的根目录下编译,则其中的MKCONFIG 就是根目录下的mkconfig文件(mkconfig是shell脚本文件)

%_config是GUNmake语法层,表示的是所有以".config"结尾的文件。$(@:_config=)的结果就是将“fs4412"中的“——config”去掉,结果为fs4412。


MKCONFIG 就是执行mkconfig。

所以 “make fs4412_config"实际上就是执行如下命令:

./mkconfig fs4412 arm armv7 fs4412 samsung exynos

2、mkconfig 的作用

前面已经提到,mkconfig就是一shell脚本, 具体作用如下:

a -- 解析boards.cfg fs4412相关数据


这是我们自行添加的.确定开发板名称BOARD_NAME。


b -- 针对平台作了一系列链接,创建到平台、开发板相关的头文件的链接。


c --创建顶层Makefile包含的文件 include/ config.mk


inlucde / config.mk 内容如下:


d -- 创建开发板相关的头文件inlucde/config.h


Include/config.h导出结果如下:

U-Boot 还没有类似Linux一样的可视化配置界面(比如使用 make menuconfig 来配置),要手动修改配置文件 inlucde/config/<board_name>.h 来裁剪、设置U-Boot.

配置文件中有以下两类宏。

1) 一类是选项(Options),前缀为“CONFIG”它们用于选择CPU、SOC、开发板类型,设置系统时钟、选择设备驱动等。


2)另一类是参数(Setting),前缀为“CFG_”,它们用于设置malloc缓冲池的大小、U-Boot 下载文件时的默认加载地址、Flash的起始地址等。

uboot 执行通过宏来判断:宏在头文件中定义。

#ifdef CONFIG_TEST
run_test();
#endif

某头文件

#define CONFIG_TEST

可以这样认为,“CONFIG_”除了设置一些参数外,主要用来设置U-Boot的功能、选择使用文件中的哪一部分;而“CFG_”用来 设置更细节的参数。


二、U-Boot 的编译、链接过程

配uboot 编译通过Makefile来判断:

obj-y += xx.o xx.o  在编译时,只编译obj-y

        obj-$(CONFIG_XX) = xx.o xx.o 如果CONFIG_XX为y,则此文件会被编译进u-boot.bin置完后,执行“make all” 即可编译:

找第一个目标all:

上面代码是对u-boot进行格式转换,变成二进制bin格式之后,再加一些校验与4412开如平台加密信息。

依赖u-boot:

先总结一下U-Boot 的编译流程:

a -- 首先编译 cpu /$(CPU)/start.S,对于不同的CPU,还可能编译 cpu/$(CPU)下的其他文件;

b -- 然后,对于平台/开发板相关的每个目录、每个通用目录都使用它们个字的Makefile生成相应的库;

c -- 将a、b 步骤生成的.o .a文件按照 board / $(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/U-Boot.lds链接脚本进行链接。

d -- 第c步得到的是ELF格式的U-Boot,后面的Makefile还会将它转换成二进制格式、S-Record格式。

Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析相关推荐

  1. 高通Android智能平台环境搭建_编译流程分析

    高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...

  2. yocto 编译流程分析

    yocto 编译流程分析 2015年04月15日 10:55:13 日月星辰007 阅读数:4955 git clone 一份poky 的工程到本地. source poky/oe-init-buil ...

  3. Linux——Linux驱动之Makefile编译总结(编译器路径设置、编译流程分析、编译试验测试)

    目录 0 引言 1 编译器路径设置 2 Makefile编译文件 3 Linux内核编译流程分析 4 编译试验测试

  4. qualcomm amss 文件结构以及编译流程分析

    qualcomm amss 文件结构以及编译流程分析 https://blog.csdn.net/npjocj/article/details/8206695 AMSS的source实际上是Qualc ...

  5. 高通android智能平台环境搭建_编译流程分析,高通平台环境搭建,编译,系统引导流程分析参考...

    高通有两个cpu,他们分别跑不同的系统,应用程序(ap)端是android系统,modem 端是高通自己的系统. 要编译出可供烧写使用的镜像文件需要三部分代码: 1) 获取经过高通打补丁的 andro ...

  6. Pixhawk飞控源码目录结构及编译流程分析

     http://blog.csdn.net/xlb7679/article/details/51658956 (PS:这是第一次写博客,以前也有记录一些经验总结心得什么的,不过都是手写笔记或者记在 ...

  7. U-Boot移植(8)u-boot的流程

    u-boot的启动流程: 从文件层面上看主要流程是在两个文件中:cpu/arm920t/start.s,lib_arm/board.c, 1)start.s 在flash中执行的引导代码,也就是boo ...

  8. openharmony标准系统移植之init启动流程分析

    接上篇移植openharmony标准系统后,系统进入终端后,发现执行指令特别卡顿,太影响调试了.目前还不知道是什么问题导致的,不知道是不是cpu性能不够,但是感觉不太像是这个问题,卡顿如下图.基本一个 ...

  9. openwrt编译流程分析

    最近开始整5G CPE项目,系统基于OpenWrt系统移植裁剪,打算详细研究了一下整个工程的构建过程,记录一下: Openwrt编译过程概述 编译的总体过程如下: 1.编译host工具 2.编译交叉工 ...

最新文章

  1. 【Python基础】Python轻量级循环-列表推导式
  2. 【CodeForces - 1051A】Vasya And Password (构造,水题)
  3. 二分答案——进击的奶牛(洛谷 P1824)
  4. 2021-08-26BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
  5. uniapp App更新解决方法
  6. 字符串类型的数字的加减乘除运算
  7. 题目分析参考贺老师的答案————谁是小偷如何派任务
  8. armv7与armv8 cp15 cache指令
  9. 荣联再次中标中国移动云资源池项目
  10. 机器学习(3)——无监督学习
  11. 用微信开发者工具--打开微信小程序weui组件示例
  12. Java_输入输出(Scanner)
  13. SAP MM批次管理(2)批次主数据
  14. 质量保证(QA)和质量控制(QC)的区别
  15. python 决策模型_【Spark MLlib速成宝典】模型篇05决策树【Decision Tree】(Python版)...
  16. java 删除空行_java实现文本文件删除空行的示例分享
  17. 批处理 强制删除卸载残留文件
  18. MyEclipse下的Project有红色感叹号
  19. 【BDTC 2016】与360、安天、三未信安、明朝万达、数字观星、观数科技共同讨论大数据安全与隐私保护...
  20. 中国互联网视频分析 – 群雄逐鹿

热门文章

  1. linux笔记_20150825_linux下的软件工具唠叨下
  2. linux的搜索和时间
  3. 数据科学 python_为什么需要以数据科学家的身份学习Python的7大理由
  4. 熊猫数据集_熊猫迈向数据科学的第三部分
  5. 什么时候使用静态方法
  6. 和css3实例教程_最好CSS和CSS3教程
  7. Docker初学者指南-如何创建您的第一个Docker应用程序
  8. react构建_您应该了解的有关React的一切:开始构建所需的基础知识
  9. 如何使用json开发web_如何通过使用JSON Web令牌简化应用程序的身份验证
  10. seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化