uboot配置过程详解

IMX6ULL移植篇-uboot网络配置工作 uboot网络配置 ip地址以及ping电脑 阅读详情

当我们在编译uboot的时候,要分为两个阶段,一个阶段是配置,配置用的命令是 make x210_sd_config。配置完成后开始正式的编译,命令为 make,当然,编译命令可以加什么的参数,比如多线程编译:make -j4,比如静默编译:make -s等。在这一篇文章中,我将单独详细分析uboot的配置过程。

1、主Makefile中配置相关部分

首先,目光转向主Makefile,在2589行有如下程序:

x210_sd_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
    @echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

显然,x210_sd_config 是Makefile的一个目标。其依赖为unconfig,在主Makefile的473行可以看到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.mk

这里插播一句:make中命令行前面加上at符号@,就是在make执行时候,输出的信息中,不要显示此行命令。
可以看出,unconfig其实是执行了一个删除命令,将配置过程中生成的文件全部删掉,达到未配置的效果。保证重新配置时输出文件的纯粹性。

而x210_sd_config下面执行了两句指令,首先看第二条:创建了文件config.mk,并将字符串"TEXT_BASE = 0xc3e00000"写入到该文件中。 TEXT_BASE 变量实际上指定了链接地址,在此不赘述。

重点分析第一条指令,MKCONFIG变量出现在Makefile的第101行,其定义如下,其代表了根目录下的mkconfig脚本文件:

MKCONFIG    := $(SRCTREE)/mkconfig

所以说第一条指令的意思就是执行mkconfig文件,并且传进了6个参数,尤其需要分析的是第一个参数$(@:_config=),其实这里是用了一个比较高级的Makefile语法,$(a:patternA=patternB),这样的语法表示把a变量里的形式为patternA的换成为patternB,然后输出。那么在这个例子里,a变量换成了@,它的意思与shell里@的意思是一样的,就是输入进来的所有的参数。在这里,@就是x210_sd_config,patternA就是_config,patternB就是空,所以$(@:_config=)的实际表示为x210_sd。

传参含义
x210_sdTarget
armArchitecture
s5pc11xCPU
x210Board
samsungVENDOR
s5pc110SOC
2、mkconfig脚本文件

从第一部分可以看出,配置过程其实就是执行了根目录下的mkconfig文件,所以,这一小部分详细分析该shell脚本。

2.1 前期准备
APPEND=no   # Default: Create new config file
BOARD_NAME=""   # Name to print in make output

while [ $# -gt 0 ] ; do
    case "$1" in
    --) shift ; break ;;
    -a) shift ; APPEND=yes ;;
    -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
    *)  break ;;
    esac
done

#如果BOARD_NAME为空,那么就执行后边的赋值
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"

#传入参数的数量应该在4到6之间,因为[VENDOR] [SOC]这两个参数可以不传。
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1

echo "Configuring for ${BOARD_NAME} board..."

这一部分代码主要是对传入的参数数目进行了校验,给BOARD_NAME变量赋值。

2.2 创建符号链接文件

mkconfig的33-118行都在创建符号链接文件,由于使用的是条件编译,针对不同CPU有不同的执行,所以在这里只列出跟我们CPU相关的。

#
# Create link to architecture specific headers
#
#在编译的时候uboot支持原地编译(编译结果跟.c/.S文件等混在一起)和自己定义输出文件夹两种方式
#如果[ "$SRCTREE" != "$OBJTREE" ]成立代表使用的是后者。我们现在暂时考虑原地编译的这种情况。
if [ "$SRCTREE" != "$OBJTREE" ] ; then
    mkdir -p ${OBJTREE}/include
    mkdir -p ${OBJTREE}/include2
    cd ${OBJTREE}/include2
    rm -f asm
    ln -s ${SRCTREE}/include/asm-$2 asm
    LNPREFIX="../../include2/asm/"
    cd ../include
    rm -rf asm-$2
    rm -f asm
    mkdir asm-$2
    ln -s asm-$2 asm
else
    cd ./include
    rm -f asm
    ln -s asm-$2 asm
fi
# create link for s5pc11x SoC
if [ "$3" = "s5pc11x" ] ; then
        rm -f regs.h
        ln -s $6.h regs.h
        rm -f asm-$2/arch
        ln -s arch-$3 asm-$2/arch
fi
if [ "$2" = "arm" ] ; then
    rm -f asm-$2/proc
    ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi

上面的程序创建了以下符号链接文件:
第一个:在include目录下创建asm文件,指向asm-arm。
第二个:在include目录下创建regs.h文件,指向include/s5pc110.h
第三个:在inlcude/asm-arm下创建一个arch文件,指向include/arch-s5pc11x
第四个:在include/asm-arm下创建一个proc文件,指向include/asm-arm/proc-armv

上面的过程在uboot实现可移植上非常重要,比如在include文件夹下每个Soc都会有自己的.h,里面放置着自己的寄存器的定义,例如s5pc110.h,该头文件会被很多.c文件所包含。如果我们的Soc现在不是S5PC110了,换成别的了,相应的头文件就要一个个修改,很麻烦且易出错。
而现在建立一个符号链接文件regs.h代替这个头文件,那么在移植的时候就只需要更改下regs.h指向的文件就好了。这就是uboot实现可移植性的一个重要手段——建立符号链接文件。

2.3 其他输出文件
# Create include file for Make

echo "ARCH   = $2" >  config.mk
echo "CPU    = $3" >> config.mk
echo "BOARD  = $4" >> config.mk

[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk

[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk

#
# Create board specific header file
#
if [ "$APPEND" = "yes" ]   # Append to existing config file
then
    echo >> config.h
else
    > config.h      # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h

上面对两个文件进行了操作:include/config.mk和include/config.h。

  • config.mk。将ARCH、CPU、BOARD、VENDOR、SOC五个参数写入该文件中,该文件将在主Makefile中引用并使用其中的变量。
  • config.h。该文件的主要内容只有一行,#include <configs/x210_sd.h>,x210_sd.h这个头文件是相当相当重要的,里面全都是宏定义,这些宏定义就是我们对当前开发板的移植。

shell中>表示创建文件,>>表示在该文件中追加内容。

详解TC3xx芯片的UCB UCB是UserCBlock的简称。TC3xx芯片提供了一块23 KB的Flash存储空间用作UCB配置。每个UCB大小为512 Byte,总共有46个UCB配置项,UCB的起始地址为0xAF400000,结束地址为0xAF405FFF。TC3xx芯片在启动时会运行固化在芯片内部的名为SSW的软件,SSW软件在运行时可以读取用户的配置信息来进行特定化的启动操作,比如SSW运行完后跳转到客户应用程序的起始地址,RAM是否需要进行初始化及冷启动还是热启动后初始化等,是否需要进行LBIST操作等。 阅读详情

相关推荐

uboot移植——uboot配置过程详解

    对uboot配置过程的解析,需要去分析mkconfig脚本,在顶层makefile中,向mkconfig脚本传输了以下6个参数: $1: x210_sd $2: arm $3: s5pc11x $4: x210 $5: samsumg $6: s5pc110     所以,$# = 6。 [ "${BOARD_NAME}" ] || BOARD_NAME="$1"     第23行:其实就是看BOARD_NAME变量是否有值,如果有值就维持不变;如果无值就给他赋值为$1,实际分析结果:BOAR

m0_56561130的博客 2234

如何配置 uboot

为一款 SOC 开发 uboot

lyndon 2079

五.linux开发之uboot移植(五)——uboot配置和编译过程详解

一.uboot主Makefile分析1 1、uboot version确定(Makefile的24-29行) Makefile代码部分 (1)uboot的版本号分3个级别: VERSION:主板本号 PATCHLEVEL:次版本号,即补丁版本号 SUBLEVEL:再次版本号 EXTRAVERSION:另外附加的版本信息 这4个用.分隔开共同构成了最终的版本号U_BOOT_V...

Mr.Wang的博客 1万+

uboot 的配置和编译过程

uboot 的配置和编译过程

Calmer_的博客 2308

Uboot配置过程详解1

1、mkconfig脚本的6个参数(主Makefile2589行设置) X210_sd_config : unconfig @$(MKCONFIG) $(@: config=)arm s5pc11x x210 samsung s5pc110 @echo “TEXT_BASE = 0xc3e00000” > (obj)board/Samsung/x210/config.mk X210_sd_config里的_config部分用空替换,得到:x210_sd,这就是第一个参数。 六个参数为: $1 : x2

qq_41680432的博客 510

uboot配置过程详解2

1、mkconfig(123-129行)创建include/config.mk文件。这个config.mk在主Makefile的133行被提取。 (1)创建include/config.mk文件是为了让Makefile第133行去包含。 (2)思考:uboot的配置和编译过程的配合。编译的时候需要ARCH=arm、CPU=XX等这些变量来指导编译 (因为你编译时必须知道目标CPU的架构是什么,目标CPU是那款CPU等等这些才可以指导编译,编译的过 程需要这些东西,那么配置就是为编译提供这些东西的),配置的时

qq_41680432的博客 423

嵌入式之uboot的配置和编译过程学习笔记

注: 以下内容来自朱老师物联网大讲堂uboot课件 一、uboot的主Makefile分析 1. uboot version确定 VERSION = 1 PATCHLEVEL = 3 SUBLEVEL = 4 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSION_FILE = $(obj)include/version_autogenerated.h uboot的版本号分3个级

donke_dong 902

u-boot配置文件:操作系统

u-boot.cfg配置文件在u-boot引导加载程序中起到了重要的作用,允许定制化的引导流程和环境设置。通过设置bootcmd命令、bootargs参数和环境变量,可以实现加载特定的内核映像、设备树和根文件系统,并设置启动参数。在这个过程中,u-boot.cfg配置文件起到了重要的作用,可以配置引导选项和环境变量,从而实现定制化的引导流程。在u-boot的配置文件(u-boot.cfg)中,我们可以对引导过程进行定制化设置,以适应特定的操作系统需求和硬件环境。u-boot.cfg配置文件结构。

UtuVerilog的博客 565

uboot学习之Makefile之配置过程

那么$(@:_config=)就是将smdk2410_config中的_config替换为空!如果定义了BUILD_DIR,则OBJTREE就为BUILD_DIR,如果没有定义就为CURDIR。$(@:_config=) @代表的是target smdk2410_config,这里可以看到BUILD_DIR 没有定义,所以SRCTREE == OBJTREE。(1)安装交叉编译工具arm-linux-gcc,否则编译报错。意思为创建链接文件asm指向asm-arm文件夹。config.h的内容。

weixin_42097108的博客 654

linux-uboot和套结字多线程

linux-uboot和套结字多线程linux-uboot和套结字多线程linux-uboot和套结字多线程linux-uboot和套结字多线程

2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛A题 农业灌溉系统优化

该摘要探讨了农业灌溉系统优化面临的复杂挑战,涉及智能灌溉技术的应用与资源配置问题。研究聚焦于一个1公顷的方形农场案例,该农场种植三种作物并面临动态环境条件(土壤类型、气象变化)。系统优化需平衡河流引水(非线性成本函数:C=50L^1.2+0.1Q^1.5)与储水罐灌溉(成本5元/升容积)两种方案,同时满足喷灌技术约束(喷头间距≥15米,覆盖半径15米)。关键矛盾体现在"平河旱储"的水资源调配策略与多作物需水量差异之间的协调,需通过传感器数据实时调整灌溉方案以实现效率最大化。(149字)

m0_60472361的博客 641

uboot - 配置过程

===分析uboot的配置过程(mkconfig脚本)=== uboot怎么配置?我们在终端上执行make NAME_config时的运行过程解析! 我们执行make x210_sd_config时会运行makefile的这两行程序,先分析下 第二行:echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

楷尘·极客 962

本地AI代码助手:智能解析大型代码库,实现自动化重构与理解

在软件开发中,大型代码库的理解与维护是常见挑战。传统方法依赖人工阅读和有限上下文工具,效率低下。通过结合检索增强生成(RAG)和多智能体(Multi-Agent)架构,现代AI工具能够智能解析代码结构,理解模块关系,并精准定位相关代码片段。这种技术不仅能提升代码探索效率,还能自动化执行重构、文档生成等任务,在遗留系统维护、快速上手新项目等场景中发挥关键作用。本文以blackboxaicode/cli为例,展示了如何利用其代码感知和Workflow Automation能力,高效处理复杂代码库。

weixin_30240349的博客 363

uboot主目录下Makefile文件的分析,以及配置过程分析

主Makefile文件的主要作用是配置和指导编译uboot,可以从大局观来看到Makefile的编译过程,理解uboot的可移植性,通过选择不同编译条件可以执行不同架构和SOC的uboot编译。

hwf1877655的博客 794

Vscode搭配Keil Assistant插件,头文件红色波浪线终极修复指南

本文详细解析了Vscode搭配Keil Assistant插件时出现头文件红色波浪线问题的根源,即ARMCC与ARMCLANG编译器的兼容性问题,并提供了三种实用解决方案:复制文件夹、创建符号链接和手动配置includePath,帮助开发者彻底修复错误,恢复代码跳转和自动补全功能。

q1w3e5r7t9y的博客 352

教你写出高质量SQL(实践必备)

1、查询SQL尽量不要使用select * ,而是select具体字段。 //反例子 select * from sys_user; //正例子 select id,name from sys_user; 理由: 只取需要的字段,节省资源、减少网络开销;select * 进行查询时,很可能就不会使用到覆盖索引,就会造成回表查询; 覆盖索引:只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。 例如: 回表查询:先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记..

ANGEL CITY 9996

2.uboot和系统移植-第4部分-2.4.uboot配置和编译过程详解

注意:uboot中配置和编译过程,所有的文件或者全局变量都是字符串形式的(不是指的C语言字符串的概念,指的是都是字符组成的序列)。uboot可移植性的实现原理:在uboot中有很多彼此平行的代码,各自属于各自不同的架构/CPU/开发板,我们在具体到一个开发板的编译时用符号连接的方式提供一个具体的名字的文件夹供编译时使用。这样就可以在配置的过程中通过不同的配置使用不同的文件,就可以正确的包含正确的文件。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。

woyingle8866的博客 323

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 285

uboot 配置 编译 连接全过程

根据README中 Porting Guide 的指示精神,我们要在新板子上移植UBoot,最快速的办法就是查看当前UBoot代码中是否有对相似于待移植板子的其他板子的支持(这应该又是一个可考虑成为习惯甚至本能的做法。也即拿到不熟悉的软件包后,看看里面有没有自己熟悉的、或者和自己目前要做的东西很相似的部分,从这个部分入手往往能很快的解决问题)。很幸运,我们在里面找到了三星公司所生产的SMDK241

学无止境 2606

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

qq_45834835的博客 2603

自定义Usecase/Pipeline

Summary of Custom Usecase and Pipeline Configuration in SA8650 QCX Framework This article elaborates on the complete process of customizing a new Usecase and Pipeline based on the SA8650 QCX framework to meet OEM and Tier1 customization requirements, with

qq_39257814的博客 929

uboot源码配置编译过程

1

qq_42798939的博客 458

如何使用Github创建一个完全免费的个人网站

摘要: 本文详细介绍如何利用Github Pages免费搭建个人静态网站,适合零基础用户。首先需注册Github账号并创建特定命名的仓库(格式:用户名.github.io),然后通过网页或命令行创建index.html文件作为网站首页。完成后可通过"仓库设置- Pages"获取网站链接。文章还包含GitHub Desktop的安装使用、代码提交指南及常见问题自检方法,并说明即使Github被墙也可迁移至国内平台(如码云)。整个过程无需编程基础,仅需15分钟即可完成基础网站搭建。

安德洛夫 1514

X210之uboot配置过程详解

uboot配置过程详解 //下面的代码还是在主Makefile里(2589-2591行) x210_sd_config : unconfig @$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110 /* (1) 给mkconfig脚本传6个参数 第一个参数:$(@:_config=)($@相当于x210_sd_config;:相当于加工;_config=相当于将目标的“_config”替换成 空);因此第一

fade12345678的博客 336

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

uboot的配置过程

这几天,在做uboot的移植,有很多现成的方法。无非就是第一步怎么做,第二步怎么做,做来做去。虽然是做出来了,但是还是有很多迷惑。为什么这么做? 为什么这么做就好使?这些文件时怎么组织起来的?是怎么连接在一起的?于是便狠下心来,查查书,思考思考,下面就把这几天的成果跟大家分享一下。         我们在进行uboot的移植时。在我们修改完代码时。         首先做的是执行这样一条指令

星河_SR的专栏 2043

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

UBoot的配置编译过程

UBoot的配置编译过程 UBoot,全称 Universal BootLoader,官方名称为 DENX U-Boot 或者 Das U-Boot,是嵌入式系统业内用的最多的BootLoader。之所以能在名字开头冠以 Universal 一字,原因之一,是因为它能支持众多的CPU体系结构,包括x86,powerpc,mips,arm,blackfin等等;原因之二,是因为它能在上面这

yongbudl2012的专栏 1551

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Shell中if的使用详解_&&与||的使用详解
下一篇: PhpStorm 配置服务器(server)详解
隋边边
博客等级 码龄11年 304粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值