1. 程式人生 > >linux開發の如何靜態的將驅動模組編譯進核心

linux開發の如何靜態的將驅動模組編譯進核心

在解決這個問題之前,我們先搞明白linux究竟是怎樣管理原始碼中上萬個檔案的。

我們看Linux原始碼的目錄,十分科學,基本上看到目錄就可以猜到裡面放的什麼,那怎麼把檔案連線起來,靠的就是Kconfig,它可以告知Makefile那些編譯那些不編譯。

第一步:在driver目錄下新建一個my_dr/hello目錄,主要存放自己編寫的核心驅動程式碼。當執行make menuconfig 時,能夠找到自己編寫的程式碼。

目錄如圖所示:


第二步:編輯hello目錄下的Kconfig,Makefile檔案如下圖:


左邊為Kconfig檔案,右邊是Makefile檔案,如果變數CONFIG_HELLO為真或假,則判斷是否編譯hello.c為hello.o,CONFIG_HELLO變數值來自於.config檔案的配置。.config檔案的配置又來源於通過Kconfig檔案的顯式選擇,在Kconfig檔案中config為配置關鍵詞,HELLO為配置項,tristate為三態選擇器

第三步:編譯my_dr目錄下的Kconfig和Makefier



上圖是Kconfig,對於這個檔案來說,必須要建立一個選單,對應各個對應的驅動程式,可以方便找到子目錄下的Kconfig資源

最後一步:找到driver目錄下的Kconfig,在裡面新增 “source drivers/my_dr/Kconfig”

                 在當前目錄的Makefile中新增             “obj-y             +=my_dr/”

               有時候我們會看到"obj-$(CONFIG_CATOR)  +=gator/"這樣的表述,意思是隻有配置了CONFIG_CATOR變數gator目錄的檔案才可以顯示的選擇。