內(nèi)核模塊的加載

內(nèi)核模塊的加載

ID:40785269

大小:33.50 KB

頁數(shù):8頁

時間:2019-08-07

內(nèi)核模塊的加載_第1頁
內(nèi)核模塊的加載_第2頁
內(nèi)核模塊的加載_第3頁
內(nèi)核模塊的加載_第4頁
內(nèi)核模塊的加載_第5頁
資源描述:

《內(nèi)核模塊的加載》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、2009-12-2416:49:50來自:伊拉克蜜棗甜掉牙★虛擬文件系統(tǒng)模塊增加一個虛擬文件系統(tǒng)是非常簡單的.假如你要開發(fā)一個新的文件系統(tǒng)或者支持現(xiàn)存的文件系統(tǒng),就需要寫一個模塊作為接口.同樣的,假如需要調(diào)試已經(jīng)存在的文件系統(tǒng),也需要那樣一個接口.必須確定你的內(nèi)核不支持目標(biāo)文件系統(tǒng).一個虛擬文件系統(tǒng)的模塊的結(jié)構(gòu)應(yīng)該象如下定義:structlkm_vfs{MODTYPElkm_type;intlkm_ver;char*lkm_name;u_longlkm_offset;structvfsconf*lkm_vfsconf;};和前面的例子差不

2、多,我們也有個模塊類型(LM_VFS),一個版本號,一個模塊名和一個偏移值.在這個vfs模塊的例子中,offset值是用不到的.最后我們需要一個指向vfsconf結(jié)構(gòu)的指針,它包括了虛擬文件系統(tǒng)的操作向量以及一些其他信息(vfsconf結(jié)構(gòu)在頭文件/usr/include/sys/mount.h中定義).此結(jié)構(gòu)通過MOD_VFS宏來初始化:MOD_VFS("nullfs",-1,&nullfs_vfsconf)我們看看上面的代碼,第一個參數(shù)是我們的模塊名,第二個參數(shù)offset,這個參數(shù)在我們的vfs模塊中無關(guān)緊要(前面說過,可以不用).

3、最后一個參數(shù)是我們的文件系統(tǒng)的結(jié)構(gòu).在你的模塊的外部接口中,你必須調(diào)用vfs_opv_init_eXPlicit和vfs_opv_init_default來分配和初始化默認操作向量.因為文件系統(tǒng)被編譯進內(nèi)核,所以通過定義在/usr/src/sys/kern/vfs_conf.c里的vfs_opv_desc[]來在系統(tǒng)啟動的時候裝載.一個需要注意的是當(dāng)用需要用ld程序來鏈接多個源代碼文件來為modload提供目標(biāo)文件時,你必須用-r標(biāo)記來創(chuàng)建一個可重定位的目標(biāo)文件.因為modload在把你的模塊鏈接進內(nèi)核的同時需要用到ld程序.可以用mod

4、load的-d標(biāo)記來察看ld運行的內(nèi)部參數(shù).這兒是一個fs模塊的完整代碼(nullmod.c):#include#include#include#include#include#include#include#include#include/**文件系統(tǒng)的操作結(jié)構(gòu)*參考:/usr/src/sys/miscfs/null

5、fs/*/externstructvfsopsnull_vfsops;externstructvnodeopv_descnull_vnodeop_opv_desc;structvfsconfnullfs_vfsconf={&null_vfsops,MOUNT_NULL,9,0,0,NULL,NULL};/**聲明我們的模塊結(jié)構(gòu),通過我們文件系統(tǒng)的模塊名,offset和初始的vfsconf結(jié)構(gòu)*/MOD_VFS("nullfs",-1,&nullfs_vfsconf)/**我們的外部接口.我們初始化文件系統(tǒng)并且用到了DISPATCH宏,在此

6、例中沒有用到句柄*/intnullfsmod(lkmtp,cmd,ver)structlkm_table*lkmtp;intcmd;intver;{vfs_opv_init_explicit(&null_vnodeop_opv_desc);vfs_opv_init_default(&null_vnodeop_opv_desc);DISPATCH(lkmtp,cmd,ver,lkm_nofunc,lkm_nofunc,lkm_nofunc)}好,編譯安裝它:(一些其他的附加代碼在/usr/src/sys/miscfs/nullfs里)[e4

7、gle@openbsd29]#gcc-D_KERNEL-I/sys-cnull_subr.c[e4gle@openbsd29]#gcc-D_KERNEL-I/sys-cnull_vfsops.c[e4gle@openbsd29]#gcc-D_KERNEL-I/sys-cnull_vnops.c[e4gle@openbsd29]#gcc-D_KERNEL-I/sys-cnullmod.c[e4gle@openbsd29]#ld-r-onullfs.onull_vfsops.onull_vnops.onull_subr.onullmod.o[

8、e4gle@openbsd29]#modload-onullfsmod-enullfsmodnullfs.o[e4gle@openbsd29]#modstatTypeIdOffLoadaddr

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。