設計兩個核心模組,它們分別完成以下工作:
1) 設計乙個模組,該模組的功能是列出系統中所有核心程序的程式名、pid
號和程序的狀態。
2) 設計乙個帶有引數的核心模組,其引數為某個程序的pid
號;該模組的功能是列出該程序的家族資訊,包括父程序、兄弟程序和子程序的程式名、
pid號。
作業1的答
案:**
#include作業2<
linux
/init.h
>
//定義在init.h
2#include
<
linux
/module.h
>
3#include
<
linux
/sched.h
>
4#include
<
linux
/list.h
>56
module_license(
"gpl");
78static
intname_init(
void
) //
初始化函式,註冊和申請資源。返回0表示初始化成功;其他值表示失敗924
printk("\n
");25}
2627
return
0; 28}
29static
void
name_exit(
void
) //
退出的函式,登出和釋放資源
3033
34module_init(name_init);
//標記的name_init函式在模組載入時呼叫
35module_exit(name_exit);
//標記的name_exit函式在解除安裝模組時呼叫
36
**
1=find_task_by_pid(pid);#include
<
linux
/init.h
>
//定義在init.h
2#include
<
linux
/module.h
>
3#include
<
linux
/sched.h
>
4#include
<
linux
/list.h
>56
module_license(
"gpl");
7static
intpid=1
;8module_param(pid,
int,s_irugo);
//給模組傳遞引數910
static
intname_init(
void
) //
初始化函式,註冊和申請資源。返回0表示初始化成功;其他值表示失敗
11*/
28//
searching the children
29list_for_each_entry(task2,
&task1
->
children, sibling)
32//
searching the siblings
33list_for_each_entry(task2,
&task1
->
real_parent
->
children, sibling)
3637
}else
40return
0; 41}
42static
void
name_exit(
void
) //
退出的函式,登出和釋放資源
4346
47module_init(name_init);
//標記的name_init函式在模組載入時呼叫
48module_exit(name_exit);
//標記的name_exit函式在解除安裝模組時呼叫
在2.6.30版本以前核心應該寫成
task1=find_task_by_vpid(pid);
最後把那個超級通用的核心編譯的makefile發出來吧。。-m:
=name.o
else
kdir:
=/lib
/modules
/$(shell uname -r)
/build
pwd:
=$(shell pwd)
default
:$(make)
-c $(kdir) m
=$(pwd) modules
clean:
$(make)
-c $(kdir) m
=$(pwd) clean
endif
Linux核心模組程式設計
目標 熟悉linux模組相關函式等 模組載入,例 static int init initialization function void module init initialization function 這裡 init define init attribute section init.t...
Linux核心模組程式設計
linux核心模組程式設計的資料有些紛繁複雜,有的過於簡單,有的過於龐雜,我試圖用筆記的形式想讀者展示怎樣來程序linux模組程式設計,力圖做到簡明扼要,這篇文章也是作為本人備忘的資料,所以有些地方過於簡略是難免的。本來這篇文章的目的就是讓使用者知其然,至於所以然還是請參考相應的資料,其實最好的資料...
核心模組程式設計入門總結 1
1.出現編譯的模組不符合當前模組的問題 原因 基本都是因為在用gcc編譯的時候加入了 i引數指定原始碼樹,但是所指定的版本和當前的核心版本衝突的問題。比如我碰到的是2.4.20 8custom rh9.0自帶的核心 的問題,和我們後來編譯的2.4.20 8的衝突。解決 修正.include linu...