使用 WSL 交叉编译 MentoHUST
为使得 MentoHUST 在路由器上依然可用,需要对 MentoHUST 针对自己路由器的芯片架构进行交叉编译。本文以使用 MT7620 的路由器平台为例,主要提供 WSL 下对 MentoHUST 进行交叉编译的实例。
限于能力与水平,本文有许多遗漏与不足之处,还请多多指教。
准备工作
-
一台已刷入 OpenWrt 的路由器
-
已安装 Linux 系统的实体机或虚拟机 / 已安装 WSL 的 Windows 10
如果你准备使用 WSL 进行编译,请先参考在 WSL2 上进行 OpenWrt 的编译的 “配置编译环境” 进行 WSL 的相关设置。
安装相关依赖
打开终端,输入:
1 | sudo apt install build-essential bison flex zlib1g-dev libncurses5-dev subversion quilt intltool ruby fastjar unzip gawk autogen autopoint ccache gettext libssl-dev xsltproc zip git |
下载所需文件
-
在终端下前往
home
,并创建目录mt7620
以便组织管理文件。1
2
3cd /home/jim
mkdir mt7620
cd mt7620目录请根据自己需要命名,这里仅作示范。
其中jim
为本示例中的 Linux 用户名,请根据自己的 Linux 用户名修改相关命令。 -
到 OpenWrt 的官网下载对应你路由器的芯片和当前版本系统的交叉编译工具包 (SDK)。
本指南使用 19.07.4 的 SDK
1
2
3
4wget https://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt7620/openwrt-sdk-19.07.4-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64.tar.xz -O sdk.tar.xz
tar -xJf sdk.tar.xz
mv openwrt-sdk-19.07.4-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64 sdk
rm sdk.tar.xz -
下载 libpcap 源码至
libpcap
文件夹,撰文时最新为 1.9.1 版。1
2
3
4wget https://www.tcpdump.org/release/libpcap-1.9.1.tar.gz -O libpcap.tar.gz
tar -xzf libpcap.tar.gz
mv libpcap-1.9.1 libpcap
rm libpcap.tar.gz -
下载 MentoHUST 源码至
mentohust
文件夹。这里使用 @hyrathb 的,请根据自己需要替换源码链接。1
git clone https://github.com/hyrathb/mentohust.git mentohust
交叉编译
配置交叉编译环境
终端输入:
1 | PATH=$PATH:/home/jim/mt7620/sdk/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin |
请不要直接复制粘贴,需要针对你的实际情况进行修改。
需修改的地方(尖括号部分)有:
PATH=$PATH:…/staging_dir/<path>/bin
STAGING_DIR=…/staging_dir/<path>
CC
、CPP
、GCC
、CXX
、RANLIB
请对比参考…/staging_dir/<path>/bin
内的对应文件名进行修改RANLIB
要根据sdk
里目录的结尾修改。这个例子,结尾是musl
,因此export RANLIB=mipsel-openwrt-linux-musl-ranlib
。如果你的结尾是uClibc
,就应该改成export RANLIB=mipsel-openwrt-linux-uclibc-ranlib
。ac_cv_linux_vers
为你所编译目标 OpenWrt 当前 Linux 内核版本号
编译 libpcap
进入 libpcap
文件夹
1 | cd /home/jim/mt7620/libpcap |
进行编译
1 | ./configure --host=mipsel-linux --prefix=/home/jim/mt7620/ --with-pcap=linux |
请不要直接复制粘贴,需要针对你的实际情况进行修改。
需修改的地方有:
--host
,对应你的路由器芯片架构进行修改(arm-linux
、mipsel-linux
)--prefix
,换成你的路径
./configure
部分不应出错。
make
部分,只要看到 ranlib libpcap.a
没有出错即可,不用理会 libpcap.so
是否出错。
完成后请查看你的 libpcap
目录下是否生成 libpcap.a
。
编译 MentoHUST
进入 MentoHUST
目录,生成 Makefile:
1 | cd /home/jim/mt7620/mentohust |
获取自己所在平台:
1 | ./config.guess |
输出的信息替换到下方代码的 --build
中,然后执行命令进行编译:
1 | ./configure --build=x86_64-pc-linux-gnu --host=mipsel-linux --disable-encodepass --disable-notify --with-pcap=/home/jim/mt7620/libpcap/libpcap.a |
其中 --with-pca
后内容请修改为自己的对应路径
如果运行无误,完成后就可以在 /home/jim/mt7620/mentohust/src
中获取所需要的 mentohust
文件了,教程结束。