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

2021-05-23 19:09:06 字數 2608 閱讀 7714

剛上郵箱的時候發現一位網友向我詢問這個問題,同時傳送了乙個鏈結給我了。

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

不過再往下看了後才發現,這個問題依然沒有給出明確的回答,很多朋友給出的都是應用層庫的鏈結,這和期望的核心層的鏈結是不一樣的。

所以我把自己的一點理解寫出來,給後面的朋友參考,期望對後來的朋友有所幫助。

1.首先保證你正確生成了核心庫檔案,而非應用程式庫檔案; 2.

其次是除去靜態庫之外的驅動檔案的正確性,包括核心庫函式的呼叫和標頭檔案的申明; 3.

正確修改驅動的makefile

這幾個方面都正確之後,就能正確地將核心庫編譯進指定的驅動中去。

**目錄結構如下:

driverentry.c

makefile

lib

myalib.c

myalib.c

makefile

1.

核心靜態庫檔案的生成

核心庫包含乙個myalib.c

和myalib.h

檔案,**如下:

//myalib.c

void test(void)

//myalib.h

void test(void);

# this is the makefile for parse.

rm = rm -f

ccflags = -c

arflag  = -rc

cc = gcc

ar = ar

lib_objects  =  myalib.o

lib_source  =  myalib.c

lib = libtest.a

libtest.a:$(lib_objects)

$(ar) $(arflag) -o $@ $^

$(lib_objects):$(lib_source)

$(cc) $(ccflags) -o $@ $^

clean:

$(rm) $(lib_objects.o)

$(rm) $(lib)

在輸入終端下執行」make

命令即可生成正確的核心庫檔案。

2.

驅動檔案的準備

驅動**包括乙個driverentry.c

檔案。

#include

#include

#include "./lib/myalib.h"

module_license("dual bsd/gpl");

int init_module(void)

void cleanup_module(void)

可以看到,在驅動初始化中呼叫了庫檔案中的test()

函式,並且包含其標頭檔案。

3.

makefile

的修改

修改驅動makefile

檔案,加入核心庫檔案的編譯鏈結。

這個地方的修改比較簡單,只需核心庫檔案當做.o

檔案一樣去進行編譯鏈結即可。

# makefile

ifneq ($(kernelrelease),)

obj-m := drv.o $(lib)

drv-objs := driverentry.o  lib/libtest.a

else

kdir := /lib/modules/$(shell uname -r)/build

pwd := $(shell pwd)

$(objdir)/%.o: $(srcdir)/%.c

$(cc) -o $@ $(cflags) -c $<

default:

$(make) -c $(kdir) m=$(pwd) modules

clean:

rm -f *.o *.ko *.o.cmd *.mod.c *.symvers

endif

ok,最後終端下執行」make

命令即可成功地將核心庫檔案和目標驅動檔案鏈結到一起。

然後就可以裝載驅動進行驗證了。

最後說明下,以上只是個最簡單的演示版**,在這個基礎上,大家可以根據自己的需要豐富核心庫和驅動的內容,從而達到真正的專案用途的目的。

如何將驅動程式靜態編譯進核心

驅動模組可以核心編譯好後動態載入進去,也可以在編譯核心的時候就直接新增。下面是將驅動程式靜態編譯進核心的方法 以乙個字元裝置為例 1.修改 drivers char下的kconfig檔案 在kconfig中增加如下 config my hello bool this is test a.儲存後回到核...

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

將乙個驅動編譯進核心 驅動和核心成為乙個整體,即驅動程式在zimage 或uimage 在核心啟動過程中,會自動安裝驅動。1 將驅動原始碼放在linux核心的原始碼包中 drivers char leds gec210 led.c 在drivers char 下建立了乙個目錄leds,將gec210...

如何將LCD顯示屏連線到Arduino開發板

使用arduino連線乙個lcd顯示屏,為您的專案提供顯示。將字元lcd顯示屏連線到arduino開發板,為您的專案新增了乙個很好的可讀性元素。世界上許多最好的arduino專案都有液晶顯示器。這些lcd可用於顯示arduino或連線到它的任何感測器的資訊。例如,您可以建立乙個溫度監控系統,顯示ar...