本文主要介绍一下,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流程的更多相关文章

  1. 配置Linux Kernel时make menuconfig执行流程分析

       在编译内核前,一般是根据已有的配置文件(一般在内核根目录下的arch/arm/configs/文件夹下,把该目录下的xxx_defconfig文件拷贝到内核根目录下,并重命名为.config)来 ...

  2. 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解

    本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...

  3. u-boot启动流程分析(1)_平台相关部分

    转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—> ...

  4. Zephyr-开发流程

    开发流程 前提1:检查你的Linux主机满足入门指南中规定的最低要求. 具体请参考 :  物联网操作系统-Zephyr 前提2: 确保SDK的环境变量和zephyr项目的环境变量. 终端执行: $ e ...

  5. 【linux】 Makefile之make menuconfig /uImage

      欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http: ...

  6. CentOS的启动流程

    因6和7俩个系列的启动流程有区别,所以我把他们分开来写 linux可看作是内核和根文件系统组成我们把内核单独拿出来总结一下 CentOS6系列启动流程 首先总结一下总体的流程,接下来展开来叙述:POS ...

  7. linux文件系统启动流程、启动脚本

    linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...

  8. 【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核

    [平台设备驱动机制的编程流程] [如何将驱动静态的编译进内核镜像] 1.添加资源(dev-led.c) 1.1:一般来说,系统习惯上将资源放在arch/arm/plat-samsung/目录中 cp ...

  9. Samsung_tiny4412(驱动笔记03)----字符设备驱动基本操作及调用流程

    /*********************************************************************************** * * 字符设备驱动基本操作及 ...

随机推荐

  1. 利用pca分析fmri的生理噪声

    A kernel machine-based fMRI physiological noise removal method 关于,fmri研究中,生理噪声去除的价值:一.现在随着技术的提升,高场fm ...

  2. easyui datagrid 动态生成列

    for (var item_key in data) {//遍历json对象的每个key/value对,p为key var reg = /^score\d+/gi; for (var key in d ...

  3. mac下源码安装redis

    转载:http://www.jianshu.com/p/6b5eca8d908b 下载安装包 redis-3.0.7.tar.gz 官网地址:http://redis.io/download 解压:t ...

  4. entity framework 去缓存

    MSDN上对MergeOption枚举的定义为: 成员名称 说明 AppendOnly 不会从数据源加载对象上下文中已存在的对象.这是查询或调用 EntityCollection<(Of < ...

  5. Jpeglib读取jpg文件 【转】

    http://blog.csdn.net/blues1021/article/details/45424695 整理自 : http://hi.baidu.com/lewutian/item/e8ee ...

  6. Android OpenGL加入光照和材料属性

    转载请注明出处:[huachao1001的专栏:http://blog.csdn.net/huachao1001] 在上一篇文章[ Android OpenGL显示随意3D模型文件 ]中.我们学习了怎 ...

  7. 使用MapReduce实现二度人脉搜索算法

    一,背景介绍 在新浪微博.人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类似“你可能感兴趣的人”.“间接关注推荐”等好友推荐的功能,其中就包含了二度人脉算法. 二,算法实现 原 ...

  8. 纯 PHP 代码最好在文件末尾删除 PHP 结束标记

    如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记.这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图. & ...

  9. PostgreSQL 9.5,带来 UPSERT 等新特性

    PostgreSQL 9.5于2016年1月7日正式发布,此版本主要带来了以下几个方面的特性: UPSERT, Row Level Security, and Big Data 1)UPSERTUPS ...

  10. zabbix_zatree第三方插件

    1.下载zatree第三方插件https://github.com/spide4k/zatree.git 2.检查PHP环境需要支持php-xml.php-gd.php-mysql 3.先备份当前za ...