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

2009-05-13 00:43:33来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折



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变量


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/132/showart_10673.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:测试一下这东西....

下一篇:freebsd 升级