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)----字符设备驱动基本操作及调用流程
/*********************************************************************************** * * 字符设备驱动基本操作及 ...
随机推荐
- 修复CentOS文件系统
CentOS经常出现一些像 Cannot mkdir: Structure needs cleaning 的文件系统错误,而且在正常模式下无法umount来进行修复.很多时候只能在rescue模式下进 ...
- iOS:关于UIView切角的两种实现方式
转载自:http://www.jianshu.com/p/451b7fa94e2a 第一种: 我想你一见到代码,就瞬间有吐的冲动,最常用的一种方式... UIButton *button = [[UI ...
- JDK 7中的函数式编程思想[转载]
原文作者的观点是Lambda表达式一定会包含在JDK 7中,而全文也着重介绍了这方面的知识,作者认为函数式编程的概念也将出现在JDK 7中. Lambda表达式 Lambda表达式并不是什么新概念,自 ...
- DirectX游戏开发——从一个小游戏開始
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自 ...
- Telnet服务配置
telnet:远程连接,使用未加密的用户/密码组进行验证,由xinetd服务管理.配置文件为/etc/xinetd.d/telnet Telnet服务的配置步骤如下: 一.安装telnet软件包 #r ...
- 在单进程单线程或单进程多线程下实现log4cplus写日志并按大小切割
基于脚本配置来过滤log信息 除了通过程序实现对log环境的配置之外.log4cplus通过PropertyConfigurator类实现了基于脚本配置的功能.通过 脚本能够完毕对logger.app ...
- 解决oracle和plsql乱码问题
oracle 10g装上后,建了个表写入中文数据,发现通过工具DbVisualizer 6.5 写入/读取中文都正常,就sqlplus和PL/SQL Developer不正常. 初步怀疑是DbVisu ...
- python的__init__和__new__
本文所有实例代码在python3.7下 一.__new__和__init__区别 1.__new__先于__init__执行;__new__是相当于其他OOP语言的构造方法,负责创建实例:之后,__i ...
- 史上最牛逼的纯CSS实现tab选项卡,闪瞎你的狗眼
下载地址:http://download.csdn.net/detail/cometwo/9393614 html文件 <!DOCTYPE html> <html> <h ...
- Sublime Text 如何一个代码双屏显示代码上下部分?
Sublime Text 如何一个代码双屏显示代码上下部分? sublime text如何一个代码双屏显示代码上下部分 先显示2行实图 把想要分屏显示的文件,打开新窗口,然后再拖过去就可以了. 快捷操 ...