glib 移植笔记


glib中文手册 http://gtk-doc-cn.googlecode.com/svn/docs/glib/index.html

参考:http://blog.chinaunix.net/uid-21241717-id-88013.html

http://www.cnblogs.com/ouuy/archive/2011/11/18/2254396.html

http://blog.csdn.net/myaccella/article/details/7298014

http://footprint.blog.163.com/blog/static/173871127200661972544308/

交叉编译。。

http://blog.csdn.net/keminlau/article/details/4945951

glib 交叉编译。。

http://blog.csdn.net/wavemcu/article/details/12352651

libtool autoconf 工具:http://www.laruence.com/2009/11/18/1154.html

http://www.cnblogs.com/welkinwalker/archive/2011/06/27/2091506.html

http://www.ibm.com/developerworks/cn/linux/l-makefile/

-------------

    echo ac_cv_type_long_long=yes>$$ARCH-linux.cache && \
    echo glib_cv_stack_grows=no>>$$ARCH-linux.cache && \
    echo glib_cv_uscore=no>>$$ARCH-linux.cache && \
    echo ac_cv_func_posix_getpwuid_r=yes>>$$ARCH-linux.cache && \
    ./configure --host=$$ARCH-linux --prefix=$$PREFIX --cache-file=$$ARCH-linux.cache

---------

2.3.2 主要用户接口及实现原理

pcap_open_live() 

    为网卡设备名创建并初始化pcap_t抓包句柄,pcap_t结构体的成员包含了后续抓包所需要的各种操作函数,以及抓包参数;

    其实现原理如下:

      调用socket()创建用于抓包的套接字描述符;

      调用ioctl()获取网卡设备的接口索引;

      调用bind()绑定网卡设备的接口索引到抓包套接字描述符;

      调用setsockopt()为后续抓包设置报文接收缓冲区长度;

 

pcap_compile() 

    将用户输入的抓包过滤表达式字符串编译为内核可识别的BPF伪机器码

    其实现原理如下:

      根据语法规则调用yyparse()函数,对用户输入的表达式进行语法分析, 并对每一个逻辑谓词分割的"语句"进行词法分析,

      以语句为单位编译为BPF伪机器码, 最后根据逻辑谓词整合;

 

pcap_setfilter() 

    将编译好的BPF过滤程序下发到内核;

    其实现主要调用setsockopt()的SO_ATTACH_FILTER选项将bpf过滤程序安装到内核

 

pcap_dispatch() 

    将抓取的原始数据报传给用户自定义的回调函数;

    其实现主要调用recvmsg()接收内核上送的原始报文数据

 

2.3.3 libpcap库的修改和移植

修改

将libpcap用户接口基于网络设备抓包,改为基于接口名抓包, 涉及到的函数有:

      pcap_open_live(); 

      iface_get_id(); 

      iface_get_arptype();

       ...

以及所有通过ioctl获取网络接口属性信息的调用, 均替换为V7接口管理模块提供的专用接口: 

  GetIfIndexByIfName() 和 GetDataByIfIndex();

移植

    libpcap源码包本身支持交叉编译; 移植过程分3步:

    1) 为交叉编译器所在路径配置PATH环境变量

       export PATH=/opt/x86-uclibc-cross-v179/bin;$PATH

    2) 执行 ./configure --build=i386-unknown-gnu-linux \

                        --host=i686-gnu-linux \

                        CFLAGS= ... \

                        LDFLAGS= ... \

                        LIBS= ... \

                        CPPFLAGS= ... 

    3) 如果顺利, 会在configure脚本所在目录下, 生成config.h 和 Makefile

       执行sudo make 最终生成V7平台需要的libpcap.so 动态库;


转载于:https://my.oschina.net/plp626/blog/189686

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值