当前位置:首页 > 单片机 > 单片机
[导读]备注:分析的是OK210开发板自带的uboot_smdkv210,可能有些部分和其他版本不太一样,但是原理都类似。编译u-boot的步骤makeforlinx_linux_configmake1212首先生成配置文件,然后编译源码,依次看看这些命令都干了些什

备注:分析的是OK210开发板自带的uboot_smdkv210,可能有些部分和其他版本不太一样,但是原理都类似。

编译u-boot的步骤
makeforlinx_linux_configmake1212

首先生成配置文件,然后编译源码,依次看看这些命令都干了些什么事情

配置过程
#forlinxaddforlinx_linux_config:unconfig@$(MKCONFIG)$(@:_config=)arms5pc11xsmdkc110samsungs5pc110linux@echo"TEXT_BASE=0xcc800000">$(obj)board/samsung/smdkc110/config.mk12341234
清除上一次配置的文件

此目标依赖unconfig目标,因此先调用unconfig的命令,命令如下

unconfig:@rm-f$(obj)include/config.h$(obj)include/config.mk$(obj)board/*/config.tmp$(obj)board/*/*/config.tmp$(obj)include/autoconf.mk$(obj)include/autoconf.mk.dep$(obj)board/$(VENDOR)/$(BOARD)/config.mk1234512345

执行的操作主要是删除上一次配置生成的配置文件。

开始配置操作

在Makefile中以@开头的命令表示,在命令执行的时候不在终端上打印信息。
$(MKCONFIG)变量在Makefile的101行有定义,如下:

MKCONFIG:=$(SRCTREE)/mkconfigexportMKCONFIG1212

$(@:_config=)这句话的意思是将 forlinx_linux_config的_config用空白代替只剩下forlinx_linux,
其中$(srcfiles:xxx=ccc)是Makefile的规则,用等号后边的ccc替代srcfiles中等号前边的xxx,
$(@) = $@代表目标,即在命令行输入的make forlinx_linux_config中的forlinx_linux_config。
因此@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110 linux
的意思就是调用u-boot根目录的mkconfig脚本并将 forlinx_linux arm s5pc11x smdkc110 samsung s5pc110 linux作为参数传递给脚本。

mkconfig文件

在文件的头部的注释已经交代了文件的作用和调用的格式

#Scripttocreateheaderfilesandlinkstoconfigure#U-Bootforaspecificboard.##Parameters:TargetArchitectureCPUBoard[VENDOR][SOC]#1234512345

$0=mkconfig(脚本文件名)$1=Target(目标)forlinx_linux$2=Architecture(架构)arm$3=CPU(CPU型号)s5pc11x$4=Board(开发板名)smdkc110$5=VENDOR(生产商)samsung$6=SOC(芯片名)s5pc11012345671234567

最后一个linux是OK210的工程师自己添加的用于区别Android版本的内核和linux的内核,没有什么实质用途。(个人猜测)

APPEND=no#Default:CreatenewconfigfileBOARD_NAME=""#Nametoprintinmakeoutputwhile[$#-gt0];docase"$1"in--)shift;break;;-a)shift;APPEND=yes;;-n)shift;BOARD_NAME="${1%%_config}";shift;;*)break;;esacdone12345678910111234567891011

接下来定义了两个变量为后边配置过程做准备,用途注释已经写的很清楚,APPEND=no是表示需要重新创建配置文件的标志。
再然后循环:如果参数个数大于零就执行循环,然后再循环里判断第一个参数(脚本可以有参数选项),很明显都不符合,所以直接跳出循环。

["${BOARD_NAME}"]||BOARD_NAME="$1"[$#-lt4]&&exit1[$#-gt7]&&exit1echo"Configuringfor${BOARD_NAME}board..."123456123456

将BOARD_NAME赋值为forlinx_linux,然后判断参数个数,小于4大于7(一般情况为大于6应该还是OK210的工程师修改了)就直接退出脚本,放弃执行。

创建软连接

接下来创建很多链接文件,这些操作是mkconfig脚本的主要工作,主要创建的链接文件如下:

if["$SRCTREE"!="$OBJTREE"];thenmkdir-p${OBJTREE}/includemkdir-p${OBJTREE}/include2cd${OBJTREE}/include2rm-fasmln-s${SRCTREE}/include/asm-$2asmLNPREFIX="../../include2/asm/"cd../includerm-rfasm-$2rm-fasmmkdirasm-$2ln-sasm-$2asmelsecd./includerm-fasmln-sasm-$2asmfi12345678910111213141516171234567891011121314151617

./include/asm --> asm-$2 (asm-arm)

#createlinkfors5pc11xSoCif["$3"="s5pc11x"];thenrm-fregs.hln-s$6.hregs.hrm-fasm-$2/archln-sarch-$3asm-$2/archfi12345671234567

regs.h --> $6.h (s5pc110.h)
asm-$2/arch --> arch-$3(arch-s5pc11x)

u-boot支持很多种开发板,很多种类型的CPU,所以要有一种通用得配置方式来方便移植;u-boot甚至linux内核都采用了这种方式:针对不同的处理器或者板子都有自己的头文件和文件夹,但是真正的编译过程却不直接使用,而是在配置阶段创建这些头文件或者文件夹的软连接,并命名为一种通用的名字。在编译的时候通过这些软连接访问真正需要的文件。例如,在u-boot的include目录下有一个asm的目录,此目录就是在配置完后生成的一个软连接,当配置的是arm架构时,此文件是asm-arm的软连接。
创建make时用到的包含文件 config.mk
##CreateincludefileforMake#echo"ARCH=$2">config.mkecho"CPU=$3">>config.mkecho"BOARD=$4">>config.mk["$5"]&&["$5"!="NULL"]&&echo"VENDOR=$5">>config.mk["$6"]&&["$6"!="NULL"]&&echo"SOC=$6">>config.mk1234567891012345678910
创建开发板特定的头文件 config.h
##Createboardspecificheaderfile#if["$APPEND"="yes"]#Appendtoexistingconfigfilethenecho>>config.helse>config.h#Createnewconfigfilefiecho"/*Automaticallygenerated-donotedit*/">>config.h#forlinxaddif["$7"="linux"]thenecho"#defineCONFIG_LINUX_FORLINX1">>config.helseecho"#defineCONFIG_ANDROID_FORLINX1">>config.hfi#echo"#include">>config.h#forlinxchangeforlinuxandandroidecho"#include">>config.h12345678910111213141516171819202122231234567891011121314151617181920212223

因为上边已经把APPEND设置为NO,所以执行> config.h即创建config.h头文件,并向config.h中写入
/* Automatically generated - do not edit */
"#define CONFIG_LINUX_FORLINX 1
以及#include
同样是OK210的工程师加入的
#include 即#include
注意:创建软连接的操作全都是在u-boot根目录的include子目录中执行的。

配置脚本mkconfig结束。

mkconfig脚本小结

一共创建了三个连接文件,
./include/asm --> asm-$2 (asm-arm)
regs.h --> $6.h (s5pc110.h)
asm-$2/arch --> arch-$3(asm-arm -> arch-s5pc11x)
以及include/config.mk和include/config.h,其中include/config.mk文件中记录着u-boot的版本信息,include/config.h中包含了 configs/$1.h,此文件里记录着是很多很多以CONFIG_开头的宏,是开发板u-boot的主配置信息。

主Makefile版本号相关
VERSION=1PATCHLEVEL=3SUBLEVEL=4EXTRAVERSION=U_BOOT_VERSION=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)VERSION_FILE=$(obj)include/version_autogenerated.h123456123456

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Sept. 8, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季NVIDIA(英伟达) Blackwell平台规模化出货,以及北美CSP业者持续扩大布局General Server(通用型...

关键字: SSD DDR4 服务器

Sept. 4, 2025 ---- Apple(苹果)即将发布iPhone 17、iPhone 17 Air(暂名)、iPhone 17 Pro及Pro Max四款旗舰新机,除了外观辨识度升级,处理器性能、散热和拍摄功...

关键字: iPhone 16 A19处理器 折叠机

Sept. 3, 2025 ---- 根据TrendForce集邦咨询最新发布的《2025近眼显示市场趋势与技术分析》报告,2025年随着国际品牌陆续推出AR眼镜原型,以及Meta预计在近期发布AR眼镜Celeste,市...

关键字: AR眼镜 OLED

Sept. 2, 2025 ---- TrendForce集邦咨询表示,2025年第二季DRAM产业因一般型DRAM (Conventional DRAM)合约价上涨、出货量显著增长,加上HBM出货规模扩张,整体营收为3...

关键字: DRAM 智能手机 ASP

Sept. 1, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季因中国市场消费补贴引发的提前备货效应,以及下半年智能手机、笔电/PC、Server新品所需带动,整体晶圆代工产能利用率与出货...

关键字: 晶圆代工 智能手机 笔电

Aug. 28, 2025 ---- 根据TrendForce集邦咨询最新调查,2025年第二季NAND Flash产业虽面临平均销售价格(ASP)小幅下滑,所幸原厂减产策略缓解供需失衡,叠加中、美两大市场政策推动,整体...

关键字: NAND Flash SSD AI

Aug. 26, 2025 ---- NVIDIA(英伟达)近日推出的Jetson Thor被视为机器人的物理智慧核心,以Blackwell GPU、128 GB记忆体堆叠出2070 FP4 TFLOPS AI算力,是前...

关键字: 机器人 大型语言模型 AI算力

Aug. 21, 2025 ---- 根据TrendForce集邦咨询最新液冷产业研究,随着NVIDIA GB200 NVL72机柜式服务器于2025年放量出货,云端业者加速升级AI数据中心架构,促使液冷技术从早期试点迈...

关键字: AI 数据中心 服务器

除了充电电路外,锂电池的放电过程也需要保护。锂电池的放电电压不能低于3.0V,否则电池寿命会大幅缩短。为了实现这一保护,工程师们设计了DW01芯片与8205 MOS管的电路组合。DW01芯片能够监控锂电池的放电电压和电流...

关键字: 锂电池 电池

在PCB设计的宏伟蓝图中,布局与布线规则犹如精密乐章中的指挥棒,是铸就电路板卓越性能、坚不可摧的可靠性及经济高效的制造成本的灵魂所在。恰如一位巧手的园艺师,合理的布局艺术性地编排着每一寸空间,既削减了布线交织的繁复迷宫,...

关键字: PCB 电路板
关闭