前段时间买了个GL-MT300N V1回来折腾,二手的也不贵,自带OpenWRT折腾起来也方便,干脆就计划整个mentohust用来在寝室过锐捷用无线网,但是因为自带的OpenWRT版本是15.05的上古版本,为了找到合适的SDK着实是给我坑了一把,后来经过IRC#Openwrt大佬们帮忙,成功把固件升级到了19.07.7的最新版,过程暂且不表,下次再说。今天就先简单记录一下交叉编译mentohust的过程。
参数信息
设备型号: GL-MT300N Version1
OpenWRT版本: 19.07.7
Soc: MediaTek MT7620N
准备工作
- 已刷入OpenWRT的路由器
- 安装了Linux的物理机/VPS/虚拟机或者已经安装了WSL的Windows10
- 如果中国大陆境内进行编译操作,个人建议为Linux环境更换软件源,推荐使用清华大学开源软件镜像站
本次我使用了已经安装了Ubuntu 18.04LTS的VPS进行编译
依赖安装
打开终端,输入以下指令安装编译必要程序
1 | sudo apt-get 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 |
准备编译文件夹
- 在终端中建立一个文件夹便于管理,例如我创建的文件夹为
openwrt
,文件夹命名可以根据自己需要变化1
2
3cd ~
sudo mkdir openwrt
cd openwrt - 前往OpenWRT官网下载和你的路由器芯片以及系统版本所对应的SDK,在这里我们使用的GL-MT300N的芯片为mt7620,系统为19.07.7:
1
2
3
4wget https://downloads.openwrt.org/releases/19.07.7/targets/ramips/mt7620/openwrt-sdk-19.07.7-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64.tar.xz -O sdk.tar.xz
tar xvf sdk.tar.xz
mv openwrt-sdk-19.07.7-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64 sdk
rm -rf sdk.tar.xz - 下载libpcap的源码到
libpcap
文件夹,本文成文时最新版本为1.10.11
2
3
4wget https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz
tar xvf libpcap-1.10.1.tar.gz
mv libpcap-1.10.1 libpcap
rm -rf libpcap-1.10.1.tar.gz - 下载mentohust的源代码到
mentohust
文件夹,github 上目前有大量的mentohust
源码包,可以自行选择,此处我们选择使用hyrathb/mentohust
1
git clone https://github.com/hyrathb/mentohust.git mentohust
交叉编译
从这里开始就是我们今天的大头,交叉编译的部分
配置交叉编译环境
在终端内输入
1 | PATH=$PATH:~/openwrt/sdk/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin |
请不要直接复制粘贴,这里需要根据你的自身情况进行更改
需要更改的地方有:
CC
、CPP
、GCC
、CXX
、RANLIB
请对比参考…/staging_dir//bin 内的对应文件名进行修改 RANLIB
要根据sdk
里目录的结尾修改。在本例中,结尾是uClibc
,因此export RANLIB=mipsel-openwrt-linux-uClibc-ranlib
。如果你的结尾是musl
,就应该改成export RANLIB=mipsel-openwrt-linux-musl-ranlib
ac_cv_linux_vers
为你所编译目标 OpenWrt 当前 Linux 内核版本号
编译libpcap
- 进入
libpcap
文件夹1
cd ~/openwrt/libpcap
- 编译libpcap请不要直接复制粘贴,这里需要根据你的自身情况进行更改
1
2./configure --host=mipsel-linux --prefix=~/openwrt --with-pcap=linux
make
需要更改的地方有:
--host
需要对应你的路由器芯片架构进行修改 (arm-linux
/mipsel-linux
)--prefix
更换成你的编译路径,本例中为~/openwrt
原则上来说 ./configure
部分不应出现报错,make
部分可能会出现 libpcap.so
编译出错的报错,无需理会,只要 libpcap.a
没有报错即可,编译完成后记得查看一下目录下是否出现了libpcap.a
编译mentohust
- 进入
mentohust
文件夹并生成Makefile:获取自己所在的平台1
2cd ~/openwrt/mentohust
sh autogen.sh输出的信息替换到下方代码的1
./config.guess
--build
中,然后执行命令进行编译:其中1
2./configure --build=x86_64-pc-linux-gnu --host=mipsel-linux --disable-encodepass --disable-notify --with-pcap=~/openwrt/libpcap/libpcap.a
make--with-pca
后内容请修改为自己的对应路径
如果运行无误,完成后就可以在~/openwrt/mentohust/src
中获取所需要的 mentohust 文件了
上传运行
OpenWRT原生内嵌了 SCP
服务,在我们完成编译后,打开 WinSCP
添加工作区,选择SCP协议链接到OpenWRT,将编译出来的 mentohust
粘贴进OpenWRT
粘贴进去之后,我们需要通过 SSH
链接路由器并改变 mentohust
的权限并设置环境变量
1 | chmod 777 mentohust |
完成之后,直接在终端内输入 mentohust
即可启动运行。如果不确定使用哪张网卡请自行通过 ifconfig
判断。