(注:本文參考資料:朱有鵬嵌入式課程。本文為個人學習記錄,如有錯誤,歡迎指正。)
kcongfig用於構建linux核心配置的圖形介面,配置介面所有配置項都從kconfig中讀取。
kconfig檔案遵循一定的格式,menuconfig程式可以識別其格式,並從中提取相關資訊形成menuconfig介面中的選單項。
在進行驅動移植等移植工作時,需要自己新增kconfig中的乙個配置項來將某個裝置驅動新增到核心的配置專案中。
## network device configuration
#menuconfig netdevices
default y if uml
depends on net
bool "network device support"
---help---
you can say n here if you don't intend to connect your linux box to
any other computer at all..........................................
# all the following symbols are dependent on netdevices - do not repeat
# that for each of the symbols.
if netdevices
........................................
config dm9000
tristate "dm9000 support"
depends on arm || blackfin || mips
select crc32
select mii
---help---
support for dm9000 chipset.
to compile this driver as a module, choose m here. the module
will be called dm9000.
config dm9000_16bit
bool "dm9000 16-bit"
depends on dm9000
default n
help
support dm9000 ethernet controller with 16bit data bus
........................................
source "drivers/net/pcmcia/kconfig"
source "drivers/net/wan/kconfig"
.......................................
(1)menuconfig ***,表示乙個選單項(它本身也是其上一級選單中的乙個配置選項)。***表示該配置項的名稱,該字串用config_修飾就構成.config檔案中的配置項名稱config_***。
(2)config ***,表示選單中的乙個配置選項。乙個menuconfig ***下的所有config ***都屬於該選單下的配置項。***表示該配置項的名稱,該字串用config_修飾就構成.config檔案中的配置項名稱config_***。
(3)bool,表示該配置項只有兩種選擇,編入(y)或去除(n)。
(4)tristate,表示該配置項是三態的,對應:編入(y)、去除(n)、模組化(m)。
(5)bool、tristate後的字串,表示該配置項在menuconfig介面上顯示的名稱。
(6)depends,表示該配置項依賴於其他配置項,只有依賴的配置項為y或m時,本配置項才有意義。
(7)select,表示若該配置項成立,則select下的配置項也會成立。
(8)help,表示該配置項對應的幫助資訊;在menuconfig介面下,選中某一表項並按「?」即可顯示該項對應的幫助資訊。
(9)source,核心原始碼目錄樹中每乙個kconfig都會用source引入其所有子目錄下的kconfig,從而保證了所有的kconfig專案都被包含進menuconfig中。因此,若在linux核心中新增了乙個資料夾,一定要在該資料夾下建立乙個kconfig檔案,然後在該資料夾的上一層目錄的kconfig中source引入該資料夾下的kconfig檔案。
menuconfig圖形介面中所有表項都從kcongfig中讀取,所有表項的設定值都從.config檔案中讀取。menuconfig介面中的修改部分會同步至.config檔案中;同時還會將所有的配置選項以巨集的形式儲存在/kernel/include/generated/autoconfig.h中,makefile會根據其中的巨集對相應的配置項進行條件編譯。
Linux核心分析
從根本上看,核心是為了管理好程序來設計的,需要建立各種結構體來描述程序管理過程中需要用到的一切。首先,為什麼要劃分核心空間與使用者空間,出於安全的考慮,需要把使用者程式與核心隔離,這就帶來各種複雜性的東西,當然這是值得的。對於模組與模組的互動,使用者通過系統呼叫進入核心,這裡又包含中斷管理,異常管理...
linux核心分析四
使用庫函式api和c 中嵌入彙編 兩種方式使用同乙個系統呼叫,理解系統呼叫的工作機制。api 第一層是指libc中定義的api,這些api封裝了系統呼叫,使用int 0x80觸發乙個系統呼叫中斷 當然,並非所有的api都使用了系統呼叫,如完成數學加減運算的api就沒有使用系統呼叫 也有可能某個api...
Linux核心Crash分析
每乙個程序的生命週期內,其生命週期的範圍為幾毫秒到幾個月。一般都是和核心有互動,例如使用者空間程式使用系統呼叫進入核心空間。這時使用的不再是使用者空間的棧空間,使用對應的核心棧空間。對每乙個程序來說,linux核心都會把兩個不同的資料結構緊湊的存放在乙個單獨為程序分配的儲存空間中 乙個是核心態的程序...