我們從網絡卡的配置,來分析:
vim ./config
/dm9000
593 #
594 # ethernet (
10 or 100mbit)
595 #
596 config_net_ethernet=y
597 config_mii=y
598 # config_smc91x is not set
599 config_dm9000=y
600 # config_cs89x0 is not set
601 # config_net_pocket is not set
602 config_netdev_1000=y
603 config_netdev_10000=y
config_dm9000=y
等於y說明對網絡卡的支援編譯進核心;
如果等於m,會編譯成模組,動態載入,相當於驅動。
grep "config_dm9000" * -nwr
就可以看到哪些config檔案配置了網絡卡,有哪些檔案有配置網絡卡呢?
1、c原始碼
arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(config_dm9000) || defined(config_dm9000_module)
…2、子目錄裡的makefile檔案
drivers/net/makefile:197:obj-katex parse error: expected 'eof', got '#' at position 59: …t/makefile:198:#̲obj-(config_dm9000) += dm9000.o
3、include/config/auto.conf
4、include/linux/autoconf.h
c原始碼檔案裡的巨集是在include/linux/autoconf.h裡定義的
autoconf.h這個檔案是自動生成,裡面的內容**於.config;
我們檢視autoconf.h,裡 #define config_dm9000 1 將dm9000定義為1,那麼y和m是在**定義的呢?
我們檢視下drivers/net/makefile
補充乙個知識點,子目錄下的makefile檔案
obj -y += ***.o 則***.c檔案最後會被編譯進核心;
obj -m += yyy.o 則yyy.c檔案最後會被編譯成可載入的模組 ==> yyy.ko。
198 #obj-$(config_dm9000)
+= dm9000.o
199 #obj-$(config_dm9000)
+= dm9ks.o
因此如果config_dm9000=y 就會編譯進核心;config_dm9000=m 就會編譯成可載入的模組。
那麼config_dm9000=y還是=m是在**定義?
在include/config/auto.conf這個檔案裡定義的,說明這個檔案也是自動生成的,被頂層makefile包含。
make uimage是都會發生什麼?
生成的.config 會自動生成autoconf.h和auto.conf ;其中autoconf.h被c源**使用),auto.conf(包含在頂層makefile)。
核心分析2(setup arch)
確定當前核心的機器碼,然後確定當前核心所用的cpu 機器碼的描述符。裡面包含了機器平台的相關資訊。struct machine desc static void init setup processor void cpu name list cpu name ifdef multi cpu proc...
2 2 Linux核心配置分析 筆記
生成.config 開啟.config檔案,發現該檔案是由以congig 形式的配置項組成的。找到config dm9000 y行,config dm9000為乙個配置項,y表示編譯進核心,m表示編譯成模組,沒有配置顯示config dm9000 is not set。我們在核心目錄中查詢 grep...
全民核心 配置7 裝置驅動2
先上大圖,如果你要使用kvm的半虛擬化,那要到下面的 virtio drivers選單裡選上 pci driver for virtio devices virtio balloon driver m就行,因為是要給kvm用的 因為如果這個不先選,接下來關於virtio的一些選項無法看到 bus d...