海思 tcpdump 移植开发详解

目录

前言

一、开发环境

[二、tcpdump 源码下载](#二、tcpdump 源码下载)

[三、交叉编译 libpcap](#三、交叉编译 libpcap)

[四、交叉编译 tcpdump](#四、交叉编译 tcpdump)

[五、tcpdump 移植到板子运行](#五、tcpdump 移植到板子运行)


前言

本章内容将讲解,如何在海思平台交叉编译、移植,并基于静态库生成的 tcpdump 网络抓包工具。

一、开发环境

SS626V100 交叉工具链的安装流程,可以参考 《SS626V100_SDK_V2.0.1.0 安装编译 osdrv 问题汇总》 。

1. windows10电脑 + 虚拟机15 Pro + Ubuntu18.0.4

  1. 芯片型号: SS626V100

二、tcpdump源码下载

由于 tcpdump 依赖于 libpcap,所以这两份的源代码都需要下载。 以下示例将使用目前最新的版本 tcpdump-4.99.4.tar.gz 和 libpcap-1.10.4.tar.gz

  1. tcpdump 官方地址:https://www.tcpdump.org
  2. tcpdump 源码地址:https://github.com/the-tcpdump-group/tcpdump
  3. libcap 源码地址:https://github.com/the-tcpdump-group/libpcap

三、交叉编译 libpcap

  1. 创建一个 libpcap 编译结果的安装目录(编译后的 libpcap 头文件和库将存储在这里)
bash 复制代码
cd /my_work/tools/tcpdump/  #这个路径大家要根据自己的实际情况修改
mkdir install
  1. 为了防止编译过程产生的临时文件污染源码,所以先创建一个 build 目录,再编译 libpcap 源码
bash 复制代码
tar zxf libpcap-libpcap-1.10.4.tar.gz
cd libpcap-libpcap-1.10.4
mkdir build
cd build
  1. 清空目录,执行上层的 configure,指定编译器和编译结果的安装目录,并要求生成静态库
bash 复制代码
make clean
../configure --host=aarch64-mix410-linux --with-pcap=linux --prefix=/my_work/tools/tcpdump/install --disable-shared
  1. 编译安装
bash 复制代码
make
make install

四、交叉编译 tcpdump

  1. 同理,为了防止编译过程产生的临时文件污染源码,所以先创建一个 build 目录,再编译 tcpdump 源码
bash 复制代码
tar zxf tcpdump-tcpdump-4.99.4.tar.gz
cd tcpdump-tcpdump-4.99.4
mkdir build
cd build
  1. 清空目录,执行上层的 configure,指定编译器及依赖的 libpcap 头文件、库文件路径,并且要求不需要加密功能,生成 makefile
bash 复制代码
make clean
../configure --host=aarch64-mix410-linux --without-crypto CFLAGS="-I/my_work/tools/tcpdump/install/include" LDFLAGS=-L/my_work/tools/tcpdump/install/lib LIBS=-lpcap
  1. 编译
bash 复制代码
make

执行成功后,tcpdump-tcpdump-4.99.4/build 目录下将生成 tcpdump 工具。

五、tcpdump 移植到板子运行

由于只生成静态库,所以不需要再把 libpcap 生成的(动态)库移植到板子,而是直接移植 tcpdump 工具到板子运行即可。在板子上授权并查看工具版本:

bash 复制代码
chmod +x tcpdump
./tcpdump -h

正常运行的版本信息如下:

bash 复制代码
tcpdump version 4.99.4
libpcap version 1.10.4 (with TPACKET_V3)
Usage: tcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [--count]
		[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
		[ -i interface ] [ --immediate-mode ] [ -j tstamptype ]
		[ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
		[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
		[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
		[ --time-stamp-precision precision ] [ --micro ] [ --nano ]
		[ -z postrotate-command ] [ -Z user ] [ expression ]
相关推荐
weixin_307779139 分钟前
Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
linux·运维·c++·数据仓库·clickhouse
FakeOccupational33 分钟前
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
网络·游戏
yzx9910132 小时前
Linux 系统中的算法技巧与性能优化
linux·算法·性能优化
fengyehongWorld2 小时前
Linux Docker的简介
linux·docker
fei_sun3 小时前
【计算机网络】三报文握手建立TCP连接
网络·tcp/ip·计算机网络
曹瑞曹瑞3 小时前
VMware导入vmdk文件
linux·运维·服务器
Johny_Zhao3 小时前
2025年6月Docker镜像加速失效终极解决方案
linux·网络·网络安全·docker·信息安全·kubernetes·云计算·containerd·yum源·系统运维
PypYCCcccCc3 小时前
支付系统架构图
java·网络·金融·系统架构
hello kitty w3 小时前
Python学习(7) ----- Python起源
linux·python·学习
十年磨一剑~4 小时前
centos查看开启关闭防火墙状态
linux·运维·centos