任何人都可以解釋什麼目標「oldconfig」完全在Linux內核的生成文件?我在某些構建文檔中看到它被引用,但從來沒有解釋它確切地做了什麼。「make oldconfig」在Linux內核makefile中做了什麼?
回答
它讀取現有的.config
文件,並提示用戶在當前內核源文件中找不到的選項。這在採取現有配置並將其移至新內核時非常有用。
用新的/更改/刪除的選項更新舊配置。
運行'make oldconfig'之前您需要將內核配置文件從較舊的內核複製到新內核的根目錄中。
您可以在正在運行的系統上找到舊內核配置文件的副本,地址爲/boot/config-3.11.0
。另外,內核源代碼在linux-3.11.0/arch/x86/configs/{i386_defconfig/x86_64_defconfig}
CONFIGS如果你的內核源位於位於/ usr/src/linux中
cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfig
不要以root身份建立內核!請參閱https://www.youtube.com/watch?v=fMeH7wqOwXA#t=15m44s – ted 2015-01-17 17:20:15
從這個page:
使oldconfig會採取的.config和運行它通過 Kconfig文件的規則,並生成一個與.config配合使用的.config,與 Kconfig規則一致。如果缺少CONFIG值,make oldconfig將詢問它們。
如果.config已經與Kconfig, 中的規則保持一致,那麼使oldconfig本質上是空操作。
如果您要運行make oldconfig,然後再運行make oldconfig a 第二次,第二次不會引起任何額外的更改爲 作出。
摘要
如前所述by Ignacio,它更新您的.config
你在更新內核源代碼,例如與git pull
。
它試圖保持您的現有選項。
具有一個腳本是有用的,因爲:
新的選擇可能已添加或刪除舊
內核的Kconfig配置格式有選項:
- 暗示彼此通過
select
- 依賴另一個通過
depends
這些選項關係使得手動配置解析更加困難。
- 暗示彼此通過
讓我們手動修改的.config瞭解它是如何解決的配置
首先生成一個默認的配置:
make defconfig
現在編輯生成.config
手動檔來模擬一個內核更新並運行:
make oldconfig
看看會發生什麼。一些結論:
類型的線:
# CONFIG_XXX is not set
不是單純的意見,但實際上表明該參數沒有設置。
例如,如果我們刪除行:
# CONFIG_DEBUG_INFO is not set
和運行
make oldconfig
,它會問我們:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
當它結束後,
.config
文件將被更新。如果您更改該行的任何字符,例如到
# CONFIG_DEBUG_INFO
,它不算。類型的線:
# CONFIG_XXX is not set
總是用於一個屬性的否定,雖然:
CONFIG_XXX=n
也被理解爲否定。
例如,如果您刪除
# CONFIG_DEBUG_INFO is not set
並回答:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
與
N
,則輸出文件包含:# CONFIG_DEBUG_INFO is not set
,而不是:
CONFIG_DEBUG_INFO=n
而且,如果我們手動將該行修改爲:
CONFIG_DEBUG_INFO=n
和運行
make oldconfig
,那麼該行被修改爲:# CONFIG_DEBUG_INFO is not set
沒有
oldconfig
問我們。不符合相關條件的配置文件不會出現在
.config
上。其他人都這樣做。例如,設置:
CONFIG_DEBUG_INFO=y
並運行
make oldconfig
。它現在會問我們:DEBUG_INFO_REDUCED
,DEBUG_INFO_SPLIT
等configs。之前,這些屬性沒有出現在
defconfig
上。如果我們看一下
lib/Kconfig.debug
它們被定義下,我們看到,他們依賴於DEBUG_INFO
:config DEBUG_INFO_REDUCED bool "Reduce debugging information" depends on DEBUG_INFO
所以當
DEBUG_INFO
被關閉,他們並沒有顯示在所有。配置文件
selected
通過打開configs會自動設置而不詢問用戶。例如,如果
CONFIG_X86=y
我們刪除行:CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
和運行
make oldconfig
,線路被重新不用問我們,不像DEBUG_INFO
。這是因爲
arch/x86/Kconfig
包含:config X86 def_bool y [...] select ARCH_MIGHT_HAVE_PC_PARPORT
,並選擇勢力選項設置爲true。另請參閱:https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
要求約束條件不滿足的配置。
例如,
defconfig
已經建立:CONFIG_64BIT=y CONFIG_RCU_FANOUT=64
如果我們編輯:
CONFIG_64BIT=n
和運行
make oldconfig
,它會問我們:Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW)
這是因爲
RCU_FANOUT
是定義爲init/Kconfig
爲:config RCU_FANOUT int "Tree-based hierarchical RCU fanout value" range 2 64 if 64BIT range 2 32 if !64BIT
因此,如果沒有
64BIT
,最大值爲32
,但我們不得不64
組對.config
,這將使其不一致。
獎金
make olddefconfig
集的每一個選項的默認值不求回報交互。它會在make
上自動運行,以確保.config
在您像我們一樣手動修改它的情況下保持一致。另請參閱:https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree
make alldefconfig
與make olddefconfig
類似,但它也接受要合併的配置片段。這個目標所使用的merge_config.sh
腳本:https://stackoverflow.com/a/39440863/895245
如果你想自動化.config
修改,是不是太簡單了:How do you non-interactively turn on features in a Linux kernel .config file?
它的折磨。而不是包含一個通用的配置文件,他們讓你迴歸9000次產生一個。
嘗試:「是」「| make oldconfig' – 2017-02-20 20:21:57
- 1. linux「make oldconfig」丟棄了一個條目CONFIG_K8_NB
- 2. cyttsp4錯誤(linux內核)Makefile
- 3. $在make文件中做了什麼?
- 4. 什麼意思obj-y + = something /在linux內核中Makefile?
- 5. Linux內核模塊編程Makefile錯誤
- 6. 瞭解makefile中的make-command?
- 7. Linux內核模塊編程:makefile
- 8. Linux內核模塊編程Makefile
- 9. 什麼?=在Makefile中做什麼?
- 10. obj _ $(variable_name)在makefile中做什麼?
- 11. 「make check」做什麼?
- 12. 什麼是Linux內核源
- 13. 百分比符號在makefile中做了什麼?
- 14. 雙「at」(@@)符號在Makefile中做什麼?
- 15. 在內核makefile中?=的含義是什麼?
- 16. Debian,make-kpkg和Linux內核開發
- 17. linux中的taskset究竟做了什麼?
- 18. 的Makefile做:爲`默認」做沒什麼
- 19. 內存交錯和內存在Linux內核中發生了什麼?
- 20. make nconfig&make linux-nconfig有什麼區別?
- 21. Linux內核中的IPsec - 如何弄清楚發生了什麼
- 22. 什麼取代了最新的Linux內核中的get_sb_nodev和get_sb?
- 23. 什麼是__ksymtab?在Linux內核
- 24. IP核在.NET核心中做什麼?
- 25. C Makefile - 如何在構建時添加頭文件(linux內核)?
- 26. 瞭解access_process_vm linux內核?
- 27. Linux內核模塊makefile中的特殊文件編譯
- 28. 在Linux內核中
- 29. 編譯linux內核模塊,makefile中的KBUILD_CFLAGS不起作用
- 30. 「+」在CSS中做了什麼?
謝謝,非常有幫助。 – 2010-11-16 16:11:10