树莓派计算模组4 物联网路由器扩展板 , 是基于树莓派计算模组 4 的网络扩展版。通过 PCIe 2.0 连接千兆网卡,使树莓派CM4拥有了两个全速千兆网口,并且保留了树莓派特色的 GPIO 排针。加上 BCM2711 4 核心 Cortex-A72 的强大性能和树莓派社区丰富的软件支持,使它可以成为网关、智能路由器、家庭物联网平台的坚实基础。也可以连接外设,作为小型 NAS、无线网桥、4G上网终端使用。
如需像常见品牌路由器一样的多 LAN 网口,建议使用千兆交换机扩展网口,不影响网络性能。
针对路由器使用场景,推荐搭配 CM4001000 模块
技术规格
- 兼容模组: Compute Module 4
- 网络接口: 2
- 网络速度: 1000BASE-T
- NIC 1: CM4 Built-in
- NIC 2: RTL8111
- 电源接口: USB-C
- 电源要求: 5V 3A
- USB接口: 1x USB-C (USB 2.0)
- GPIO: 26Pin
- 尺寸: 55 x 62mm
系统框图
教程
准备
- 任意型号 Compute Module 4
- USB 电源适配器 5V 3A
- USB-C 连接线
- microSD 卡
若使用集成 eMMC 的 CM4 则不需 microSD 卡,但需要再准备一根 USB-C 连接线用于刷写 eMMC - 网线 x2
系统安装
CM4 路由器 可以兼容大部分支持树莓派 4 的系统,但大部分 Linux 发行版并未对网络应用场景优化,推荐使用 OpenWRT。
OpenWRT 系统下载
-
DFRobot 21.02.0 旧版
DFRobot 21.02.3 正式版
基于 OpenWRT 21.02.3 正式版打包,包括中文包、驱动、配置文件,适合初学者快速上手
入门教程基于这个版本编写 -
OpenWRT 21.02.3 官方版
OpenWRT 官方发布,需要自行安装驱动并设置网络,适合有经验的用户 -
OpenWRT 开发快照版
开发快照为最小系统,支持最新特性,无图形化界面,需要使用串口终端命令设置,仅建议经验丰富的用户使用
SD 卡安装
适用于无 eMMC 版 Compute Module 4 Lite
- 准备
- 使用 7-Zip 解压系统镜像压缩包,得到 img 镜像文件
- 使用 rufus 打开解压出的 img 文件,并选择读卡器对应盘符写入
eMMC 安装
适用于带 eMMC 版 Compute Module 4
- 准备
- 进入引导模式
- 将 CM4 路由器上的 RPiBOOT 拨到 1 侧,禁用 eMMC 启动
- 先使用 USB-C 数据线连接电脑与 CM4 路由器 USB 数据口,再连接 CM4 路由器电源
- 在电脑上安装并运行 rpiboot 工具,可以看到 eMMC 已经被显示为磁盘
- 使用 7-Zip 解压系统镜像压缩包,得到 img 镜像文件
- 使用 rufus 打开解压出的 img 文件,并选择 eMMC 对应盘符写入
OpenWRT 基本设置
- 安装 Compute Module 4 并将 microSD 卡插入 (eMMC 版无需 SD 卡)
- 连接网线
- A. 连接单台电脑
- B. 使用交换机连接多台电脑及其它设备
- ETH0 连接访问互联网的光猫、调制解调器或上级路由器
- ETH1 连接电脑或局域网交换机
- ETH0与ETH1为默认设定,启动后可按需更改,甚至使用VLAN扩展更多接口
- A. 连接单台电脑
- 为 CM4 路由器通电,稍等片刻启动完成后,可以通过电脑访问
192.168.1.1
进入管理界面。- 默认账户
root
- 默认密码 无
- 默认账户
- 您可以在界面中管理网络设置,安装软件包,更多高级功能请参考 OpenWRT 官方文档
其它设置
启用 USB 控制器
CM4 默认关闭 USB 控制器降低功耗,启用 USB 需要手动编辑 config 文件。
教程为在 OpenWRT 系统中使用 vi 编辑,如果您使用可插拔 SD 卡的 CM4 Lite,也可以将 SD 卡插到电脑上用记事本修改,修改内容相同。
-
编辑 config.txt 文件
root@OpenWrt:~# vi /boot/config.txt
-
按
a
进入编辑模式 -
在末尾加入
dtoverlay=dwc2,dr_mode=host
################################################################################ # Bootloader configuration - config.txt ################################################################################ ################################################################################ # For overclocking and various other settings, see: # https://www.raspberrypi.org/documentation/configuration/config-txt/README.md ################################################################################ # OpenWrt config include distroconfig.txt [all] # Place your custom settings here. dtoverlay=dwc2,dr_mode=host ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ I /boot/config.txt 15/15 100%
-
按 Esc 键退出编辑模式,左下角
I
变为-
-
输入
:wq
回车,保存并退出 -
重启后,USB接口即可使用
调整 OpenWRT root 分区大小
为兼容小容量设备,OpenWRT 一般只会为 root 分区划分有限空间。如果需要使用更大的空间安装软件或储存文件,需要手动调整 root 分区大小。
-
准备一台装有任意 Linux 发行版的电脑或虚拟机
- CM4 Lite: 将 microSD 取出,通过读卡器连接电脑
- CM4: 禁用 eMMC 启动,进入引导模式,并通过 rpiboot 驱动为硬盘
-
安装 fdisk 和 resize2fs
-
使用 fdisk 查看分区表
DFRobot@Ubuntu:~$ sudo fdisk /dev/sdb Welcome to fdisk (util-linux 2.32). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/sdb: 7.2 GiB, 7751073792 bytes, 15138816 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xcbad8a62 Device Boot Start End Sectors Size Id Type /dev/sdb1 * 512 33279 32768 16M 83 Linux /dev/sdb2 33792 558079 524288 256M 83 Linux
-
记下
/dev/sdb2
(root 分区) 的起始扇区 -
使用 fdisk 删除分区2 (即sdb2),不要将更改写入磁盘
Command (m for help): d Partition number (1,2, default 2): Partition 2 has been deleted.
-
使用 fdisk 创建新分区2,选择/输入您先前写下的起始扇区地址 (默认情况下,它将尝试将其放置在其他位置),并保留默认的结束扇区地址(这意味着该分区现在将使用所有可用空间)
-
将分区表更改写入磁盘。它可能会提示已经存在分区签名,输入 n 不删除分区签名即可继续。
Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (33280-15138815, default 34816): 33792 Last sector, +sectors or +size{K,M,G,T,P} (33792-15138815, default 15138815): Created a new partition 2 of type 'Linux' and of size 7.2 GiB. Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: n Command (m for help): w The partition table has been altered. Syncing disks.
-
写入以扩大实际文件系统以填充较大的分区大小。
DFRobot@Ubuntu:~$ sudo resize2fs /dev/sdb2
使用串口终端调试 CM4 路由器
如果设置错误,已无法通过网络访问 CM4 路由器,可以使用串口终端对 CM4 路由器进行调试。
-
准备
-
将 SD 卡插入计算机并编辑
config.txt
使用记事本编辑,在末尾添加一行enable_uart=1
-
连接 USB Serial 适配器与 CM4 路由扩展板
- USB Serial TX - GPIO 10
- USB Serial RX - GPIO 8
- USB Serial GND - Ground
- ⚠注意:不要连接5V,可能导致硬件损坏
-
安装并打开 PuTTY 按下图进行设置并打开终端
-
为 CM4 路由器通电,稍等片刻串口终端上会开始滚动系统日志,启动完成后按一下回车进入 BasyBox 终端
BusyBox v1.31.1 () built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt SNAPSHOT, r15224-afd4bf08bc ----------------------------------------------------- root@OpenWrt:~#
-
若串口终端没有任何显示,请检查 config.txt 设置或系统镜像是否受损
设置固定 MAC
由于全新的网卡芯片没有烧录硬件 MAC,因此每次启动时驱动会随机生成一个 MAC 地址供扩展网卡使用,随机的 MAC 地址会对部分专业应用造成不便,可以使用以下的解决办法
开机脚本设置固定 MAC
-
在
root
文件夹下创建一个新脚本root@OpenWrt:~# vi /root/set_mac.sh
-
在脚本中写入设置 MAC 的命令,
00:0c:29:f3:33:77
可以设置成需要的MAC地址,并保存退出#!/bin/sh mac="00:0c:29:f3:33:77" ip link set eth1 address $mac
-
为脚本添加执行权限
root@OpenWrt:~# chmod +x /root/set_mac.sh
-
将脚本添加到
rc.local
中实现开机自动设置sh /root/set_mac.sh exit 0
-
执行
source /root/set_mac.sh
立即生效
自动设置为内置网口 MAC+1
设置步骤与开机脚本设置固定 MAC 基本相同,仅需修改 /root/set_mac.sh
中的内容如下
#!/bin/sh
count=1
eth1_mac=$(cat /sys/class/net/eth0/address)
machex=$( echo "$eth1_mac" | tr -d ':' )
macdec=$( printf "%lld\n" 0x$machex )
macdec1=$(($macdec+$count))
machex1=`printf "%x" $macdec1`
machex2=$(echo $machex1 | sed 's/\(..\)/\1:/g;s/:$//' )
ip link set eth1 address $machex2
系统与驱动
OpenWRT 编译
若需自行编译 OpenWRT 需要选中以下软件包才能使用完整功能
kmod-r8169
扩展网卡驱动,在旧版本中名为kmod-r8168
kmod-usb-dwc2
USB 控制器驱动bcm27xx-userland
树莓派用户工具
Raspberry Pi OS 与 Ubuntu
扩展网口需要手动安装驱动 r8168-dkms
才可以使用
- 确认网络连接正常
sudo apt update
更新软件包列表sudo apt install r8168-dkms
安装r8168-dkms
FAQ
-
使用 USB-C 连接电脑烧录固件,无法识别设备
- 请检查 USB 线是否支持数据传输,部分仅供电 USB 线没有连接数据引脚
- 目前硬件不兼容原生 USB-C 到 USB-C 连接,请使用 USB-A 到 USB-C 数据线连接电脑
-
Raspberry Pi OS 安装
r8168-dkms
出错
Raspberry Pi OS 部分版本内核不支持安装r8168-dkms
,建议使用 Ubuntu Server,经测试可以安装使用
适用于树莓派的 Ubuntu Server 下载