make xxx_deconfig过程

news2024/11/28 20:57:46

在uboot中,所写的shell脚本:mx6ull_alientek_emmc.sh的内容如下:

#!/bin/bash
  2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
  3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
  4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

首先是清理工程
其次就是make mx6ull_14x14_ddr512_emmc_defconfig
最后就是编译

在编译uboot之前要使用“make xxx_deconfig”命令来配置值uboot,顶层Makefile中有如下代码:

# To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets when calling make, including
# mixing *config targets and build targets.
# For example 'make oldconfig all'.
# Detect when mixed targets is specified, and make a second invocation
# of make so .config is not included in this case either (for *config).

version_h := include/generated/version_autogenerated.h
timestamp_h := include/generated/timestamp_autogenerated.h

no-dot-config-targets := clean clobber mrproper distclean \
			 help %docs check% coccicheck \
			 ubootversion backup

config-targets := 0
mixed-targets  := 0
dot-config     := 1

ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
	ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
		dot-config := 0
	endif
endif

ifeq ($(KBUILD_EXTMOD),)
        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
                config-targets := 1
                ifneq ($(words $(MAKECMDGOALS)),1)
                        mixed-targets := 1
                endif
        endif
endif

ifeq ($(mixed-targets),1)
# ===========================================================================
# We're called with mixed targets (*config and build targets).
# Handle them one by one.

PHONY += $(MAKECMDGOALS) __build_one_by_one

$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
	@:

__build_one_by_one:
	$(Q)set -e; \
	for i in $(MAKECMDGOALS); do \
		$(MAKE) -f $(srctree)/Makefile $$i; \
	done

else
ifeq ($(config-targets),1)
# ===========================================================================
# *config targets only - make sure prerequisites are updated, and descend
# in scripts/kconfig to make the *config target

KBUILD_DEFCONFIG := sandbox_defconfig
export KBUILD_DEFCONFIG KBUILD_KCONFIG

config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

else
# ===========================================================================
# Build targets only - this includes vmlinux, arch specific targets, clean
# targets and others. In general all targets except *config targets.

ifeq ($(dot-config),1)
# Read in config
-include include/config/auto.conf
  • 定义了变量version_h,此变量保存版本号文件,此文件是自动生成的。
  • timestamp_h保存时间戳文件,此文件也是自动生成的。
  • 将MAKECMDGOALS中不符合no-dot-config-targets的部分过滤掉,剩下的如果不为空的话就条件成立。MAKECMDGOALS是make的一个环境变量,会保存指定的终极目标列表,比如执行“make mx6ull_alientek_emmc_defconfig”,那么 MAKECMDGOALS就为 mx6ull_alientek_emmc_defconfig。很明显过滤后为空,所以条件不成立,变量dot-config依旧为1。
config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

有目标与之匹配,当输入“make xxx_defconfig”的时候就会匹配到%config目标,目标“%config”依赖于scripts_basic、outputmakefile、FORCE。

FORCE在顶层Makefile的1610行有如下定义

PHONY += FORCE
FORCE:

可以看出FORCE是没有规则和依赖的,所以每次都会重新生成FORCE。
当FORCE作为其它目标的依赖时,由于FORCE总是被更新过的,所以依赖所在的规则总是会执行的。
outputmakefile 无效,只有 scripts_basic 是有效的。

Q=@或为空
MAKE=make

变量build是在scripts/Kbuild.include 文件中有定义

###
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
# Usage:
# $(Q)$(MAKE) $(build)=dir
build := -f $(srctree)/scripts/Makefile.build obj

build =-f ./scripts/Makefile.build obj

scripts_basic展开后

scripts_basic:
@make -f ./scripts/Makefile.build obj=scripts/basic //也可以没有@,视配置而定
@rm -f . tmp_quiet_recordmcount //也可以没有@

所以最后

%config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@

展开为:

@make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig

配置uboot的过程

make mx6ull_14x14_ddr512_emmc_defconfig V=1

在这里插入图片描述
scripts/Makfile.build中
scripts_basic 目标对应的命令

@make -f ./scripts/Makefile.build obj=scripts/basic

%config 目标对应的命令

@make -f ./scripts/Makefile.build obj=scripts/kconfig xxx_defconfig

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[数据结构习题]队列——用栈实现队列

[数据结构习题]队列——用栈实现队列 👉知识点导航💎:【数据结构】栈和队列 👉[王道数据结构]习题导航💎: p a g e 85.3 page85.3 page85.3 本节为栈和队列的综合练习题 题目描述: &#x1f…

chatgpt赋能python:Python实现CSV文件只取某两列的方法详解

Python实现CSV文件只取某两列的方法详解 介绍 CSV是一种常见的数据格式,通常使用逗号或分号分隔不同的字段。在处理CSV文件时,我们经常需要只提取其中的某些列,以便进行进一步的分析或处理。使用Python语言,可以很方便地实现这一…

MTK 相机功耗分析流程

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、硬件功耗二、相机软件功耗三、参考文档 一、硬件功耗 1.1 硬件信息 以下硬件信息最好提前获取到 模块备注平台MTK or Qcom or sprdCPU频率大中小核…

【Python】Python系列教程-- Python3 列表(十二)

文章目录 前言访问列表中的值更新列表删除列表元素Python列表截取与拼接嵌套列表列表比较Python列表函数&方法 前言 往期回顾: Python系列教程–Python3介绍(一)Python系列教程–Python3 环境搭建(二)Python系列…

第一次使用Arduino IDE(mac os) 配置合宙ESP32C3(9.9包邮)且烧录代码的历程

目录 Arduino 配置ESP32 1. Arduino 请更新至最新版 2.科学上网 3.添加开发板管理URL 配置 1.连接开发板 2.Arduino IDE 的配置 3.烧录代码 Arduino 配置ESP32 1. Arduino 请更新至最新版 2.科学上网 3.添加开发板管理URL 首选项,编辑并添加 https://…

医疗实施-DRG基本知识

医疗实施-DRG基本知识 DRG常见名词定义: DRG(Diagnosis Related Groups):疾病诊断相关分组,是用于衡量医疗服务质量效率以及进行医保支付的一个重要工具。DRG 实质上是一种病例组合分类方案,即根据年龄、疾病诊断、合…

网络安全学术顶会——NDSS 2023 议题清单、摘要与总结(下)

51、Let Me Unwind That For You: Exceptions to Backward-Edge Protection 通过堆栈缓冲区溢出进行反向边控制流劫持是软件利用的终极目标。直接控制关键的堆栈数据和劫持目标使得攻击者特别喜欢这种利用策略。因此,社区已经部署了强大的反向边保护,如影…

Executor框架的成员

Executor框架的成员 (1)ThreadPoolExecutorThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadPool和CachedThreadPool。1) FixedThreadPool 。…

chatgpt赋能python:Python取某几行-掌握技巧提高效率

Python取某几行-掌握技巧提高效率 Python是一种简单易学、高效编程的语言。它也是一种非常强大的语言,适用于许多不同领域的应用程序。在处理文本文件和数据集时,Python的优势变得尤为突出。在这篇文章中,我们将重点介绍如何使用Python取某几…

Linux【网络编程】之深入理解UDP协议

Linux【网络编程】之深入理解UDP协议 一、传输层二、再谈端口号2.1 端口号划分 三、查看网络状态---netstat四、查看服务器进程ID---pidof五、UDP协议端格式5.1 理解报头 六、UDP的特点七、UDP的缓冲区问题八、常见基于UDP的应用层协议 在前面的几篇文章中我主要偏向于应用层介…

30分钟!从0到1,用ChatGPT+Python做一个AI起名网!

坚持6年,第629篇原创 现在利用ChatGPT可以做很多很多事情,而对于我们程序员来说,是机会也是挑战!因为原来很多工种,很多技术问题现在可以用非常廉价的技术去获取,成本更低了! 打个比方&#xff…

【LeetCode】《LeetCode 101》第十章:神奇的位运算

文章目录 10.1 常用技巧10.2 位运算基础问题461. 汉明距离(简单)190. 颠倒二进制位(简单)136. 只出现一次的数字(简单) 10.3 二进制特性342. 4的幂(简单)318. 最大单词长度乘积&…

Vue+springboot舞蹈基础课程视频学习分享平台的实现和开发

基于java语言设计并实现了舞蹈基础数据平台。该系统基于B/S即所谓浏览器/服务器模式,应用Springboot框架,选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、舞蹈类型管理、舞蹈视频管理、用户留言、管理员管理、系统管理等功能模块。 重…

springboot+vue+elementui计算机专业课程选课管理系统vue

本系统的主要任务就是负责对学生选课。主要用户为老师、学生,其中,学生可对自己的信息进行查询,可以进行选课,也可以进行删除已选课程,教师可对学生和课程的信息进行查询,教师拥有所有的权限,可以添加删除学生信息。系统提供界面,操作简单。 为实现这些功能,系统一个…

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差?

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差? 山区倾斜摄影三维模型数据出现几何坐标偏差的原因可能有很多,其中一些常见的原因包括不同地图投影系统之间的转换问题、GPS定位误差、测量设备精度问题、摄影…

C++入门:引用、内联函数、auto关键字

目录 一:引用 (1)概念 (2)使用 (3)引用的特性 (4)引用的使用场景 【1】做参数 【2】做返回值 (5) 引用的权限问题 (6)引用和指针的区别 【1】引用的底层实现 【2】指针和引用的一些不同 二:内联函数 (1)宏函数 【1】 宏的优点 【2】宏的缺…

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

目录 一、学习内容二、数据库事务三、JDBC 的事务管理四、事务的四大特性五、MyBatis六、MyBatis 核心配置文件和基本使用七、查询 student 表(1) 实体映射文件 mapper(2) 读取核心配置文件, 拿到 SqlSession 八、字段和属性名映射(1) mapUnderscoreToCamelCase(2) 完整的 sett…

【Linux】基本开发工具包使用

目录 一, yum ——linux软件包管理器 1. 软件包是啥子? 2. yum基本使用 1. 步骤: 2. 开发工具推荐(centos 7.6) 二,vim —— linux文本编辑器 1. Normal mode —— 命令模式(记不住没关系&#x…

C#,码海拾贝(33)——约化“一般实矩阵”为“赫申伯格矩阵”的“初等相似变换法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 矩阵类 /// 作者&#xff1a;周长发 /// 改进&#xff1a;深度混淆 /// https://blog.csdn.net/beijinghorn /// </summary> public partial class Matrix {…

2023CISCN初赛

两天时间题量还挺大的&#xff0c;简单记录 文章目录 misc签到卡pyshell国粹被加密的生产流量网络安全人才实战能力评价 webunzipdumpitBackendService reversebabyRE pwnfuncanary烧烤摊儿 crypto基于国密SM2算法的密文分发可信度量Sign_in_passwd misc 签到卡 就是做了个p…