亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > FreeBSD > 正文

FreeBSD SNP 2.Server端--自我測試連線

2024-07-26 00:29:11
字體:
來源:轉載
供稿:網友
發信人: hhuu(不知道愛我的是愛我的人), 信區: FreeBSD
標 題: FreeBSD kld簡介
發信站: BBS 水木清華站

上面的東西大致是daemonnews上的一片文章 by Andrew 
在google上可以找到.
我覺得將的太羅索,還有一點小錯誤.改一改,放到這里來.
你要是感興趣的話,千萬去thc看看.
最后在強調一下
原文的作者是
Andrew Reiter 
http://www.subterrain.net/~awr/KLD-Turorial/

就象linux下的lkm一樣,FreeBSD中有相應的東東.
如果我沒有搞錯的話,2.x系列中是叫lkm的.現在
還有系統的同志可以在/usr/share/example/lkm
中看到這些前輩的影子.
但是時代變遷,到了3.x系列之后,新的東西出現
了,就是所謂的kld.
這里摘錄的是關于FreeBSD的lkm和kld的比較:
1. LKM system used a userland linker to
   push PRerelocated binary data into
   the kernel.
2. KLD system does the relocation itself
   in the kernel. LKMs had special data
   structures that the lkm driver knew about
   and used those to wire it into the kernel
3. LKMs were single purpose and were quite
   difficult to change from LKM to actual
   kernel code.
4. With KLDs, thins were made to be more
   generic. A file could contain 0 or more
   modules.
5. Each module is self-contianed and self-
   initializing and registering.
6. KLDs and kernel code are compiled the
   same.
7. It's possible to take a piece of the
   kernel and easily make it a KLD without
   much difficulty.
8. The dependncies and versioning are now
   at the module level.
   

   我們都知道kld有什么好處了,那么就開始作
一個吧. 標準的例子在/usr/share/example/kld.
btw: 3.x系列的還有lkm的目錄,有人愿意看嗎?
kld目錄中有兩個子目錄,對應了兩種主要的方法.
寫設備驅動(cdev)和增加系統調用(syscall).
  我們還是從一般的情況開始吧.
  所有的kld都會有一個類似的函數:
  static int
  load_handler (module_t mod, int what, void *arg)
  {
        int err=0;
        switch(what) {
        case MOD_LOAD:
          ........
          break;
        case MOD_UNLOAD:
          .......
          break;
        default:
          err=EINVAL;
          break;
        }
        return (err);
  }
  大家都覺得很面善吧.看上去和init_module沒有太大
的區別.上面的函數格式格式可以在/usr/include/sys/module.h
中找到.
typedef int (*modeventhand_t)(module_t mod, int what, void *arg);
這個module_t mod是指向module結構的指針.從它可以牽出所有的
被載入的模塊.
int what是modeventtype_t的值之一.
    MOD_LOAD:
    MOD_UNLOAD:
    MOD_SHUTDOWN: 上面兩個就不用說了.這個shutdown的意思
    似乎是指機器shutdown時kld的行為.

所有的kld都需要注冊.所以就有了一個通用的宏:
DECLARE_MODULE( name, data, sub, order)
定義在/usr/include/sys/module.h
name: 就是kld的名字
data: 是個moduledata類型的東東.
sub:  在/usr/include/sys/kernel.h里定義的
      sysinit_sub_id的值.
order:在/usr/include/sys/kernel.h里面的
      sysinit_elem_order
看看就明白了,沒有什么大不了的.
(Declare_module還調用的sysinit......其實也不過是....
  ........... #%@^#&$^%*&$^)
考慮到我們寫module不過是為了設備驅動或者
增加系統調用罷了.所以就有了兩個常用的宏.
DEV_MODULE和SYSCALL_MODULE
分別在/usr/include/sys/conf.h和sys/sysent.h中
也就是對DECLARE_MODULE的簡單包裝.

回想我們在linux下編譯一個模塊時無非是
gcc -DMODULE -D__KERNEL__ -DLINUX -O3 -c ....
可是在FreeBSD下就不是這么好辦了.看看
前面說的那兩個例子編譯時出來的那么一
大堆,我就先嚇壞了.
感謝上帝,不是沒一個人都要搞得那么清楚才能
編譯kld的.我們的Makefle關鍵在于.include
只要包含了bsd.kmod.mk,我們自己要作的事就是
SRCS= 源文件名
KMOD= 目標模塊的名字
如果你是愛刨根問底的,請看/usr/share/mk

還是關于syscall的問題.
在sys/sysent.h中有定義
struct sysent {
        int sy_narg;
        sy_call_t *sy_call;
        };
這分明是linux下面那個
sys_call_table么.
有區別的就是那個offset.
可以用offset=NO_SYSCALL來讓系統在載入的時候
自動選擇syscall number.
回顧一下,我們的任務是要有一個
load_xxx函數來處理load和unload的情況
要有我們自己的調用.
最后SYSCALL_MODULE來注冊.

如果是設備模塊的話.
我們需要一張表
/usr/include/sys/conf.h中定義的
struct cdevsw {.....}
然后的過程和上面幾乎一模一.....
就這樣吧.強力推薦
1 http://thc.pimmel.com/files/thc/bsdkern.html
2 /usr/share/example/kld/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
51色欧美片视频在线观看| 欧美成人精品影院| 国产91精品视频在线观看| 精品自拍视频在线观看| 中文字幕日韩视频| www国产精品视频| 91精品国产免费久久久久久| 中文字幕久久亚洲| 久久国产精品免费视频| 日韩欧美在线一区| 久久久久久久一区二区三区| 欧美日韩中文在线观看| 国产欧美日韩中文字幕在线| 亚洲一区精品电影| 亚洲欧美日韩精品| 91在线观看免费观看| 久久精品成人欧美大片古装| 国产性色av一区二区| 欧美激情第一页xxx| 国产一区二区三区直播精品电影| 在线观看日韩视频| 久久久久中文字幕2018| 欧美裸体男粗大视频在线观看| 91在线网站视频| 亚洲国产私拍精品国模在线观看| 欧美一级成年大片在线观看| 国产精品久久一区主播| 国产精品久久久久久久久久东京| 91精品久久久久久久久不口人| 日韩毛片在线看| 日韩精品在线视频| 亚洲精品日韩激情在线电影| 国产精品色午夜在线观看| 97欧美精品一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 成人欧美一区二区三区黑人| 中文字幕一区电影| 精品中文字幕视频| 国产欧美日韩精品丝袜高跟鞋| 国模精品视频一区二区| 国产精品网红直播| 久久久免费高清电视剧观看| 国产精品网址在线| 亚洲娇小xxxx欧美娇小| 中文字幕9999| 欧美电影免费观看网站| 久久久精品国产一区二区| 成人做爰www免费看视频网站| 伊人久久大香线蕉av一区二区| 国产91精品久久久| 精品久久久国产| 久久夜精品va视频免费观看| 性日韩欧美在线视频| 日韩精品中文字幕视频在线| 欧美性猛交xxxx乱大交极品| 欧美肥老太性生活视频| 亚洲区中文字幕| 欧美性高潮在线| 国产精品亚洲美女av网站| 国产午夜精品美女视频明星a级| 韩剧1988在线观看免费完整版| 成人午夜一级二级三级| 91精品国产成人www| 亚洲精品欧美极品| 自拍偷拍亚洲区| 日本一区二三区好的精华液| 在线观看欧美视频| 97国产精品视频| 欧美性xxxx极品高清hd直播| 久久婷婷国产麻豆91天堂| 精品国产一区二区三区久久久| 日韩专区在线观看| 欧美午夜性色大片在线观看| 日韩在线视频观看| 国产精品午夜一区二区欲梦| 久久久亚洲欧洲日产国码aⅴ| 日韩激情av在线免费观看| 欧美最猛性xxxxx(亚洲精品)| 国外视频精品毛片| 国产欧美精品一区二区| 亚洲国产小视频在线观看| 欧美电影在线免费观看网站| 欧日韩不卡在线视频| 亚洲欧美日本精品| 欧美极品少妇xxxxⅹ喷水| 亚洲第一综合天堂另类专| 久久久久国产精品一区| 亚洲小视频在线| 欧美日韩国产123| 国产精品久久久久久久久久久不卡| 久久99精品视频一区97| 色青青草原桃花久久综合| 国产成人综合一区二区三区| 日韩电影在线观看中文字幕| 国产精品av在线播放| 国产精品久久综合av爱欲tv| 国产亚洲福利一区| 国产精品丝袜白浆摸在线| 欧美视频专区一二在线观看| 国产精品中文久久久久久久| 最新国产精品亚洲| 91精品国产综合久久香蕉| 欧美视频精品一区| 欧美日韩性视频| 亚洲一级片在线看| 亚洲一区美女视频在线观看免费| 亚洲欧洲在线视频| 66m—66摸成人免费视频| 97国产精品人人爽人人做| 欧美野外猛男的大粗鳮| 欧美激情小视频| 国产精品18久久久久久首页狼| 日韩av在线网页| 欧美午夜视频在线观看| 国产热re99久久6国产精品| 国产免费亚洲高清| 国产精品com| 91久久久亚洲精品| 亚洲色图激情小说| 亚洲成人黄色网址| 亚洲人在线视频| 日本亚洲精品在线观看| 成人欧美在线视频| 亚洲性av网站| 国产日韩综合一区二区性色av| 精品中文字幕视频| 国产在线观看精品一区二区三区| 亚洲人成电影网站色xx| 午夜精品久久久99热福利| 欧美精品在线播放| 久久婷婷国产麻豆91天堂| 国产精品av网站| 亚洲在线一区二区| 中文字幕欧美专区| 国产精品女人网站| 国产亚洲精品日韩| 亚洲图片欧美午夜| 久久韩剧网电视剧| 久久天堂av综合合色| 亚洲最大福利视频网站| 欧美亚洲成人免费| 狠狠做深爱婷婷久久综合一区| 午夜免费日韩视频| 日韩精品在线免费观看视频| 亚洲乱码国产乱码精品精天堂| 777午夜精品福利在线观看| 欧美韩日一区二区| 国产日韩精品在线播放| 成人春色激情网| 91精品国产沙发| 国产精品一区二区三区成人| 久久成人免费视频| 日av在线播放中文不卡| 国外成人性视频| 亚洲第一福利网| 九九热精品视频国产| 97视频免费看| 黑人巨大精品欧美一区二区一视频| 亚洲精品永久免费| 91欧美视频网站| 亚洲欧美国产精品久久久久久久| 91av在线免费观看视频| 91国自产精品中文字幕亚洲| 国产91色在线|免|