Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

2023-05-16

      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格式。




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析 的相关文章

  • 摄像机高精度标定的一些方法

    摄像机标定从标定板类型可以分为 xff1a 一维标定物 xff0c 二维标定物和三维标定物 xff08 哈哈哈 xff09 1 一维标定物 一维标定物标定算法是利用摄像机投影过程中的交比不变性的原理 xff0c 常用来标定摄像机阵列 xff
  • C#连接到SQL Server数据库

    理论知识 使用ADO NET ActiveX Data Objects 可以减少不同数据库系统带来的琐碎事情 ADO NET是一组公开数据访问服务的类 主要组成 xff1a NET 数据提供程序 xff1a 可以实现数据操作和对数据的快速
  • c++ 后台服务器开发面试题目总结

    文章目录 1 C 43 43 中include头文件时尖括号与双引号的区别1 1 区别1 2 总结 2 c 43 43 的封装 继承 多态3 计算机网络的OSI七层模型 xff0c 每一层的作用是啥4 红黑树的基本问题5 set怎么保证插入
  • Ubuntu18.04 PX4(XTdrone) gazebo联合仿真报错

    ubuntu18 04 默认安装gazebo9 0 启动PX4的indoor1 launch会报错 gzserver span class token operator span symbol lookup error span class
  • 云原生周刊:一文读懂 Pod 网络 | 2023.4.10

    文章推荐 一文读懂 Pod 网络 这篇文章旨在帮助读者理解 Pod 网络的概念和原理 Pod 网络是 Kubernetes 中的一个重要概念 xff0c 它描述了如何在一个集群中部署和运行应用程序 Pod 网络是指使用容器网络插件 如 Ca
  • 前辈大公司的面试,重点是他推荐我们应该看得那些书

    应届生上泡了两年 xff0c 一直都是下资料 xff0c 下笔试题 xff0c 面试题 一直都在感谢那些默默付出的人 写这个帖子花了我两个夜晚的时间 xff0c 不是为了炫耀 xff0c 只是为了能给那些 迷惘 的学弟学妹 xff0c 一点
  • 数据库for update 之后未提交事务导致锁表

    在工作的时候 xff0c 操作数据库 xff0c select for update xff0c 忘记提交事务 xff0c 数据库为了防止其他人对该表进行操作 xff0c 对该表进行锁表 xff0c 导致我再次for update 的时候一
  • 芯片驱动程序编写

    实质 利用程序控制单片机与芯片通信 xff0c 目的是读写芯片 xff0c 一般来说 xff0c 驱动程序就是对芯片的读写操作 看数据手册 寄存器表 芯片的所有功能都 映射 在寄存器表上 xff0c 阅读寄存器表就可以了解芯片的功能 这部分
  • 如何快速入门RTOS

    摘要 本文结合自己学习RTOS的经历 xff0c 来谈谈如何快速入门一款RTOS xff0c 希望能够给初学者以启发 xff0c 找到适合自己的学习思路和方法 我的学习经历 ucos学习 我是在上学期间接触到了RTOS xff0c 当时学习
  • RT-Thread快速入门-了解内核启动流程

    首发 xff0c 公众号 一起学嵌入式 xff0c RTOS Linux C 内核是操作系统最基础也是最重要的部分 从本文开始进入 RT Thread 内核相关知识的学习 首先了解内核的基础知识 xff0c 对 RT Thread 内核的设
  • RT-Thread快速入门-中断管理

    首发 xff0c 公众号 一起学嵌入式 经过前面文章的学习 xff0c 对于 RT Thread 处理多任务或者说线程的处理机制 xff0c 基本上入门了 能够上手用 RT thread 进行日常开发了 但是 xff0c 还有一个重要的部分
  • FreeRTOS快速入门-初探FreeRTOS

    首发 xff0c 公众号 一起学嵌入式 对于 RTOS 入门系列文章 xff0c 已经更新完一款 xff08 RT Thread xff09 xff1a 助你快速入门 RT Thread 这个系列的文章结合 RT Thread xff0c
  • 有人看衰OpenStack,这家公司却给出不一样的感觉

    前一段时间我们写过九州云的文章 xff0c 主要谈的是新产品Animbus 7 0和九州云的一些战略规划 xff0c 有兴趣可以翻阅 OpenStack年年痒 xff0c 但并不妨碍越来越多的用户选择它 一文 日前 xff0c 值 双态IT
  • 我读Mongoose源码----程序框架

    Mongoose是一种WEB服务器 xff0c 因为最近在学习网络编程 xff0c 所以打算研究研究它的源码 xff0c 认真看了大部分 xff0c 觉得学到的东西的确不少 xff0c 拿出来分享一下 xff0c 也和大家交流交流 至于什么
  • git的简单使用

    以前一直没有提交过代码 xff0c 这次提交一下代码 xff0c 整理一下 xff47 xff49 xff54 的简单使用 1 首先我们要在github上面创建一个帐号 xff0c 之后创建一个仓库create a new repo xff
  • 二叉查找树的实现

    二叉查找树是这样定义的 xff1a 二叉查找树 xff08 Binary Search Tree xff09 xff0c 或者是一棵空树 xff0c 或者是具有下列性质的二叉树 xff1a 若它的左子树不空 xff0c 则左子树上所有结点的
  • 翻转n个硬币的问题

    今天去面试 面试官问了我这样一个问题 当时答的很近了 但是还差一点 最后还是被pass了 原题是这样 一堆硬币有n个 都是朝下的 翻转n次 第一次翻转能被1整除的 第2次翻转能被2整除的 第三次翻转能被3整除的 这样直到第n次翻转能被n整除
  • 10月15号 360一面

    昨天去360参见一面 xff0c 作为小本一枚 xff0c 迅雷 xff0c 多玩 xff0c 360都是霸笔才得到的面试机会 xff0c 说实在的感觉360一面聊了40分钟 xff0c 整个过程比较轻松 面试官比我大个十岁左右 xff0c
  • kaggle网站原数据集Give Me Some Credit

    基于Give Me Some Credit数据集 xff0c 通过预测某人在未来两年内经历财务困境的可能性 xff0c 改进信用评分的先进水平 信用评分算法 xff0c 猜测违约的可能性 xff0c 是银行用来决定是否应该发放贷款的方法 这
  • linux下查看磁盘分区,文件系统,磁盘文件系统的命令

    http www linuxsir org bbs thread214738 html 一 df 命令 xff1b df 是来自于coreutils 软件包 xff0c 系统安装时 xff0c 就自带的 xff1b 我们通过这个命令可以查看

随机推荐

  • Redis源码-数据结构之Adlist双端链表

    Redis的Adlist实现了数据结构中的双端链表 xff0c 整个结构如下 xff1a 链表节点定义 xff1a typedef struct listNode struct listNode prev struct listNode n
  • Redis源码-事件库

    网上看了很多Redis事件库的解读 xff0c 自己也研究了好几遍 xff0c 还是记录下来 xff0c 虽然水平有限 xff0c 但是进步总会是有的 网络事件库封装了Epoll的操作 xff08 当然是指Linux下的多路复用了 xff0
  • Redis源码分析-内存数据结构intset

    这次研究了一下intset xff0c 研究的过程中 xff0c 一度看不下过去 xff0c 但是还是咬牙挺过来了 xff0c 看懂了也就是那么回事 xff0c 静下心来 xff0c 切莫浮躁 Redis为了追求高效 xff0c 在存储下做
  • 基于STM32实验:uC/OS-III操作系统移植并创建多任务系统实验

    本次实验内容 xff1a 将uC OS III操作系统移植到stm32F103C8T6上 xff0c 构建至少3个任务 xff08 task xff09 xff1a 分别以1s和3s周期对LED灯进行点亮 熄灭的控制 xff1b 另外一个t
  • 初级软件测试面试题汇总

    一 请描述如何划分缺陷与错误严重性和优先级别 xff1f 给软件缺陷与错误划分严重性和优先级的通用原则 xff1a xff08 1 xff09 表示软件缺陷所造成的危害和恶劣程度 xff08 2 xff09 优先级表示修复缺陷的重要程度和次
  • selenium 安装

    火狐浏览器版本 xff1a 35 0 1 1 官网安装 Version 2 9 1 1 通过官网安装插件 xff1a https addons mozilla org en GB firefox addon selenium ide ver
  • 构造函数与析构函数执行顺序

    构造函数与析构函数执行顺序 代码 xff1a include lt iostream gt using namespace std class ABCD public ABCD int a int b int c this gt a 61
  • java.lang.NoSuchMethodException异常

    在Struts2中 xff0c 有时候会出现java lang NoSuchMethodException异常 xff0c 有可能是三种情况导致的运行异常 xff1a 第一种 xff1a Action 类的方法被定义成 private 类型
  • java.lang.IllegalArgumentException异常解决

    在maven项目中测试代码的时候 xff0c 碰到java lang IllegalArgumentException 异常 xff1a 严重 Servlet service for servlet e3 manager in contex
  • 在idea中创建一个普通工程

    第一步 xff1a File gt new gt Project 第二步 xff1a 点击next 点击 finish 即可 xff01 xff01 xff01 运行结果
  • java:获取当月最后一天

    设置时间格式 SimpleDateFormat format 61 new SimpleDateFormat 34 yyyy MM dd 34 获得实体类 Calendar ca 61 Calendar getInstance 设置最后一天
  • idea自动生成UUID和解决办法

    正常情况下 xff0c 鼠标点击类名 xff0c Alt 43 Insert键就会出现生成UUID选项 xff0c 即 xff1a 有时候Alt 43 Insert没有UUID选项 xff0c 解决办法 第一种情况 xff1a Settin
  • 页面<div>位置调整

    调整页面 lt div gt 样式 给 lt div gt lt select gt 分别起名字 xff1a div2 xff0c s1 lt div gt 代码 xff1a lt div class 61 34 div2 34 style
  • 马士兵_JAVA自学之路(为那些目标模糊的码农们)

    转载自 xff1a https blog csdn net anlidengshiwei article details 42264301 JAVA自学之路 一 学会选择 为了就业 xff0c 不少同学参加各种各样的培训 决心做软件的 xf
  • 在深度学习中Softmax交叉熵损失函数的公式求导

    以下部分基本介绍转载于点击打开链接 在深度学习NN中的output层通常是一个分类输出 xff0c 对于多分类问题我们可以采用k 二元分类器来实现 xff0c 这里我们介绍softmax softmax回归中 xff0c 我们解决的是多分类
  • 1-基于ArUco码的标记与检测

    1 简介 姿态估计 xff08 Pose estimation xff09 在 计算机视觉领域扮演着十分重要的角色 xff1a 机器人导航 增强现实以及其它 这一过程的基础是找到现实世界和图像投影之间的对应点 这通常是很困难的一步 xff0
  • 4-基于ArUco相机姿态评估

    1 简介 基于ArUco评估相机姿态 xff0c 可以使用OPENCV的外部库 xff08 opencv contrib xff09 中的aruco模块 xff0c 可以参考安装目录 xff08 库目录 xff09 xff1a opencv
  • MySQL--40道基础概念选择题及答案

    一 单选题 xff08 题数 xff1a 40 xff0c 共 40 0 分 xff09 1 在计算机系统中能够实现对数据库资源进行统一管理和控制的是 xff08 A xff09 A DBMS B DBA C DBS D DBAS 2 数据
  • 抽象类方法——子类定义getDescription方法返回对一个人的简单描述

    Person与子类的关系图 每一个 人都有一些诸如名字这样的属性 xff0c 学生与雇员都有名字属性 xff0c 因此可以将getName方法放在位于继承关系较高层的通用超类 xff08 父类 xff09 中 xff0c 现在增加一个get
  • Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

    Uboot 所用版本 u boot 2013 01 u boot 2013 01 中有上千文件 xff0c 要想了解对于某款开发板 xff0c 使用哪些文件 哪些文件首先执行 可执行文件占用内存的情况 xff0c 最好的方法就是阅读它的Ma