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 动态库;


你可能感兴趣的:(glib 移植笔记)