乙個模組可以使用另乙個模組匯出的函式,可以通過函式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...