Linux下把驅動編譯進核心
需求:
把前面課程學習的helloworld驅動編譯到核心。
例子:
source"drivers/redled/Kconfig"
config LED_4412
tristate "Led Support for GPIO Led"
depends on LEDS CLASS
help
This option enable support for led
說明:
1.source “drivers/redled/Kconfig”
他會包含drivers/redled/這個路徑下的驅動檔案,方便我們對選單進行管理
2.config LED__4412
配置選項的名稱,CONFIG_LED_4412
3.tristate 表示的驅動的狀態,把驅動編譯成模組,把驅動編譯到核心,不編譯
與之對應的還有bool 分別是編譯到核心,不編譯
“Led Support for GPIO Led” make menuconfig顯示的名字
A depends on B
表示只有在選擇B的時候才可以選擇A
4.比如我想直接去掉LED相關的去掉,我們直接改.config檔案可以嗎?
可以,但是不推薦。如果有依賴的話,直接修改.config是不成功的。
5.select
反向依賴,該選項被選中時,後面的定義也會被選中。
help
This option enable support for led
幫助資訊
例項:
sudo apt-get install lzop
sudo apt-get install u-boot-tools
注意這兩個依賴,沒有會導致編譯報錯,開啟板子不列印helloworld
進入核心原始碼目錄
進入drivers/char/中, "cd drivers/char/"
建立hello資料夾,並進入
複製helloworld.c到hello資料夾,建立Kconfig檔案
編寫Kconfig
config HELLO
tristate "hello world"
help
hello hello
建立Makefile
編寫Makefile
# $(CONFIG_HELLO):根據我們選擇的驅動的狀態去改變,選擇編譯到核心就是y(obj-y),選擇編譯到模組就是m(obj-m)
# CONFIG_HELLO 名稱是由Kconfig中的HELLO,前面+CONFIG_得到
obj-$(CONFIG_HELLO)+=helloworld.o
返回上一級目錄
修改Makefile
修改Kconfig
返回原始碼根目錄
"export ARCH=arm"
輸入"make menuconfig"
按空格變成* --> 編譯進核心
儲存退出
進入.config,檢視hello
檢視create.sh
編譯時使用的是arch/arm/configs/imx_v7_defconfig這個檔案來編譯的,不是使用我們修改make menuconfig生成的.config檔案
使用"make distclean"清除所有的編譯檔案
使用"cp arch/arm/configs/imx_v7_defconfig .config"將imx_v7_defconfig 複製成.config
意思是選單上都是特色菜,但需要加一道菜
使用"make menuconfig"再將hello world編譯進核心
儲存退出
進入arch/arm/configs/ 將imx_v7_defconfig改成imx_v7_defconfig_nohello
"cd arch/arm/configs/"
"mv imx_v7_defconfig imx_v7_defconfig_nohello"
將我們核心根目錄使用make menuconfig生成的.config 複製到arch/arm/configs/下,並改成imx_v7_defconfig
"cp /home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga/.config imx_v7_defconfig"
返回核心原始碼根目錄, 執行指令碼 "./create.sh"
檢視drivers/char/hello/下有helloworld.o檔案,說明編譯成功
將arch/arm/boot下的zImage檔案燒錄到開發板上