如何將乙個驅動編譯進核心

2021-08-25 11:49:18 字數 3853 閱讀 5974

將乙個驅動編譯進核心

驅動和核心成為乙個整體,即驅動程式在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...

如何將核心靜態庫編譯連線到驅動程式中去

剛上郵箱的時候發現一位向我詢問這個問題,同時傳送了乙個鏈結給我了。上去一看,上面還留有我以前同樣的提問,看看時間,都幾年前在別人的帖子裡面的提問了。貌似當時我遇到同樣問題的時候也是到處發帖回帖詢問來著的,問的地方有點多,要不是這位朋友給我鏈結,早不記得那個鏈結也有訪問過,呵呵。不過再往下看了後才發現...