builtroot make menuconfig流程
本文主要介绍一下,buildroot(buildroot-2018.02.1)的make menuconfig。众所周知,在我们执行menuconfig时,会生成一个图形化界面,然后进行相关的配置。同样,kernel 也有同样的配置方式,buildroot应该是借鉴kernel的。

那么,这个界面到底是怎样生成的呢?接下来,我来详细的介绍。
1. 顶层Makefile解析
menuconfig: $(BUILD_DIR)/buildroot-config/mconf prepare-kconfig
$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
首先看依赖项,有两个,mconf和prepare-kconfig,ok,一个一个解决。
HOSTCFLAGS = $(CFLAGS_FOR_BUILD)
$(info ${HOSTCFLAGS})
$(info $(origin CFLAGS_FOR_BUILD))
export HOSTCFLAGS #mkdir -p /home/frank/test/buildroot/buildroot-2018.02./output/build/buildroot-config/lxdialog
#PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
obj=/home/frank/test/buildroot/buildroot-2018.02./output/build/buildroot-config -C support/kconfig -f Makefile.br mconf
.PHONY: prepare-kconfig
prepare-kconfig: outputmakefile $(BUILD_DIR)/.br2-external.in
$(Q) echo ""
$(BUILD_DIR)/buildroot-config/%onf:--->$(BUILD_DIR)/buildroot-config/mconf
mkdir -p $(@D)/lxdialog
$(info $(HOST_PKG_CONFIG_PATH))
$(info $(origin HOST_PKG_CONFIG_PATH))
$(info $(MAKE))
$(info $(origin MAKE))
$(info $(HOSTCC_NOCCACHE))
$(info $(origin HOSTCC_NOCCACHE))
PKG_CONFIG_PATH="$(HOST_PKG_CONFIG_PATH)" $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" \
obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG)) # We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will
# recognize that if it's still at its default $(CONFIG_DIR)/defconfig
# BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/home/frank/test/buildroot/buildroot-2018.02./output/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/home/frank/test/buildroot/buildroot-2018.02./output/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/home/frank/test/buildroot/buildroot-2018.02./output/build/buildroot-config/tristate.config BR2_CONFIG=/home/frank/test/buildroot/buildroot-2018.02./.config HOST_GCC_VERSION="4 8" BUILD_DIR=/home/frank/test/buildroot/buildroot-2018.02./output/build SKIP_LEGACY= /home/frank/test/buildroot/buildroot-2018.02./output/build/buildroot-config/mconf Config.in
COMMON_CONFIG_ENV = \
BR2_DEFCONFIG='$(call qstrip,$(value BR2_DEFCONFIG))' \
KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \
KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
BR2_CONFIG=$(BR2_CONFIG) \
HOST_GCC_VERSION="$(HOSTCC_VERSION)" \
BUILD_DIR=$(BUILD_DIR) \
SKIP_LEGACY=
prepare-kconfig又依赖 outputmakefile 和 $(BUILD_DIR)/.br2-external.in
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
.PHONY: outputmakefile
outputmakefile:
echo $(origin NEED_WRAPPER)
echo $(origin Q)
echo $(origin TOPDIR)
echo $(origin O)
echo ${NEED_WRAPPER}
ifeq ($(NEED_WRAPPER),y)
$(info "xxxxxxx")
$(Q)$(TOPDIR)/support/scripts/mkmakefile $(TOPDIR) $(O)
endif # Even though the target is a real file, we mark it as PHONY as we
# want it to be re-generated each time make is invoked, in case the
# value of BR2_EXTERNAL is changed.
# support/scripts/br2-external -k -o "/home/frank/test/buildroot/buildroot-2018.02.1/output/build/.br2-external.in"
.PHONY: $(BUILD_DIR)/.br2-external.in
$(BUILD_DIR)/.br2-external.in: $(BUILD_DIR)
$(Q)support/scripts/br2-external -k -o "$(@)" $(BR2_EXTERNAL)
outputmakefile主要是 看 NEED_WRAPPER的值,由于执行make menuconfig时,NEED_WRAPPER的条件并不满足,所以当前outputmakefile这个目标并没有执行什么实际的动作。
$(BUILD_DIR)/.br2-external.in的作用是 生成.br2-external.in文件,在上面的#19行 已经指出了具体的执行命令。当前并没有太大作用,所以不做过多说明了。
接着我们再看$(BUILD_DIR)/buildroot-config/%onf,主要就是
PKG_CONFIG_PATH="\$(HOST_PKG_CONFIG_PATH)" \$(MAKE) CC="\$(HOSTCC_NOCCACHE)" HOSTCC="\$(HOSTCC_NOCCACHE)" \
obj=\$(@D) -C \$(CONFIG) -f Makefile.br \$(@F)
这行命令生成了mconf可执行程序。非常重要的节点。
接下来再执行\$(COMMON_CONFIG_ENV) \$< \$(CONFIG_CONFIG_IN),即 mconf Config.ini,那么最开始给出的图形界面就弹出来了。
备注:上述的Makefile中我自己加了一些调试代码,如\$(info ), echo
builtroot make menuconfig流程的更多相关文章
- 配置Linux Kernel时make menuconfig执行流程分析
在编译内核前,一般是根据已有的配置文件(一般在内核根目录下的arch/arm/configs/文件夹下,把该目录下的xxx_defconfig文件拷贝到内核根目录下,并重命名为.config)来 ...
- 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...
- u-boot启动流程分析(1)_平台相关部分
转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—> ...
- Zephyr-开发流程
开发流程 前提1:检查你的Linux主机满足入门指南中规定的最低要求. 具体请参考 : 物联网操作系统-Zephyr 前提2: 确保SDK的环境变量和zephyr项目的环境变量. 终端执行: $ e ...
- 【linux】 Makefile之make menuconfig /uImage
欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http: ...
- CentOS的启动流程
因6和7俩个系列的启动流程有区别,所以我把他们分开来写 linux可看作是内核和根文件系统组成我们把内核单独拿出来总结一下 CentOS6系列启动流程 首先总结一下总体的流程,接下来展开来叙述:POS ...
- linux文件系统启动流程、启动脚本
linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...
- 【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核
[平台设备驱动机制的编程流程] [如何将驱动静态的编译进内核镜像] 1.添加资源(dev-led.c) 1.1:一般来说,系统习惯上将资源放在arch/arm/plat-samsung/目录中 cp ...
- Samsung_tiny4412(驱动笔记03)----字符设备驱动基本操作及调用流程
/*********************************************************************************** * * 字符设备驱动基本操作及 ...
随机推荐
- 二十四种设计模式:解释器模式(Interpreter Pattern)
解释器模式(Interpreter Pattern) 介绍给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例有一个Message实体类,某个类对它的 ...
- Servlet拦截静态图片的解决方案
一.现象 建立一个使用Freemarker的Web Project程序. Product.ftl中的代码为: <!DOCTYPE html PUBLIC "-//W3C//DTDHTM ...
- 报错:maven:java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets
运行报错: maven:java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets 找不到Charsets这个类 上网查了以后,是因为 ...
- centos关闭sudo的ldap认证
在新服务器上部署项目时,运行sudo命令会卡住很久,然后报错 sudo:ldap_start_tls_s(): Can't contact LDAP server 简直不能忍. 一番研究后发现是lda ...
- Groovy(java)+Spock+IDEA+maven+Jenkins+SVN+maven-surefire-plugin+maven-surefire-report-plugin/maven-antrun-extended-plugin集成接口测试框架
文章为原创,未经本人授权禁止转载. 一.spock框架环境搭建. 二.基于spock框架的脚本开发. 三.基于spock框架的用例执行并生成HTML报告. 四.集成jenkins生成HTML报告. 五 ...
- AFNetworking 下载文件断点续传操作
一:本示例代码包括: 文件下载,写入指定目录 下载进度,回调Progress; 断点续传,下载暂停,继续操作: 二:本项目 适用于 AFNetworking 1.x 版本 #pragma mark 断 ...
- chromedriver Capabilities & ChromeOptions
Capabilities are options that you can use to customize and configure a ChromeDriver session. This pa ...
- webDriver API——第14部分Color Support
class selenium.webdriver.support.color.Color(red, green, blue, alpha=1) Bases: object Color conversi ...
- html5:article与section元素
article元素 aiticle元素代表文档.页面或应用程序中独立的.完整的.可以肚子被外部引用的内容.它可以使一片博客或报刊中的文章.帖子. 一个article元素 ...
- C/C++中float和double的存储结构(转)
在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算. ...