linux核心模組匯出函式

2021-08-20 11:26:42 字數 1526 閱讀 5118

乙個模組可以使用另乙個模組匯出的函式,可以通過函式export_symbol(func_name)來匯出,匯出後的函式位於/proc/kallsyms檔案中。

#include 

#include 

module_license(

"dual bsd/gpl"

);static

inthello_init(

void

)static

inthello_export(

void

) static

void

hello_exit(

void

)export_symbol(hello_export);

module_init(hello_init);

module_exit(hello_exit);

建立makefile檔案如下:

obj-m := hello.o

kdir := /lib/modules/`uname -r`/build

pwd := $(shell pwd)

default:

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

clean: 

rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions

檢視匯出的函式如下:

# cat /proc/kallsyms | grep hello

ffffffffc0725000 t 

hello

_export   [

hello

]ffffffffc0725020 t 

hello

_init     [

hello

]ffffffffc0725040 t 

hello

_exit [

hello

]可以看到函式被核心識別並匯出,第一列表示位址,最後一列表示函式屬於哪個模組。

也可以檢視原始碼編譯路徑中的module.symvers檔案如下:

# cat module.symvers

0x00000000  hello_export   /root//module/hello  export_symbol

接下去我們看下如何使用這個hello模組匯出的函式。使用過程需要通過extern關鍵字來宣告函式是外部匯入。

#include

#include

module_license("dual bsd/gpl");

extern int hello_export(void);

static int usehello_init(void)

static void usehello_exit(void)

module_init(usehello_init);

module_exit(usehello_exit);

makefile同上,不過模組名字需要修改一下。這個新模組就依賴於上乙個提供函式的模組了,匯入時候必須先導入上乙個模組,不然這個新模組無法使用。

Linux核心模組

核心模組 在整個啟動的過程中,是否能成功的驅動我們主句的硬體裝置,是核心完成的工作,而核心一般都是壓縮文件,在使用之前核心之前必須要將核心減壓到的記憶體中。為了應對日新月異的硬體,目前核心都具有可讀取模組化驅動程式的功能,也就是所謂的 modules模組化 所謂模組化。核心與核心模組放在 核心 bo...

Linux核心模組

1 核心模組註冊登出 塊載入函式有返回值,模組解除安裝函式無返回值。兩者都是無參函式,載入函式用 init修飾,解除安裝函式用 exit修飾。define init attribute section init.text define exit atrribute section exit,text...

Linux 核心模組

linux 核心模組程式結構 1 模組載入函式 2 模組解除安裝函式 3 模組許可證宣告 4 模組引數 5 模組匯出符號 6 模組作者等資訊宣告 模組載入函式 一般以 init 標識 在 linux 中,所有標識為 init 的函式如果直接編譯進核心,成為核心映象的一部分,在連線的時候都會放在 in...