admin管理员组

文章数量:1661134

RT-AC86U使用的WiFi芯片为Broadcom BCM4366c0,本文使用开源固件Nexmon配置该无线路由器。
原项目地址:https://nexmon/

1. 路由器基本配置

  1. 开发环境为Ununtu 14.04.1
    http://router.asus/打开路由器管理界面进行:
  2. 管理员账户名称为admin,密码任意(这里为12345678)
  3. 该路由器固件版本为3.0.0.4.382_15098(未测试非该版本下能否成功安装)
  4. 内网IP地址设置为192.168.2.1
  5. 系统管理-系统设置-启动SSH设置为"是",端口号设置为22

2. Nexmon环境配置

为防止权限问题引起的安装失败,所有linux命令均在root下进行,即先执行su命令。

2.1 安装依赖库

sudo apt-get install git gawk qpdf flex bison
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386

2.2 克隆nexmon基本库

git clone https://github/seemoo-lab/nexmon.git

2.3 更新环境变量并编译

cd nexmon						# 出现错误时请给出nexmon的绝对路径
source setup_env.sh
make

2.4 克隆bcm4366c0补丁并编译

cd patches/bcm4366c0/10_10_122_20/
git clone https://github/seemoo-lab/nexmon_tx_task.git
cd nexmon_tx_task
make

2.5 安装固件

此时需使用网线将计算机连接至无线路由器的任一LAN口

cd nexmon				# 出现错误时请给出nexmon的绝对路径
source setup_env.sh
cd patches/bcm4366c0/10_10_122_20/nexmon_tx_task
make install-firmware REMOTEADDR=192.168.2.1

这一步骤是将补丁文件dhd复制到路由器目录/jffs/下,替换原来的文件。注意若路由器reset后,执行make-install会提示认证失败,此时应先执行

ssh-keygen -R  192.168.2.1

2.6 安装aarch64工具链

从Asuswrt-Merlin toolchain中克隆aarch64工具链,并设置用于编译的环境变量.

git clone https://github/RMerl/am-toolchains.git
export AMCC=$(pwd)/am-toolchains/brcm-arm-hnd/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/bin/aarch64-buildroot-linux-gnu-
export LD_LIBRARY_PATH=$(pwd)/am-toolchains/brcm-arm-hnd/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/lib

2.7 构建nexutil工具

cd nexmon		# 出现错误时请给出nexmon的绝对路径

cd utilities/libnexio
${AMCC}gcc -c libnexio.c -o libnexio.o -DBUILD_ON_RPI
${AMCC}ar rcs libnexio.a libnexio.o

cd ../nexutil
echo "typedef uint32_t uint;" > types.h
sed -i 's/argp-extern/argp/' nexutil.c
${AMCC}gcc -static -o nexutil nexutil.c bcmwifi_channels.c b64-encode.c b64-decode.c -DBUILD_ON_RPI -DVERSION=0 -I. -I../libnexio -I../../patches/include -L../libnexio/ -lnexio

2.8 在RT-AC86U中安装nexutil

scp nexutil admin@192.168.2.1:/jffs/nexutil

2.9 配置Wi-Fi接口

2.9.1 配置发送频段与发送信道

频段:eth5(2.4GHz频段),eth6(5GHz频段)
信道chanspec:如 157/80 表示在信道157所在的80MHz信道

ssh admin@192.168.2.1
/bin/chmod +x /jffs/nexutil		# 赋予nexutil执行权限
/usr/sbin/wl -i eth6 country US
# -c设置信道,取值范围为0~224;-b设置频段; -w设置带宽; -s设置控制边带位置,-1为下边带,1为上边带
# /usr/sbin/wl -i eth6 chanspec -c <channel> -b <2|5> -w <20|40|80> -s <-1|0|1>
/usr/sbin/wl -i eth6 chanspec 157/80 # 信道设置为157,带宽为80MHz
/usr/sbin/wl -i eth6 up

信道与带宽chanspec设置方式举例:

5GHz频段40MHz信道:38, 46, 54, 62, 102, 110, 118, 126, 134, 142, 151, 159
5GHz频段80MHz信道:42, 58, 106, 122, 138, 155
2.4GHz无80MHz信道

2.9.2 更新配置文件tx_task.sh

以文本编辑器模式打开 /nexmon_tx_task/utils/tx_task.sh,修改相关参数。若文件为只读,需修改文件读写权限:

chmod 777 utils/

以下是文件配置的一些说明:

spatial_mode: on/off STBC
periodic: 重复发送还是仅发送一次
tx_delay:连续发送时帧与帧之间的时间间隔
repetitions:发送数量
bandwidth:带宽,这里的带宽务必小于等于2.9.1中配置的带宽
mcs:802.11ac MCS
spatial_streams:空间流数量
frame_length:负载长度(多少字节)
frame_bytes:负载内容
默认发送端MAC:00:11:22:33:44:77
默认接收端MAC:00:11:22:33:44:55

注意发送内容frame_bytes至少应有28字节,这是由于802.11协议中的前28字节为MAC帧头,用以说明帧类型、发送设备与接收设备的MAC地址等信息,必须根据协议配置。若配置内容不合802.11协议规范,可能会导致WiFi接收设备无法捕获发出去的包,建议这里参考MATLAB中wlanMACFrameConfigwlanMACFrame两函数以按需配置。
我们需将tx_task.sh存入路由器中:

exit	#退出ssh,进入ubuntu系统
cd nexmon/patches/bcm4366c0/10_10_122_20/nexmon_tx_task
make install-util REMOTEADDR=192.168.2.1

2.9.3 发送开始与结束

ssh admin@192.168.2.1  #进入路由器SSH管理系统,需输入路由器管理员密码
/jffs/tx_task.sh eth6 init		# 初始化参数设置
/jffs/tx_task.sh eth6 start	# 启动发送(此时能捕获该wifi包)
/jffs/tx_task.sh eth6 stop		# 停止发送
/jffs/tx_task.sh eth6 deinit	# 复位

3. 常见错误

3.1 make: *** No rule to make target `/firmwares/bcm4366c0/10_10_122_20/definitions.mk’. Stop.

需要在nexmon目录下刷新环境变量

cd nexmon						# 出现错误时请给出nexmon的绝对路径
source setup_env.sh

3.2 _nex_driver_io: error ret=-1 errno=95 #2

该错误常出现于安装完毕后设备掉电后重新上电,执行2.9.3节内容时出现的错误。这是由于每次重新上电后,路由器都会加载默认dhd.ko,而非在2.5节中安装的修改后的模块,因此我们需要手动加载:

ssh admin@192.168.2.1	#进入路由器管理界面
rmmmod dhd
insmod /jffs/dhd.ko

4. 注意事项

  1. 固件安装完成后,若不需要修改tx_task.sh文件,可直接执运行2.9.1和2.9.3节内容
  2. 如果你是用虚拟机安装nexmon,那么在安装完成后就不再需要每次都打开虚拟机控制路由器,即2.9.1与2.9.3节内容都能在windows powershell下运行
  3. 更多的物理层配置。802.11协议允许用户灵活配置物理层,如信道编码使用BCC还是LDPC,保护间隔长0.8微妙还是0.4微妙等,Nexmon中rates.h文件对物理层参数进行了定义:

    可手动在tx_task.sh中修改变量rt的值。注意当编码标准更改为HT时,使用整个低8位表示MCS。[0,7]表示一条空间流,[8,15]表示两条空间流,[16,23]表示三条空间流,[24,31]表示四条空间流。802.11中MCS值与调制阶数/码率的对应如下图:
  4. RT-AC86U有四条射频链路,其对应关系如下图。端口2隐藏于内部,切仅能工作于5GHz频段

本文标签: 华硕波形无线路由器RtAC86U