(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巨集宣告此模...