freebsd 4.x 内核网络模块编译要点

发表于:2007-06-09来源:作者:点击数: 标签:
1. 目录 net -- 链路层驱动 netinet -- tcp/ip堆栈 module -- 模块家目录 xxx -- 单独建立一个目录,从其他目录拷贝 一个Makefile就可以了,修改里面的文件 3. 修改/sys/i386/files文件,模块定义 对应核配置文件中的pseudo-device xxxxx 3. opt_xxx.h 的定


1. 目录
net -- 链路层驱动
netinet -- tcp/ip堆栈
module -- 模块家目录
xxx -- 单独建立一个目录,从其他目录拷贝
一个Makefile就可以了,修改里面的文件

3. 修改/sys/i386/files文件,模块定义
对应核配置文件中的pseudo-device xxxxx

3. "opt_xxx.h" 的定义,开关宏定义, 对应核配置文件中的OPTIONS XXX
修改/sys/i386/options文件

4. config -d 目录 kern.conf,到指定目录下编译内核

5. 初始调试时,不要将模块编译到内核中,稳定后再编译到内核中。
修改/sys/modules/Makefile

6. 模块源文件中尽量使用static定义全局变量,避免冲突
对于多源文件共享变量,不要使用static定义

7. 钩子函数挂接位置
链路层: if_ethersubr.c
tcp/ip层: ip_output.c ip_input.c tcp_output.c tcp_input.c

8. 钩子定义
#ifdef _KERNEL
typedef int myfunc_t(args...);
extern myfunc_t *myfunc_ptr;
#endif /* _KERNEL */

附值:myfunc_ptr = myfunc;
使用:myfunc_ptr(args...)

9. 头文件的引用顺序
很多头文件必须顺序引用,否则报错。尤其要注意xxx_var.h之类的。

10. 对于数组指针要仔细判断区间范围,避免溢出。特别是sysctl变量



原文转自:http://www.ltesting.net