Kernel

在 OpenWrt 中 make defconfig 從哪裡獲得它的配置?

  • May 22, 2014

我正在使用OpenWrt為 wifi 設備編譯圖像。按照說明,我將一個簡單的.config文件複製到 TOP-DIR。

CONFIG_TARGET_ar71xx=y
CONFIG_TARGET_ar71xx_generic=y
CONFIG_TARGET_ar71xx_generic_XXX_OpenWrt_Router=y

然後執行命令make menuconfig。該命令的結果是

.config file now having default configuration. 

但是,我不知道所有新配置的來源。如果我只是改變CONFIG_TARGET_ar71xx_generic_XXX_Router=yCONFIG_TARGET_ar71xx_generic_YYY_Router=y那麼結果make defconfig肯定會大不相同。

OpenWrt 將配置儲存在目錄中

target/linux/<target system>/<subtarget>/profiles

您可以使用命令設置目標系統和子目標make menuconfig製作菜單配置

就我而言:

目標系統 =ar71xx

子目標 =generic

所以目錄將是:

target/linux/ar71xx/generic/profiles

在這個目錄中,你會發現一些預定義的配置文件,儲存在<profile>.mk文件中。這些文件定義了在選擇目標配置文件時將使用哪些包作為預設包。

配置通常儲存在目錄中

arch/$(ARCH)/configs

所以預設x86配置是

arch/x86/configs/i386_defconfig

預設x86_64配置是

arch/x86/configs/x86_64_defconfig

其中所有路徑都相對於 linux src 根目錄。


要查找任何拱門的任何預設配置,您可以舉例頂層Makefile並找到

include $(srctree)/arch/$(SRCARCH)/Makefile
export KBUILD_DEFCONFIG KBUILD_KCONFIG

config: scripts_basic outputmakefile FORCE
 $(Q)mkdir -p include/linux include/config
 $(Q)$(MAKE) $(build)=scripts/kconfig $@

並通過檢查 Makefile $(srctree)/arch/$(SRCARCH)/Makefile,例如,arch/x86/Makefile您會發現:

ifeq ($(ARCH),x86)
 ifeq ($(shell uname -m),x86_64)
       KBUILD_DEFCONFIG := x86_64_defconfig
 else
       KBUILD_DEFCONFIG := i386_defconfig
 endif
else
       KBUILD_DEFCONFIG := $(ARCH)_defconfig
endif

其中變數的最終結果KBUILD_DEFCONFIG包含架構的預設配置的文件名。

引用自:https://unix.stackexchange.com/questions/131233