日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

內核模塊依賴什么意思

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-26 16:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通常情況下,一個模塊只使用內核導出的符號,自己不導出符號。但是如果一個模塊需要提供全局變量或函數(shù)給另外的模塊使用,那么就需要將這些符號導出。

這在一個驅動調用另一個驅動代碼時比較常見,這樣模塊和模塊之間就形成了依賴關系,使用導出符號的模塊將會依賴于導出符號的模塊。

舉個具體的例子,下面是兩個C文件,vser.c調用了dep.c中的變量和函數(shù):

vser.c

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >

extern int expval;
extern void expfun(void);

static int __init vser_init(void)
{
 printk("vser_init");
 printk("expval:%dn", expval);
 expfun();
 
 return 0;
}

static void __exit vser_exit(void)
{
 printk("vser_exitn");
}

module_init(vser_init);
module_exit(vser_exit);

dep.c

#include < linux/kernel.h >
#include < linux/module.h >

static int expval = 5;
EXPORT_SYMBOL(expval);

static void expfun(void)
{
 printk("expfun");
}EXPORT_SYMBOL_GPL(expfun);

Makefile關鍵處:

obj-m := vser.o
obj-m += dep.o

上述代碼中,dep.c定義了一個變量expval和一個函數(shù)expfun,并分別用EXPORT_SYMBOLEXPORT_SYMBOL_GPL導出。而vser.c里則調用了dep.c的變量和函數(shù),編譯安裝后:

# modprobe vser
# dmesg
[58278.204677] vser_init
[58278.204683] expval:5
[58287.206464] expfun

從輸出信息中可以看到,vser.c正確引用到了dep.c的變量和函數(shù)。

這里有三點重要說明:

  • 如果使用insmod命令加載模塊,則必須先加載dep模塊,再加載vser模塊 。

因為vser模塊用到了dep模塊的東西。從這里可以看出,modprobe命令優(yōu)于insmod命令的地方在于其可以自動加載被依賴的模塊。而這又要歸功于depmod命令,depmod命令會生成模塊的依賴信息,保存在/lib/modules/5.10.111-64-generic/modules.dep文件中。其中,5.10.111-64-generic是內核源碼版本。查看該文件可以發(fā)現(xiàn)vser模塊所依賴的模塊。

# cat /lib/modules/5.10.111-64-generic/modules.dep
......
extra/vser.ko: extra/dep.ko
extra/dep.ko:
  • 兩個模塊存在依賴關系,如果分別編譯兩個模塊,會出現(xiàn)類似下面的警告信息,并且即便加載順序正確,加載也不會成功 :
WARNING: "expfun" [/home/ubuntu/driver/module/vser.ko] undefined!
WARNING: "expval" [/home/ubuntu/driver/module/vser.ko] undefined!

# sudo insmod dep.ko
# sudo insmod vser.ko
insmod:error inserting 'vser.ko': -1 Invalid parameters

這是因為在編譯vser模塊時在內核的符號表中找不到expvalexpfun的項,而vser模塊又完全不知道dep模塊的存在。

解決這個問題的方法是將兩個模塊放在一起編譯,或者將dep模塊放在內核源碼中,先在內核源碼下編譯完所有的模塊,再編譯vser模塊。

  • 卸載模塊時要先卸載vser模塊,再卸載dep模塊,否則會因為dep模塊被vser模塊使用而不能卸載

內核將會創(chuàng)建模塊依賴關系的鏈接,只有當依賴于這個模塊的鏈表為空時,模塊才能被卸載.

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2849

    瀏覽量

    53458
  • 內核
    +關注

    關注

    4

    文章

    1476

    瀏覽量

    43098
  • Linux
    +關注

    關注

    88

    文章

    11821

    瀏覽量

    219598
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    linux 了解內核模塊的原理 《Rice linux 學習開發(fā)》

    內核模塊是一種沒有經過鏈接,不能獨立運行的目標文件,是在內核空間中運行的程序。
    的頭像 發(fā)表于 07-16 10:08 ?5387次閱讀
    linux 了解<b class='flag-5'>內核模塊</b>的原理 《Rice linux 學習開發(fā)》

    Linux 內核模塊工作原理及內核模塊編譯案例

    一個內核模塊至少包含兩個函數(shù),模塊被加載時執(zhí)行的初始化函數(shù)init_module()和模塊被卸載時執(zhí)行的結束函數(shù)cleanup_module()。
    發(fā)表于 09-23 09:39 ?3311次閱讀
    Linux <b class='flag-5'>內核模塊</b>工作原理及<b class='flag-5'>內核模塊</b>編譯案例

    Linux內核模塊間通訊方法

    Linux內核模塊間通訊方法非常的多,最便捷的方法莫過于函數(shù)或變量符號導出,然后直接調用。默認情況下,模塊模塊之間、模塊內核之間的全局變
    發(fā)表于 06-07 16:23 ?3847次閱讀
    Linux<b class='flag-5'>內核模塊</b>間通訊方法

    Linux內核模塊的加載機制

    使用insmod或modprobe命令來加載模塊。insmod是直接加載,而modprobe會處理依賴關系。 2、如何工作 那內核模塊具體是怎么工作的呢?當執(zhí)行insmod時,會調用系統(tǒng)調用
    發(fā)表于 11-25 06:59

    Linux內核模塊簡介

    :用來顯示當前系統(tǒng)中所有正在運行的模塊信息。4.ksyms:用來顯示內核符號和模塊符號表信息。5.depmod:處理可加載內核模塊依賴關系
    發(fā)表于 08-22 09:22

    內核模塊的原理以及其模塊編寫

    內核模塊是具有獨立功能的程序。它可以被單獨編譯,但是不能單獨運行,它的運行必須被鏈接到內核作為內核的一部分在內核空間中運行。
    的頭像 發(fā)表于 01-02 11:11 ?5634次閱讀
    <b class='flag-5'>內核模塊</b>的原理以及其<b class='flag-5'>模塊</b>編寫

    什么是內核模塊?如何編寫一個簡單的模塊?

    內核模塊是Linux內核向外部提供的一個插口,其全稱為動態(tài)可加載內核模塊(Loadable Kernel Module,LKM),我們簡稱為模塊。Linux
    發(fā)表于 08-24 17:15 ?20次下載

    什么是 Linux 內核模塊?

    lsmod 命令能夠告訴你當前系統(tǒng)上加載了哪些內核模塊,以及關于使用它們的一些有趣的細節(jié)。
    的頭像 發(fā)表于 08-09 17:01 ?4057次閱讀

    嵌入式LINUX系統(tǒng)內核內核模塊調試教程

    本文檔的主要內容詳細介紹的是嵌入式LINUX系統(tǒng)內核內核模塊調試教程。
    發(fā)表于 11-06 17:32 ?21次下載
    嵌入式LINUX系統(tǒng)<b class='flag-5'>內核</b>和<b class='flag-5'>內核模塊</b>調試教程

    如何在Petalinux創(chuàng)建Linux內核模塊?

    創(chuàng)建內核模塊 Petalinux可以幫助工程師簡化內核模塊的創(chuàng)建工作。在petalinux工程目錄下,使用命令“ petalinux-create -t modules --name
    的頭像 發(fā)表于 03-02 11:10 ?5641次閱讀

    Asterisk內核模塊介紹

    主要闡述Asterisk內核模塊的基礎知識。
    發(fā)表于 03-17 13:47 ?7次下載

    嵌入式LINUX系統(tǒng)內核內核模塊調試

    嵌入式LINUX系統(tǒng)內核內核模塊調試(嵌入式開發(fā)和硬件開發(fā))-嵌入式LINUX系統(tǒng)內核內核模塊調試? ? ? ? ? ? ? ? ?
    發(fā)表于 07-30 13:55 ?10次下載
    嵌入式LINUX系統(tǒng)<b class='flag-5'>內核</b>和<b class='flag-5'>內核模塊</b>調試

    什么是內核模塊簽名?內核如何開啟模塊簽名

    驅動可以直接編譯進內核鏡像,也可以單獨編譯成ko文件(內核模塊),然后再進行加載。內核從3.7后開始支持模塊簽名,該功能使能以后,內核只允許
    發(fā)表于 08-08 16:14 ?2236次閱讀

    Linux內核模塊參數(shù)傳遞與sysfs文件系統(tǒng)

    函數(shù)傳參的內核傳參機制,編寫內核程序時只要實現(xiàn)傳參接口,用戶在加載內核模塊時即可傳入指定參數(shù),使得內核模塊更加靈活。
    發(fā)表于 06-07 16:23 ?3197次閱讀

    深入分析Linux kernel安全特性: 內核模塊簽名

    顧名思義,在開啟該功能之后,內核在加載內核模塊時,會對內核模塊的簽名進行檢查。
    的頭像 發(fā)表于 10-18 12:32 ?8351次閱讀
    宁城县| 边坝县| 永吉县| 浏阳市| 洛隆县| 枣阳市| 信丰县| 石景山区| 灵寿县| 襄汾县| 定安县| 肥西县| 成安县| 柯坪县| 大荔县| 织金县| 合肥市| 宁乡县| 达孜县| 岳普湖县| 浪卡子县| 宁乡县| 从化市| 祁东县| 会理县| 太和县| 湖州市| 和林格尔县| 清流县| 天长市| 丹巴县| 铜川市| 洱源县| 喜德县| 黄龙县| 昌黎县| 即墨市| 乌恰县| 弋阳县| 渑池县| 库伦旗|