作業系統實驗 Linux核心模組程式設計

2021-10-11 01:43:05 字數 2532 閱讀 3747

(1)設計乙個模組,要求列出系統中所有核心執行緒的程式名、pid、程序狀態、程序優先順序、父程序的pid。

(2)設計乙個帶引數的模組,其引數為某個程序的pid號,模組的功能是列出該程序的家族資訊,包括父程序、兄弟程序和子程序的程式名、pid號及程序狀態。

#include

#include

#include

#include

#include

// 初始化函式

static

inthello_init

(void)}

return0;

}// 清理函式

static

void

hello_exit

(void

)// 函式註冊

module_init

(hello_init)

;module_exit

(hello_exit)

;// 模組許可申明

module_license

("gpl"

);

obj-m := module1.o

kdir:= /lib/modules/$(shell uname -r)

/build

pwd:=

$(shell pwd

)default:

$(make)

-c $(kdir)

m=$(pwd)

modules

clean:

$(make)

-c $(kdir)

m=$(pwd)

clean

obj-m: 編譯成可動態載入的module,通過insmod動態重定位裝入到核心

obj-y: 靜態編譯鏈結進核心,在系統啟動過程中進行初始化

(1)編譯

make
(2)新增模組

insmod module1.ko
(3)輸出日誌檢視效果

dmesg
(4)若要修改module1.c**,重新新增同名模組前需要先解除安裝模組,否則會報錯。

//用來傳遞命令列引數

static

inthello_init

(void

)else

// 兄弟程序

list_for_each

(pp,

&p->parent->children)

//for迴圈遍歷鍊錶

// 子程序

list_for_each

(pp,

&p->children)

return0;

}static

void

hello_exit

(void

)module_init

(hello_init)

;module_exit

(hello_exit)

;module_license

("gpl"

);

obj-m:=module2.o

kdir:= /lib/modules/$(shell uname -r)

/build

pwd:=

$(shell pwd

)default:

$(make)

-c $(kdir)

m=$(pwd)

modules

clean:

$(make)

-c $(kdir)

m=$(pwd)

clean

(1)編譯

make
(2)新增模組,pid號可以利用實驗內容一讀取出來的程序號,不然隨便寫乙個數字很可能由於沒有該程序從而報錯

insmod module2.ko pid=168
(3)輸出日誌,從左到右依次是程序說明、程序號、程序的程式名、程序狀態

作業系統實驗指導 基於Linux核心

作業系統 是計算機及相關專業的必修課程,本教材所介紹的 基於linux核心的作業系統實驗體系 可引導學生與作業系統申核互動以理解其原理。整個實驗體系構架在linux核心的基礎上,按系統基本構架 系統五大功能和奉統與使用者的介面三方面分為7個實驗 本書共有9章 從內容上分為兩大部分。第一部分包括兩章,...

Linux作業系統實驗

1.啟動ubuntu系統,開啟終端 或使用putty連線系統 如果未安裝ssh,可以使用sudo apt get install ssh 如圖1,命令 開啟終端 輸入sudo apt getinstall ssh 如果安裝失敗就要切換源 2.檢視系統資訊,並將以下檢視內容重定向新增到檔案system...

Linux作業系統實驗(2)

核心模組的結構 標頭檔案宣告。標頭檔案module.h和init.h是必不可少的。module.h是載入模組所需要的函式和符號定義 init.h中包含初始化和清楚函式的定義。如果載入是允許用 戶傳遞引數,模組還應包括moduleparam.h。模組許可宣告。用module license巨集宣告此模...