新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 操作系统 > Unix系统 > FreeBSD教程 > 正文:Freebsd内核模块源码实现以及应用探

Freebsd内核模块源码实现以及应用探

新客网 XKER.COM 2008-01-18 来源:新客网编辑整理 chinaitlab 赛迪 收藏本文
【新客网FreeBSD教程】首先介绍内核模块的概念,还有系统调用的概念,说明的一点就是freebsd安全级别问题,通常在2级就不可以加载模块了
  可以用sysctl 调整设置或者在/etc/rc.conf中增加如下条目在启动时调整:
  kern_securelevel_enable="YES"
  kern_securelevel="2"
  本文only用来教育目的,:)所有涉及的代码都可以在Curious Yellow (CY)中找到.
  
  1.2. 内核模块
  
  请参考 scz@nsfocus 前辈翻译的 内核链接机制(KLD)编程指南>,假如你对linux的lkm了解,这个很好理解。在/usr/share/examples/kld/ 有简单的例子。
  
  1.2 一些有用的的函数
  
  这里给出一些有用的函数,通常在系统调用中用到copyin/copyout/copyinstr/copyoutstr 这几个函数可以用来从用户空间得到
  连续的大块数据,manpage copy(9)可以得到更多了解,在KLD tutorial也可以找到
  下面是个小例子来展示copyin的用法,我们构造了一个带有一个字符串指针做参数的系统调用,通过copyin把字符串从用户空间移动
  到内核空间来
  struct example_call_args {
  char *buffer;
  };
  
  int
  example_call(struct proc *p, struct example_call_args *uap)
  {
  int error;
  char kernel_buffer_copy[BUFSIZE];
  
  /* copy in the user data */
  error = copyin(uap->buffer, &kernel_buffer_copy, BUFSIZE);
  [...]
  }
  fetch/store
  这两个函数用来得到比较小块的数荩〉阶纸诨蛘咦殖さ氖?BR>  spl..
  这个函数用来调整中断优先级,可以用来阻止某些中断处理程序的执行,下面的例子中当中断处理函数指针icmp_input修改时,因为
  它通常要经过一些时时间,所以我们要防止对这个中断的处理。
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。