將乙個驅動編譯進核心
驅動和核心成為乙個整體,即驅動程式在zimage
(或uimage
),在核心啟動過程中,會自動安裝驅動。
1、將驅動原始碼放在linux核心的原始碼包中
drivers/char/leds/gec210_led.c
在drivers/char/
下建立了乙個目錄leds
,將gec210_led.c
放到該目錄下。
注意:linux
核心如何編譯源程式?
makefile
—>管理原始碼
kconfig
—>生成配置選單
2、在drivers/char/leds/建立乙個kconfig檔案
並新增如下內容:
menu "gec210 leds"
config gec210_led
tristate "the driver of leds for gec210"
default y
depends on mach_gec210
help
this
is a driver for leds.led1=gpj2_0,led2=gpj2_1
endmenu
分析:
config gec210_led
gec210_led
—>條件編譯選項(菜的id)。在選單中可以將條件編譯選項設定成:
y
—> 將該驅動編譯進核心 (在飯店吃)
m
—> 將驅動編譯成乙個ko (不在飯店吃,打包帶走)
n
—> 不編譯該驅動(不點該菜)
make menuconfig
—>選擇哪些程式編譯(點菜過程)
.config
—>各個條件編譯選項和它的值(點菜後下的單)
tristate "the driver of leds for gec210"
tristate
—>條件編譯選項有三個值:y、m、n
如:bool
有兩個值:y、n
「the driver of leds for gec210」 —>make menuconfig
看到的內容(菜名)
depends on
mach_gec210
`gec210_led`是依賴於`mach_gec210`,只有設定了`mach_gec210=y`,才可以設定`gec210_led`的值
help
this
is a driver for leds.led1=gpj2_0,led2=gpj2_1.
幫助
3、在drivers/char/leds/建立乙個makefle檔案新增內容:
obj-$(config_gec210_led) += gec210_led.o
分析:
在makefile
中,根據條件編譯選項的值,來確定驅動源編如何編譯。
makefile
—>管理原始碼的編譯(廚師)
4、修改drivers/char/kconfig
是我們新增的kconfig
和核心的kconfig
樹連線在一起
加入:
source "drivers/char/leds/kconfig"
5、修改drivers/char/makefile
是我們新增的makefile和核心的makefile樹連線在一起
加入:
obj-$(config_gec210_led) += leds/
6、配置
make menuconfig
device drivers --->
character devices --->
gec210 leds --->
the driver of leds for gec210
7、編譯
make輸出:
cc drivers/char/leds/gec210_led.o
objcopy arch/arm/boot/zimage
kernel: arch/arm/boot/zimage is ready
8、除錯檢視核心的輸出資訊:
static int __init led_init(void)
{ ...
......
... printk("led driver init ok !\n");
}
輸出:
[ 1.042435] s3cfb s3cfb: registered successfully
[ 1.246398] led driver init ok !
[ 1.247157] pa fb = 0x45faf000, bits per pixel = 32
說明:zimage啟動的過程中,自動安裝了驅動
總結:
kconfig + makefile = kbuild
9、kernel 的配置檔案:
生成include/config/auto.conf
生成的核心資訊
如何將驅動程式靜態編譯進核心
驅動模組可以核心編譯好後動態載入進去,也可以在編譯核心的時候就直接新增。下面是將驅動程式靜態編譯進核心的方法 以乙個字元裝置為例 1.修改 drivers char下的kconfig檔案 在kconfig中增加如下 config my hello bool this is test a.儲存後回到核...
如何將elf 二進位制 韌體編譯進核心
需求 我的網絡卡驅動在載入時,需要兩個elf格式的韌體。sdk的做法是將這兩個韌體放置到跟檔案系統中的 lib firmware目錄下,核心啟動的時候在根檔案系統中尋找。這樣做,核心和根檔案系統就出現了乙個強相關的關係。客戶提出,在核心不要和根檔案系統較強聯絡,不要出現這種情況 編譯出的kernel...
如何將核心靜態庫編譯連線到驅動程式中去
剛上郵箱的時候發現一位向我詢問這個問題,同時傳送了乙個鏈結給我了。上去一看,上面還留有我以前同樣的提問,看看時間,都幾年前在別人的帖子裡面的提問了。貌似當時我遇到同樣問題的時候也是到處發帖回帖詢問來著的,問的地方有點多,要不是這位朋友給我鏈結,早不記得那個鏈結也有訪問過,呵呵。不過再往下看了後才發現...