預備知識:
freebsd模組事件型別:
typedef enum modeventtype modeventtype_t;
在系統中註冊乙個載入模組和模組事件處理程式
declare_module(name, data, sub, order)
name:模組的名字
data:是乙個moduledata_t型別的結構 並且各個欄位都進行了初始化
typedef struct moduledata
moduledata_t;
sub:模組所屬於的核心子系統
enum sysinit_sub_id
order: 模組在子系統中初始化次序
enum sysinit_elem_order ;
過程:
(1)編寫makefile如下
kmod = netlink #模組名
srcs=netlink.c #編譯的c檔案
.include
(2)寫c**netlink.c
#include #include #include #include static int test_handler(struct module *module, int event, void *arg)
return(e);
}static moduledata_t test_conf = ;
//定義模組
declare_module(netlink, test_conf, si_sub_drivers, si_order_middle);
(3)載入模組
make load 或者 kldload ./netlink.ko
(4)解除安裝模組
make unload或者 kldunload netlink.ko
編寫核心模組hello world
1 準備環境 mkdir src lkm example cd src lkm example 2 建立檔案 lkm example.c include include include module license gpl module author robert w.oliver ii modul...
編譯FreeBSD核心
過去編譯過linux的核心,發現挺容易的。現在愛上了freebsd,發現編譯freebsd的核心更加簡單,時間更快 第一步是需要看看在現有的系統上是否存在有原始碼 ls usr src sys若出現的結果是 第二步執行下面的命令 cd usr src sys i386 conf然後 cp gener...
FreeBSD核心簡介
freebsd核心可以被看做是一種伺服器,它向使用者程序提供服務。程序通過系統呼叫訪問這些服務。其中有些服務,比如程序排程和記憶體管理,採用核心態執行的程序,或者核心裡定期執行的例程這樣的形式來實現。核心程序只在核心中發揮作用,執行核心映象的 以核心特權模式執行。核心還為每台裝置啟動乙個核心程序,負...