WOGONG blog wiki read

cross compile h3c on merlin

学校用的华三认证,几年前折腾了一下在 openwrt 平台上的华三认证,主要就是交叉编译获得二进制文件。后来入手了 ASUS AC66U B1,硬件同 ASUS AC68U,懒得折腾系统,就接在之前的路由下,当二级理由使用,一级路由(openwrt)负责华三认证,用着也没什么问题。最近一级路由另有他用,所以抽空(熬夜)完成了 asus-merlin (梅林)平台上华三认证脚本的交叉编译。本文做一个简单的记录。

交叉编译的概念是在一个平台上编译另一个平台使用的二进制文件,在本文中,具体是在 X86 架构的 Ubuntu 18.04 上编译 arm 架构的 asus-merlin 系统中使用的二进制文件。

首先,下载 merlin 固件源码。改版的固件也是使用梅林的交叉编译工具链。注意下载对应版本的源码。由于我使用的是 380.x 旧版固件(380.70_0-X7.9.1 koolshare 改版),源码在 Github 的仓库链接为 https://github.com/RMerl/asuswrt-merlin,在仓库的 release 页面下载对应版本的源码到本地,解压备用。梅林的交叉编译工具链在梅林源码 release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3,release 下应该是固件版本的不同,但几个固件版本下的 toolchains 均指向这个文件夹,应该是 toolchains 没有改变过。

其次,本地编译环境准备,推荐使用 Docker,参考其他教程,使用这个链接的 Dockerfile https://github.com/mritd/dockerfile/tree/master/asuswrt-merlin-build。参考 readme 应该问题不大,不过因为 docker 版本的改变,有些命令需要调整。我用到的主要命令如下

docker image build -t build asuswrt-merlin-build
docker container run -v /home/wogong/asuswrt-merlin-380.70:/home/asuswrt-merlin -v ~/nu-h3c:/root/nu-h3c -it build:latest bash
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/asuswrt-merlin/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/lib:/usr/local/lib:/u
sr/lib
export CC=/home/asuswrt-merlin/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/arm-linux-gcc
$CC <name> -o <name>

到这一步应该就结束了,scp 二进制文件到 merlin 系统,测试成功。

参考

# 我校静态 IP 配置
option ipaddr '172.18.201.233'
option netmask '255.255.255.0'
option gateway '172.18.201.254'