国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux內(nèi)核學(xué)習(xí)(十三)—— 設(shè)備與模塊(基于Linux 2.6內(nèi)核)

這篇具有很好參考價值的文章主要介紹了Linux內(nèi)核學(xué)習(xí)(十三)—— 設(shè)備與模塊(基于Linux 2.6內(nèi)核)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、設(shè)備類型

二、模塊

構(gòu)建模塊

安裝模塊

載入模塊


一、設(shè)備類型

在 Linux 以及 Unix 系統(tǒng)中,設(shè)備被分為以下三種類型:

  • 塊設(shè)備(blkdev):以塊為尋址單位,塊的大小隨設(shè)備的不同而變化;塊設(shè)備通常支持重定位(seeking)操作,也就是對數(shù)據(jù)的隨機訪問。如硬盤、藍(lán)光光碟和 Flash 這樣的存儲設(shè)備都是塊設(shè)備。塊設(shè)備是通過稱為 ”塊設(shè)備節(jié)點“ 的特殊文件來訪問的,并且通常被掛載為文件系統(tǒng)。
  • 字符設(shè)備(cdev):不可尋址,只提供數(shù)據(jù)的流式訪問,即一個一個字符或字節(jié)地訪問。如鍵盤、鼠標(biāo)和打印機等都是字符設(shè)備。字符設(shè)備是通過稱為 ”字符設(shè)備節(jié)點“ 的特殊文件來訪問的,與塊設(shè)備不同,應(yīng)用程序通過直接訪問設(shè)備節(jié)點與字符設(shè)備交互。
  • 網(wǎng)絡(luò)設(shè)備:有時也被稱為以太網(wǎng)設(shè)備(ethernet devices),提供了對網(wǎng)絡(luò)的訪問,這是通過一個物理適配器和一種特定的協(xié)議進(jìn)行的。它不是通過設(shè)備節(jié)點來訪問,而是通過套接字 API 這樣的特殊接口來訪問。

并不是所有設(shè)備驅(qū)動都表示物理設(shè)備。有些設(shè)備驅(qū)動是虛擬的,僅僅提供訪問內(nèi)核功能而已。這種設(shè)備被稱為 ”偽設(shè)備“ (pseudo device),如內(nèi)核隨機數(shù)發(fā)生器(/dev/random)、空設(shè)備(/dev/null)等。

二、模塊

盡管 Linux 是 ”單塊內(nèi)核“(monolithic)的操作系統(tǒng),但 Linux 內(nèi)核時模塊化組成的,它允許內(nèi)核在運行時動態(tài)地向其中安裝或卸載一個模塊。

下面編寫一個 Hello,World!的模塊程序:

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

/* 初始化函數(shù),當(dāng)模塊裝載時被調(diào)用 */
static int hello_init(void)
{
    printk(KERN_ALERT "Module installed!\n");
    return 0;
}

/* 退出函數(shù),當(dāng)模塊卸載時調(diào)用 */
static void hello_exit(void)
{
    printk(KERN_ALERT "Module removed!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");

這是一個非常非常簡單的內(nèi)核模塊程序,hello_init() 是模塊的入口點,它通過 module_init() 例程注冊到系統(tǒng)中,在內(nèi)核裝載時調(diào)用。這個 init 函數(shù)僅僅打印了一行簡單的信息,但在實際的模塊中,該函數(shù)還會注冊資源、初始化硬件、分配數(shù)據(jù)結(jié)構(gòu)等。而 hello_exit() 函數(shù)負(fù)責(zé)對 init 函數(shù)以及在模塊生命周期過程中所作的一切事情進(jìn)行撤銷與清理工作。

構(gòu)建模塊

下面開始構(gòu)建模塊。有兩種方法來構(gòu)建模塊:

第一種是放在內(nèi)核源代碼樹中。這樣構(gòu)建的模塊會正式成為 Linux 內(nèi)核中的一部分,設(shè)備驅(qū)動程序存放在內(nèi)核源碼樹根目錄下的 /drivers 的子目錄下,根據(jù)不同的設(shè)備類型,字符設(shè)備存放于 /drivers/char,塊設(shè)備存放于 /drivers/block 等。

假如我們編寫的模塊類型是字符設(shè)備,那就把模塊文件移動到?/drivers/char 目錄下,然后往?/drivers/char 目錄下的 Makefile 文件中添加一行:

obj-m += hello.o

然后編譯內(nèi)核,重新裝載內(nèi)核即可。

第二種是放在內(nèi)核代碼外。將 hello.c 放到 /drivers/char 目錄下后,在內(nèi)核代碼外創(chuàng)建一個 Makefile 文件,內(nèi)容如下:

# -C 后為你的內(nèi)核源碼樹所在位置
#  make -C /root/linux_kernel_learning/linux-2.6 modules

obj-m += hello.o

然后執(zhí)行如下指令來構(gòu)建模塊:?

make -C /root/linux_kernel_learning/linux-2.6 SUBDIRS=$PWD modules

安裝模塊

編譯后模塊將被裝入到目錄 /lib/modules/<version>/kernel/drivers/char?下:

下面的構(gòu)建命令用來安裝編譯的模塊(在內(nèi)核源碼樹目錄下執(zhí)行):

make modules_install

載入模塊

載入一個模塊:

insmod hello.ko

卸載一個模塊:文章來源地址http://www.zghlxwxcb.cn/news/detail-681870.html

rmmod hello.ko

到了這里,關(guān)于Linux內(nèi)核學(xué)習(xí)(十三)—— 設(shè)備與模塊(基于Linux 2.6內(nèi)核)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux--2.6內(nèi)核調(diào)度和環(huán)境變量

    Linux--2.6內(nèi)核調(diào)度和環(huán)境變量

    ??北塵_ :個人主頁 ??個人專欄 :《Linux操作系統(tǒng)》《經(jīng)典算法試題 》《C++》 《數(shù)據(jù)結(jié)構(gòu)與算法》 ??走在路上,不忘來時的初心 上圖是Linux2.6內(nèi)核中進(jìn)程隊列的數(shù)據(jù)結(jié)構(gòu),之間關(guān)系也已經(jīng)給大家畫出來,方便大家理解 如果有多個CPU就要考慮進(jìn)程個數(shù)的負(fù)載均衡問題 普通

    2024年02月05日
    瀏覽(20)
  • LSM零知識學(xué)習(xí)二、Linux內(nèi)核中的安全模塊

    接前一篇文章:LSM零知識學(xué)習(xí)一、概念與框架機制 本文內(nèi)容參考: 《Linux內(nèi)核安全模塊深入剖析》 李志 機械工業(yè)出版社 Linux LSM(Linux Security Modules) Hook Technology_weixin_30929011的博客-CSDN博客 Linux Security Module Usage — The Linux Kernel documentation 前文已提到,LSM的全稱為Linux Security Mod

    2024年02月10日
    瀏覽(30)
  • 【PostgreSQL內(nèi)核學(xué)習(xí)(十三)—— (PortalRun)】

    聲明 :本文的部分內(nèi)容參考了他人的文章。在編寫過程中,我們尊重他人的知識產(chǎn)權(quán)和學(xué)術(shù)成果,力求遵循合理使用原則,并在適用的情況下注明引用來源。 本文主要參考了《PostgresSQL數(shù)據(jù)庫內(nèi)核分析》一書,OpenGauss1.1.0 的開源代碼和《OpenGauss數(shù)據(jù)庫源碼解析》一書以及Op

    2024年02月07日
    瀏覽(17)
  • 【PostgreSQL內(nèi)核學(xué)習(xí)(二十三)—— 執(zhí)行器(ExecEndPlan)】

    【PostgreSQL內(nèi)核學(xué)習(xí)(二十三)—— 執(zhí)行器(ExecEndPlan)】

    聲明 :本文的部分內(nèi)容參考了他人的文章。在編寫過程中,我們尊重他人的知識產(chǎn)權(quán)和學(xué)術(shù)成果,力求遵循合理使用原則,并在適用的情況下注明引用來源。 本文主要參考了 postgresql-10.1 的開源代碼和《OpenGauss數(shù)據(jù)庫源碼解析》和《PostgresSQL數(shù)據(jù)庫內(nèi)核分析》一書 ??在這三

    2024年01月17日
    瀏覽(28)
  • 《由淺入深學(xué)習(xí)SAP財務(wù)》:第2章 總賬模塊 - 2.6 定期處理 - 2.6.4 月末操作:貨幣折算

    《由淺入深學(xué)習(xí)SAP財務(wù)》:第2章 總賬模塊 - 2.6 定期處理 - 2.6.4 月末操作:貨幣折算

    ???????? 如果一個公司代碼啟用了多個本位幣,如下表所示,則在平時記賬時,系統(tǒng)會在憑證行項目中同時體現(xiàn)出多個本位幣的金額 。 圖2.6.4-1 ???????? 兩個本位幣的金額都會實時更新到科目余額中 。因此,在月末可以直接提取兩種本位幣下的報表結(jié)果。 ??????

    2024年04月15日
    瀏覽(21)
  • 【linux驅(qū)動開發(fā)】在linux內(nèi)核中注冊一個雜項設(shè)備與字符設(shè)備以及內(nèi)核傳參的詳細(xì)教程

    【linux驅(qū)動開發(fā)】在linux內(nèi)核中注冊一個雜項設(shè)備與字符設(shè)備以及內(nèi)核傳參的詳細(xì)教程

    開發(fā)環(huán)境: windows + ubuntu18.04 + 迅為rk3568開發(fā)板 相較于字符設(shè)備,雜項設(shè)備有以下兩個優(yōu)點: 節(jié)省主設(shè)備號:雜項設(shè)備的主設(shè)備號固定為 10,在系統(tǒng)中注冊多個 misc 設(shè)備驅(qū)動時,只需使用子設(shè)備號進(jìn)行區(qū)分即可。 使用簡單:相比如普通的字符設(shè)備驅(qū)動, misc驅(qū)動只需要將基本信

    2024年01月21日
    瀏覽(19)
  • Linux 內(nèi)核設(shè)備樹時鐘綁定

    這種綁定依然處于開發(fā)中,并且基于 benh[1] 的一些實驗性工作。 時鐘信號源可以由設(shè)備樹中的任何節(jié)點表示。這些節(jié)點被指定為時鐘提供者。時鐘消費者節(jié)點使用 phandle 和時鐘指示符對將時鐘提供者輸出連接到時鐘輸入。與 gpio 指示符類似,時鐘指示符是 0 個、1 個或多個標(biāo)

    2024年02月17日
    瀏覽(23)
  • Linux 內(nèi)核定時器(高級字符設(shè)備五)

    ??在 Linux 內(nèi)核中很多函數(shù)是基于定時器進(jìn)行驅(qū)動的,但是內(nèi)核定時器的精度并不高,所以不能作為高精度定時器使用。并且內(nèi)核定時器的運行沒有周期性,到達(dá)計時終點后會自動關(guān)閉。如果要實現(xiàn)周期性定時,就要在定時處理函數(shù)中重新開啟定時器。 ??Linux 內(nèi)核中使用

    2024年02月08日
    瀏覽(23)
  • linux用戶態(tài)與內(nèi)核態(tài)通過字符設(shè)備交互

    linux用戶態(tài)與內(nèi)核態(tài)通過字符設(shè)備交互

    Linux設(shè)備分為三類,字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)接口設(shè)備。字符設(shè)備只能一個字節(jié)一個字節(jié)讀取,常見外設(shè)基本都是字符設(shè)備。塊設(shè)備一般用于存儲設(shè)備,一塊一塊的讀取。網(wǎng)絡(luò)設(shè)備,Linux將對網(wǎng)絡(luò)通信抽象成一個設(shè)備,通過套接字對其進(jìn)行操作。 對于字符設(shè)備的用戶態(tài)與內(nèi)核

    2024年02月03日
    瀏覽(26)
  • linux驅(qū)動開發(fā)--day1(驅(qū)動、內(nèi)核模塊及相關(guān)命令、內(nèi)核模塊傳參)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包