玩转freebsd内核模块(1)
http://tech.ddvip.com 2007年01月13日 社区交流
本文详细介绍玩转freebsd内核模块(1)
1.介绍
首先介绍内核模块的概念,还有系统调用的概念,说明的一点就是freebsd安全级别问题,通常在2级就不可以加载模块了
可以用sysctl调整设置或者在/etc/rc.conf中增加如下条目在启动时调整:
kern_securelevel_enable="YES"
kern_securelevel="2"
本文only用来教育目的,:)所有涉及的代码都可以在CuriousYellow(CY)中找到.
1.2.内核模块
请参考scz@nsfocus前辈翻译的内核链接机制(KLD)编程指南>,如果你对linux的lkm了解,这个很好理解。在/usr/share/examples/kld/有简单的例子。
1.2一些有用的的函数
这里给出一些有用的函数,通常在系统调用中用到copyin/copyout/copyinstr/copyoutstr这几个函数可以用来从用户空间得到
连续的大块数据,manpagecopy(9)可以得到更多了解,在KLDtutorial也可以找到
下面是个小例子来展示copyin的用法,我们构造了一个带有一个字符串指针做参数的系统调用,通过copyin把字符串从用户空间移动到内核空间来
structexample_call_args{
char*buffer;
};
int
example_call(structproc*p,structexample_call_args*uap)
{
interror;
charkernel_buffer_copy[BUFSIZE];
/*copyintheuserdata*/
error=copyin(uap->buffer,&kernel_buffer_copy,BUFSIZE);
[...]
}
fetch/store这两个函数用来得到比较小块的数据,小到字节或者字长的数据
spl..
这个函数用来调整中断优先级,可以用来阻止某些中断处理程序的执行,下面的例子中当中断处理函数指针icmp_input修改时,因为
责编:豆豆技术应用
正在加载评论...