溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux模塊指的是什么意思

發(fā)布時(shí)間:2022-03-04 11:34:34 來源:億速云 閱讀:146 作者:小新 欄目:建站服務(wù)器

這篇文章給大家分享的是有關(guān)linux模塊指的是什么意思的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

在linux中,模塊是一種能夠向linux內(nèi)核添加設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)以及其他組件的方法,是一些可以作為獨(dú)立程序來編譯的函數(shù)和數(shù)據(jù)類型的集合,可以通過靜態(tài)或動(dòng)態(tài)的方法加載到內(nèi)核空間。

本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

linux模塊是什么意思

模塊是一種能夠向Linux內(nèi)核添加設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)及其他組件的方法,它不需要重新編譯內(nèi)核或者重啟系統(tǒng)。對(duì)于內(nèi)核來講,它需要處理的就是模塊的裝載和卸載以及模塊間的依賴關(guān)系。因?yàn)槟K是在內(nèi)核空間運(yùn)行的,因此模塊必須使用內(nèi)核提供的函數(shù),我們也可以使用模塊來調(diào)用相應(yīng)的內(nèi)核函數(shù),這屬于內(nèi)核態(tài)編程的一種方式。模塊文件的本質(zhì)是一種可重定位的二進(jìn)制文件,一般以*.ko的形式出現(xiàn)。

Linux模塊可以通過靜態(tài)或動(dòng)態(tài)的方法加載到內(nèi)核空間,靜態(tài)加載是指在內(nèi)核啟動(dòng)過程中加載;動(dòng)態(tài)加載是指在內(nèi)核運(yùn)行的過程中隨時(shí)加載。一個(gè)模塊被加載到內(nèi)核中時(shí),就成為內(nèi)核代碼的一部分。模塊加載入系統(tǒng)時(shí),系統(tǒng)修改內(nèi)核中的符號(hào)表,將新加載的模塊提供的資源和符號(hào)添加到內(nèi)核符號(hào)表中,以便模塊間的通信。

模塊的使用

模塊的組成

Linux內(nèi)核模塊主要由以下幾個(gè)部分組成:

模塊加載函數(shù)(必須):當(dāng)通過insmod命令加載內(nèi)核模塊時(shí),模塊的加載函數(shù)會(huì)自動(dòng)被內(nèi)核執(zhí)行,完成本模塊相關(guān)初始化工作;

模塊卸載函數(shù)(必須):當(dāng)通過rmmod命令卸載模塊時(shí),模塊的卸載函數(shù)會(huì)自動(dòng)被內(nèi)核執(zhí)行,完成與模塊加載函數(shù)相反的功能;

模塊許可證聲明(必須):模塊許可證(LICENSE)聲明描述內(nèi)核模塊的許可權(quán)限,如果不聲明LICENSE,模塊被加載時(shí)將收到內(nèi)核被污染的警告。

模塊參數(shù)(可選):模塊參數(shù)是模塊被加載的時(shí)候可以被傳遞給他的值,它本身對(duì)應(yīng)模塊內(nèi)部的全局變量;

模塊導(dǎo)出符號(hào)(可選):內(nèi)核模塊可以導(dǎo)出符號(hào)(symbol,對(duì)應(yīng)于函數(shù)或變量),這樣其他模塊可以使用本模塊中的變量或函數(shù);

模塊作者等信息聲明(可選)。

一個(gè)模塊的示例:

//內(nèi)核頭文件
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
//加載函數(shù)
static int __init init_hello_module(void){
    //內(nèi)核打印函數(shù),linux系統(tǒng)使用dmesg命令可以查看打印信息
    printk(KERN_INFO "Hello World\n");
    return 0;
}
//卸載函數(shù)
static void __exit exit_hello_module(void){
    printk(KERN_INFO "Exit the Hello world Module!\n");
}
module_init(init_hello_module);
module_exit(exit_hello_module);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Eric");
MODULE_VERSION("v0.1");
MODULE_DESCRIPTION("TEST FOR MODULE");

模塊對(duì)應(yīng)的Makefile文件:

#Makefile
obj-m:=hello.o
KERNELBUILD:=/lib/modules/$(shell uname -r)/build
all:
    make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
    make -C $(KERNELBUILD) M=$(shell pwd) clean

感謝各位的閱讀!關(guān)于“l(fā)inux模塊指的是什么意思”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI