历史上的今天
返回首页

历史上的今天

今天是:2024年12月15日(星期日)

2021年12月15日 | Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

2021-12-15 来源:eefocus

Uboot 所用版本 u-boot-2013.01


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


根据顶层Readme文件的说明:


可以知道如果使用开发板board/,就先执行“make _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/.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格式。


推荐阅读

史海拾趣

First Silicon Co., Ltd公司的发展小趣事

面对日益激烈的市场竞争,First Silicon公司深知供应链管理的重要性。公司投入大量资源,对供应链进行了全面整合和优化。通过建立长期稳定的供应商关系、引入先进的供应链管理软件和提高库存周转率等措施,First Silicon有效降低了原材料成本和库存风险。同时,公司还加强了与下游客户的沟通和合作,确保产品能够及时、准确地送达客户手中。这一系列举措不仅提升了公司的运营效率,还增强了其市场竞争力。

Datapro International Inc公司的发展小趣事

面对不断变化的市场环境和客户需求,Datapro International Inc公司始终保持着对创新的追求。他们不断投入研发资源,推动新技术和新产品的不断涌现。同时,他们还积极关注行业趋势和客户需求的变化,以便及时调整自己的发展战略和业务模式。

在未来的发展中,Datapro International Inc公司将继续秉承“创新、质量、服务”的理念,致力于为客户提供更加卓越的产品和服务。同时,他们也将积极探索新的市场机会和商业模式,以实现更加持续、稳健的发展。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展历程和故事。如需了解Datapro International Inc公司的真实历史和发展故事,请查阅相关官方资料或行业报告。

FOX [Fox Electronics]公司的发展小趣事

在20世纪90年代初,Fox Electronics凭借其创新的温补晶体振荡器(TCXO)技术,在竞争激烈的电子行业中脱颖而出。该技术通过自动调节晶体振荡频率以补偿温度变化,极大地提高了电子设备的稳定性和可靠性。这一创新不仅为Fox Electronics赢得了众多高端客户的青睐,还推动了整个行业对高精度时钟源的需求增长。随着通信和计算机技术的快速发展,Fox Electronics不断迭代其TCXO技术,持续引领市场潮流。

Chemi-Con公司的发展小趣事

在电子行业的发展过程中,Chemi-Con公司意识到单一产品线的局限性,并开始积极探索多元化发展的道路。公司不仅拓展了电容器产品的应用领域,还涉足了光电子机械等新兴产业。此外,Chemi-Con还积极寻求与其他企业的合作,通过技术共享、资源共享等方式实现共赢。这种开放、合作的姿态使得Chemi-Con在行业中树立了良好的形象,也为公司的长远发展奠定了坚实的基础。

静芯微电子(ElecSuper)公司的发展小趣事

静芯微电子在发展过程中,持续投入研发资源,不断推动技术创新。公司成功研发出芯片级TVS器件,并在国内首次开发成功在人体模型(HBM)下抗静电强度高于30KV的关键技术和器件。这一技术突破不仅提升了产品的性能,还进一步巩固了静芯微电子在ESD/TVS领域的领先地位。同时,公司还积极申请和积累专利,目前已拥有多项发明专利、实用新型专利和集成电路布图登记等知识产权成果。

ABL Heatsink公司的发展小趣事

ABL Heatsink公司在电子散热领域一直默默耕耘,直到某天,公司的研发团队成功开发了一种新型的高效散热材料。这种材料不仅导热性能卓越,而且成本相对较低,立即引起了业界的关注。随着这种新型散热材料的广泛应用,ABL Heatsink公司的订单量激增,公司规模迅速扩大。

问答坊 | AI 解惑

基于DSP和FPGA的信号采集的设计与实现

基于DSP和FPGA的信号采集的设计框图和实现代码…

查看全部问答>

太阳能给锂电池充电,出现爆裂,不知怎么回事

锂电池加了充电保护,电池12.60v,太阳能板标准16v,5w(实际肯定达不到)…

查看全部问答>

免费实验室申请

前段时间看到东方集成提供这个服务,提供免费实验室,详细http://www.jicheng.net.cn/rental/cart/lab_apply.html 分享给大家,有实际用过的希望给讲讲内幕…

查看全部问答>

串口通信中遇到的问题

CPU是STM32F103CB,无操作系统。 通过UART1接受GPRS发来的数据,在中断函数中 USART1_IRQHandler 中进行处理 unsigned char a_GPRSData[500]; unsigned int  g_DataLength; void USART1_IRQHandler(void)        ...…

查看全部问答>

MPLAB编译问题

Clean: Deleting intermediary and output files. Clean: Deleted file \"C:\\Program Files\\Microchip\\lzz1\\lzz001.cce\". Clean: Done. Executing: \"C:\\HT-PIC\\BIN\\PICC.EXE\" -C -E\"lzz001.cce\" \"lzz001.c\" -O\"lzz001.obj\" -Q - ...…

查看全部问答>

有一个病毒高手帮我做掉它!

是一个U盘感染的病毒,在D盘中出现一个autorun.inf文件,同时点D盘右健会多一个\"浏览\"项,而这个文件的内容是: [autorun] open=.\\recycled\\info.exe shell\\1=浏览 shell\\1\\Command=.\\recycled\\info.exe shellexecute=.\\recycled\\info. ...…

查看全部问答>

DS18b20温度显示问题

#include sbit ds=P3^7; //0-F数码管显示(共阴) unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-9数码管的显示,共阴带小数点 unsigned char code tabledot[]={ ...…

查看全部问答>

关于nios烧写问题、求大神帮助

使用的是ep2s180f1020i4的片子,配置芯片epcs64,用flash programmer 进行烧写,从状态栏来看 烧写成功了,但是上电后没有任何反应,不止nios没跑起来,连逻辑都没烧进去,但是在线运行时是正常的,单独烧写逻辑从新上电也是可以起来的,就是用nios ...…

查看全部问答>

第一版开关电源(新手入门,大神勿喷!)

经过再三调试,我人生的第一版开关电源诞生了,激动ing,不过也仍有很多问题没有解决!希望高手指教!这里好像不能传附件啊,详细过程在下面链接里面了,有兴趣的亲可以看看,多多指教!…

查看全部问答>