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

操作系統(tǒng)實驗-添加一個內(nèi)核模塊

這篇具有很好參考價值的文章主要介紹了操作系統(tǒng)實驗-添加一個內(nèi)核模塊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

參考用書:《操作系統(tǒng)實踐:基于Linux的應(yīng)用與內(nèi)核編程》

一.添加一個內(nèi)核模塊

1.1需求分析

對于一個應(yīng)用程序而言,源代碼經(jīng)編譯后與標準運行庫鏈接,通過系統(tǒng)調(diào)用執(zhí)行操作系統(tǒng)內(nèi)核中的特權(quán)指令,指令返回的結(jié)果通過系統(tǒng)調(diào)用返回給用戶,完成程序。

由于Linux是單內(nèi)核多模塊的操作系統(tǒng),整個操作系統(tǒng)只包含一個由多個不同功能模塊組成的內(nèi)核,通過Linux系統(tǒng)的這種特性,可以動態(tài)添加自己編寫的內(nèi)核模塊,并由系統(tǒng)每次啟動時進行加載。

通過內(nèi)核模塊的動態(tài)添加和刪除,可以直觀的感受到內(nèi)核模塊的編寫以及動態(tài)添加和刪除的過程??梢酝ㄟ^此次實驗理解用戶態(tài)(User Model)和內(nèi)核態(tài)(Kernel Model)的關(guān)系。并掌握內(nèi)核模塊代碼中的一些常見宏和參數(shù)以及內(nèi)核模塊程序和應(yīng)用程序的差異。

實驗流程為:編寫kello.c文件和Makefile文件,并使用insmod和rmmmod命令對內(nèi)核模塊進行安裝和卸載。觀察終端輸出的不同信息。同時編寫代碼時應(yīng)注意安全問題,不要對內(nèi)核進行不當訪問從而使系統(tǒng)出現(xiàn)錯誤。

輸入:使用insmod安裝所編寫的內(nèi)核模塊。

輸出:通過dmesg命令觀察安裝內(nèi)核模塊和卸載內(nèi)核模塊所輸出的信息。

1.2概要設(shè)計

本次實驗包含兩個文件:kello.c和編譯所需的Makefile文件,kello.c文件包含模塊初始化函數(shù)hello_init,在模塊初始化時被調(diào)用,以及模塊回收函數(shù)hello_exit,在模塊被撤銷時使用。

在該文件的最后,需要添加兩行聲明module_init(hello_init)和module_exit(hello_exit),使模塊被更高效的加載執(zhí)行和撤銷,加快內(nèi)存的分配和回收

對于Makefile文件內(nèi)容,KERNELRELEASE定義在linux內(nèi)核源代碼中的頂層makefile,boj-m表示所安裝內(nèi)核模塊的名稱,需要和c文件名字相同。

KDIR和PWD目錄分別代表內(nèi)核的源代碼目錄和當前的工作路徑,defult中為編譯命令以及一些文件的刪除命令。

1.3詳細設(shè)計

Kello.c的hello_init調(diào)用printk輸出一段初始化信息,hello_exit調(diào)用printk輸出模塊回收時打印的信息。

對于Makefile文件,KERNELRELEASE是在Linux內(nèi)核源代碼頂層Makelile中定義的一個變量,在第一次讀取執(zhí)行此 Makefile文件時,KERNELRELEASE沒有被定義,所以make將讀取執(zhí)行else之后的內(nèi)容。

如果make的目標是clean. 直接執(zhí)行clean操作,然后結(jié)束。

當沒有聲明make的目標時,make執(zhí)行默認操作,即default 后的指令,此時-C$ (KDIR)指明跳轉(zhuǎn)到內(nèi)核源代碼目錄下讀取那里的Makefiles SUBDIRS $ (PWD) 表明需要返回到當前目錄繼續(xù)讀入并執(zhí)行當前的Makefile.當從內(nèi)核源代碼目錄返回時, KERNELRELEASE已被定義,kbuild也被啟動去解析kbuild語法的語句,make將繼續(xù)讀取else之前的內(nèi)容。

實驗過程:

在當前文件夾下執(zhí)行make命令

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

觀察當前文件夾是否生成所需文件

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

sudo insmod 安裝LKM

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

觀察安裝LKM后dmesg輸出的內(nèi)核初始化信息

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

sudo rmmod 卸載LKM

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

觀察卸載LKM后dmesg輸出的內(nèi)核初始化和撤銷信息

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

1.4調(diào)試分析

分析一:make命令提示空變量名錯誤

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

首先遇到的錯誤為,make命令報告空變量名。是make文件的格式問題,注意在$(MAKE) -C $(KDIR) SUBDIRS =$(shell pwd) modules,SUBDIRS的后沒有空格,去掉空格后問題解決。

分析二:mkdir創(chuàng)建目錄權(quán)限不夠

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux
linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

mkdir創(chuàng)建目錄權(quán)限不夠,錯誤定位在fixdep.c文件的404行,fatal error打開依賴文件的權(quán)限不夠,并顯示compilation terminated(編譯結(jié)束)。

fixdep.c文件是make的一個工具,由make在編譯時調(diào)用。問題出在make -C SUBDIRS=處,應(yīng)修改為make -C M=。二者的區(qū)別在于,$(MAKE)相當于make,-C 選項的作用是指將當前工作目錄轉(zhuǎn)移到所指定的位置。“M=”表示當用戶需要以某個內(nèi)核為基礎(chǔ)編譯一個外部模塊的話,需要在make modules 命令中加入“M=dir”,程序會到所指定的dir目錄中查找模塊源碼,將其編譯,生成.ko文件。

M并非隨意命名,在新的內(nèi)核模塊編程中的make命令中有個M選項,是makefile腳本中的一個變量,$(MAKE) -C $(KDIR) M=$(PWD)與$(MAKE) -C $(KDIR) SUBDIRS =$(PWD)的作用是一樣的,不過SUBDIRS是過時的使用方法,修改后問題得以解決。

linux添加內(nèi)核模塊,操作系統(tǒng)課程實驗,linux

make文件和c文件如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-744832.html

ifneq ($(KERNELRELEASE),)
obj-m := kello.o
else 
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
    $(MAKE) -C $(KDIR) M=$(shell pwd) modules
    rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers
endif

到了這里,關(guān)于操作系統(tǒng)實驗-添加一個內(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īng)查實,立即刪除!

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

相關(guān)文章

  • Linux操作系統(tǒng)(二):操作系統(tǒng)結(jié)構(gòu)與內(nèi)核設(shè)計

    Linux操作系統(tǒng)(二):操作系統(tǒng)結(jié)構(gòu)與內(nèi)核設(shè)計

    ?在(一)詳解CPU中介紹了操作系統(tǒng)所基于的硬件CPU后,本部分學(xué)習(xí)操作系統(tǒng)的架構(gòu)。在計算機系統(tǒng)中,操作系統(tǒng)的架構(gòu)通常包括以下幾個主要組件: 內(nèi)核(Kernel) 進程管理(Process Management) 內(nèi)存管理(Memory Management) 文件系統(tǒng)管理(File System Management) 設(shè)備管理(Device

    2024年02月13日
    瀏覽(37)
  • linux內(nèi)核:筆記1-內(nèi)核和操作系統(tǒng)的關(guān)系

    參考鳴謝: 1.操作系統(tǒng)內(nèi)核就是在開機的時候直接加載到內(nèi)存中的第一道程序 2.是硬件和用戶程序的橋梁紐帶,向上管理用戶程序,向下調(diào)度硬件設(shè)備 3.進程調(diào)度:調(diào)度cpu,分配時間片給進程,同時也負責(zé)銷毀進程 4.內(nèi)存管理:生成和銷毀內(nèi)存 5.文件管理: 使用文件系統(tǒng)組織

    2024年02月04日
    瀏覽(19)
  • 探索操作系統(tǒng):內(nèi)核、啟動和系統(tǒng)調(diào)用的奧秘

    探索操作系統(tǒng):內(nèi)核、啟動和系統(tǒng)調(diào)用的奧秘

    首先,對于有科班背景的讀者,可以跳過本系列文章。這些文章的主要目的是通過簡單易懂的匯總,幫助非科班出身的讀者理解底層知識,進一步了解為什么在面試中會涉及這些底層問題。否則,某些概念將始終無法理解。這些計算機基礎(chǔ)文章將為你打通知識的任督二脈,祝

    2024年02月11日
    瀏覽(23)
  • linux查看系統(tǒng)版本、內(nèi)核信息、操作系統(tǒng)類型版本

    linux查看系統(tǒng)版本、內(nèi)核信息、操作系統(tǒng)類型版本

    1. 使用 `uname` 命令:這將顯示完整的內(nèi)核版本信息,包括內(nèi)核版本號、主機名、操作系統(tǒng)類型等。 2. 使用 `lsb_release` 命令(僅適用于支持 LSB(Linux Standard Base)的發(fā)行版):這將顯示包含發(fā)行版名稱、版本號和其他詳細信息的 Linux 發(fā)行版信息。 ?3. 使用 `/etc/os-release` 文件:

    2024年02月08日
    瀏覽(33)
  • 操作系統(tǒng)的體系結(jié)構(gòu)、內(nèi)核、虛擬機

    操作系統(tǒng)的體系結(jié)構(gòu)、內(nèi)核、虛擬機

    ??個人主頁: ?? 葉落閑庭 ??我的專欄:?? c語言 數(shù)據(jù)結(jié)構(gòu) javaweb 石可破也,而不可奪堅;丹可磨也,而不可奪赤。 內(nèi)核是操作系統(tǒng)最基本、最核心的部分 實現(xiàn)操作系統(tǒng)內(nèi)核功能的那些程序就是 內(nèi)核程序 與硬件關(guān)系較緊密的模塊: 時鐘管理:實現(xiàn)計時功能 中斷處理:負

    2024年02月12日
    瀏覽(17)
  • 操作系統(tǒng)權(quán)限提升(三)之Windows系統(tǒng)內(nèi)核溢出漏洞提權(quán)

    系列文章 操作系統(tǒng)權(quán)限提升(一)之操作系統(tǒng)權(quán)限介紹 操作系統(tǒng)權(quán)限提升(二)之常見提權(quán)的環(huán)境介紹 注:閱讀本編文章前,請先閱讀系列文章,以免造成看不懂的情況?。。?溢出提權(quán)是指攻擊者利用系統(tǒng)本身或系統(tǒng)中軟件的漏洞來獲取 Windows操作系統(tǒng)System權(quán)限,其中溢出,提權(quán)

    2024年02月14日
    瀏覽(25)
  • 【項目分析】仿linux0.11的操作系統(tǒng)內(nèi)核

    【項目分析】仿linux0.11的操作系統(tǒng)內(nèi)核

    系列綜述: ??目的:本系列是個人整理為了 秋招面試 的,整理期間苛求每個知識點,平衡理解簡易度與深入程度。 ??來源:材料主要源于 《操作系統(tǒng) 真象還原》及各大佬博客 進行的,每個知識點的修正和深入主要參考各平臺大佬的文章,其中也可能含有少量的個人實驗

    2024年02月09日
    瀏覽(22)
  • 操作系統(tǒng)權(quán)限提升(十八)之Linux提權(quán)-內(nèi)核提權(quán)

    操作系統(tǒng)權(quán)限提升(十八)之Linux提權(quán)-內(nèi)核提權(quán)

    內(nèi)核提權(quán)是利用Linux內(nèi)核的漏洞進行提權(quán)的,內(nèi)核漏洞進行提權(quán)一般包括三個環(huán)節(jié): 1、對目標系統(tǒng)進行信息收集,獲取到系統(tǒng)內(nèi)核信息及版本信息; 2、根據(jù)內(nèi)核版本獲取其對應(yīng)的漏洞以及EXP 3、使用找到的EXP對目標系統(tǒng)發(fā)起攻擊,完成提權(quán)操作 查看Linux操作系統(tǒng)的內(nèi)核版本

    2024年01月16日
    瀏覽(26)
  • 簡易操作系統(tǒng):使用Python 做的圖形界面 C 做的內(nèi)核

    簡易操作系統(tǒng):使用Python 做的圖形界面 C 做的內(nèi)核

    目錄 實驗要求 一、文件管理和用戶接口 ⑴文件的邏輯結(jié)構(gòu) ⑵磁盤模擬 ⑶目錄結(jié)構(gòu) ⑷磁盤分配 ⑸磁盤空閑存儲空間管理 ⑹用戶接口 ⑺屏幕顯示 ?代碼部分 ? ? ? ? python調(diào)用c的方法: ?編輯 c語言部分,文件名 Operating_System_C.c python語言部分 運行實例: ?? 文件管理和用戶

    2024年02月08日
    瀏覽(15)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包