點擊右邊

索求Linux內核:Kconfig/kb九州娛樂城儲值版uild的神秘

深切懂得 Linux 設置/構建體系是若何事情的。
自從 Linux 內核代碼遷徙到 Git 以來,Linux 內核設置/構建體系(也稱為 Kconfig/kbuild)已經存在很永劫間了。然而,作為支撐根基辦法,它很少成為人們存眷的核心;甚至在一樣平常事情中使用它的內核開發職員也從未真正思索過它。
為了索求若何編譯 Linux 內核,本文將深切先容 Kconfig/kbuild 外部的進程,詮釋若何天生 .config 文件以及 vmlinux/bzImage 文件,并先容一個巧妙的依靠性跟蹤技能。

Kconfig

構建內核的第一步始終是設置。Kconfig 有助于使 Linux 內核高度模塊化以及可定制。Kconfig 為用戶供應了很多設置方針:

我認為 menuconfig 是這些方針中最受迎接的。這些方針由不同的主法式host program處置,這些法式由內核供應并在內核構建時代構建。一些方針有 GUI(為了便利用戶),而大多半沒有。與 Kconfig 相關的對象以及源代碼首要位于內核源代碼中的 scripts/kconfig/ 下。從 scripts/kconfig/Makefile 中可以望到,這里有幾個主法式,包含 confmconf 以及 nconf。除了 conf 以外,每個都擔任一個基于 GUI 的設置方針,是以,conf 處置大多半方針。
從邏輯上講,Kconfig 的根基布局有兩部門:一部門完成一種新說話來界說設置項(參見內核源代碼下的 Kconfig 文件),另一部門剖析 Kconfig 說話并處置設置操作。
大多半設置方針具備大致雷同的外部進程(以下所示):

請注重,一切設置項都具備默許值。
第一步讀取源代碼根目次下的 Kconfig 文件,構建初始設置數據庫;然后它依據以下優先級讀取現有設置文件來更新初始數據庫:

  1. .config
  2. /lib/modules/$(shell,uname -r)/.config
  3. /etc/kernel-config
  4. /boot/config-$(shell,uname -r)
  5. ARCH_DEFCONFIG
  6. arch/$(ARCH)/defconfig

若是你經由過程 menuconfig 進行基于 GUI 的設置或者經由過程 oldconfig 進行基于下令行的設置,則依據你的自界說更新數據庫。最初,該設置數據庫被轉儲到 .config 文件中。
.config 文件不是內核構建的終極素材;這便是 syncconfig 方針存在的緣故原由。syncconfig曾經經是一個名為 silentoldconfig 的設置方針,但它沒有做到其舊稱號所說的事情,以是它被重定名。此外,由于它是供外部使捕魚達人攻略用的(不實用于用戶),以是它已經從上述列表中刪除。
如下是 syncconfig 的作用:

syncconfig.config 作為輸出并輸入很多其余文件,這些文件分為三類電競運彩ptt

  • auto.conftristate.conf 用于 makefile 文本處置。例如,你可以在組件的 makefile 中望到如地下運彩ptt許的語句:obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o
  • autoconf.h 用于 C 說話的源文件。
  • include/config/ 下空的頭文件六合彩台灣用于 kbuild 時代的設置依靠性跟蹤。上面會詮釋。

設置實現后,咱們將曉得哪些文件以及代碼片斷未大樂透加碼編譯。

kbuild

組件式構建,稱為遞回 make,是 GNU make 治理大型項目的經常使用要領。kbuild 是遞回 make 的一個很好的例子。經由過程將源文件劃分為不同的模塊/組件,每個組件都由其本人的 makefile 治理。當你最先構建時,頂級 makefil六合彩金額算法e 以精確的次序挪用每個組件的 makefile、構建組件,并將它們網絡到終極的履行法式中。
kbuild 指向到不同類型的 makefile:

  • Makefile 位于源代碼根目次的頂級 makefile。
  • .config 是內核設置文件。
  • arch/$(ARCH)/Makefile 是架構的 makefile,它用于增補頂級 makefile。
  • scripts/Makefile.* 描寫一切的 kbuild makefile 的通用規定。
  • 最初,約莫有 500 個 kbuild makefile。

頂級 makefile 會將架構 makefile 包括出來,讀取 .config 文件,下到子目次,在 scripts/ Makefile.* 中界說的例程的輔助下,在每個組件的 makefile 上挪用 make,構建每其中間工具,并將一切的中間工具鏈接為 vmlinux。內核文檔 Documentation/kbuild/makefiles.txt 描寫了這些 makefile 的方方面面。
作為一個例子,讓咱們望望若何在 x86-64 上天生 vmlinux

vmlinux overview
(此插圖基于 Richard Y. Steven 的博客。有過更新,并在作者許可的環境下使用。)
進入 vmlinux 的一切 .o 文件起首進入它們本人的 built-in.a,它經由過程變量KBUILD_VMLINUX_INITKBUILD_VMLINUX_MAINKBUILD_VMLINUX_LIBS 透露表現,然后被網絡到 vmlinux 文件中。

【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。