Linux下有个网卡配置工具为Ethtool。然而,Linux平台并没有默认安装该工具,因此需要进行交叉编译和安装。以下记录用海思Hi3520D交叉工具链的编译和安装ethtool的步骤。
下载
1.下载ethtool源代码 选择一个指定版本,以下用ethtool-x.xx作为使用的版本。
mirrors.edge.kernel.org/pub/software/network/ethtool/
2.解压 若是xx.tar.gz,用下面命令解压
tar xzf ethtool-x.xx.tar.gz // 解压当前目录
若是xx.tar.xz,用下面命令解压
tar xJf ethtool-x.xx.tar.gz // 解压当前目录
配置文件
工程中用的是arm-hisiv100nptl-linux这个交叉工具链,CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-gcc 是虚拟机中安装海思的交叉工具链完整路径,若该路径是全局性,可不用完整路径,直接用arm-hisiv100nptl-linux-gcc。具体根据实际情况进行更改。
cd ethtool-x.xx // 进入工程的主目录下,开始配置
./configure --host=arm-hisiv100-linux CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-gcc LDFLAGS=-static
配置报错
1.执行配置命令若提示下面的 pkg-config 报错信息。
configure: error: The pkg-config script could not be found or is too old. Make sure it
解决办法: 重新安装工具:pkg-config 即可解决
sudo apt install pkg-config
2.执行配置命令若提示下面的 ‘libmnl’ 找不到问题。
No package 'libmnl' found
解决办法: 安装 libmnl 即可解决。由于libmnl下载较为麻烦,提供一个libmnl_1.0.4官方源码下载可供参考或在网上找其他的下载文件。
https://download.csdn.net/download/u012459550/85052380
下面为 libmnl的安装方法:
// 解压 libmnl-1.0.4.orig.tar.gz
tar xzf libmnl-1.0.4.orig.tar.gz // 解压到当前路径
// 到工程目录
cd libmnl-1.0.4
// 执行配置命令
./configure & make
// 执行安装命令
sudo make install
// 执行检查命令
make check
编译
用make命令直接编译即可,若无报错,会在ethtool-xx.xx/路径下生成ethtool可执行文件,将该文件放到海思Hi3520板子上运行。
编译报错
编译时遇到的报错问题,提示如下,该报错原因为__kernel_sa_family_t改结构体未定义导致的,查找 #include <linux/socket.h>发现确实没有改变量的定义导致的,而出现这个问题是工具链的版本与ethtool-xx.xx的版本导致的,重新换了低版本的ethtool即解决该问题。
./uapi/linux/netlink.h:38: error: expected specifier-qualifier-list before '__kernel_sa_family_t'
基本使用
基本使用命令:
ethtool --version // 查询ethtool工具的版本号
ethtool eth0 // 查询eth0网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等
ethtool –h // 显示ethtool的命令帮助(help)
ethtool –i eth0 // 查询eth0网口的相关信息
ethtool –d eth0 // 查询eth0网口注册性信息
ethtool –r eth0 // 重置eth0网口到自适应模式
ethtool –S eth0 // 查询eth0网口收发包统计
|