CM4 物联网路由扩展板 Mini

树莓派计算模组4 物联网路由器扩展板 , 是基于树莓派计算模组 4 的网络扩展版。通过 PCIe 2.0 连接千兆网卡,使树莓派CM4拥有了两个全速千兆网口,并且保留了树莓派特色的 GPIO 排针。加上 BCM2711 4 核心 Cortex-A72 的强大性能和树莓派社区丰富的软件支持,使它可以成为网关、智能路由器、家庭物联网平台的坚实基础。也可以连接外设,作为小型 NAS、无线网桥、4G上网终端使用。

如需像常见品牌路由器一样的多 LAN 网口,建议使用千兆交换机扩展网口,不影响网络性能。

针对路由器使用场景,推荐搭配 CM4001000 模块

技术规格

系统框图

系统框图

教程

准备

  1. 任意型号 Compute Module 4
  2. USB 电源适配器 5V 3A
  3. USB-C 连接线
  4. microSD 卡
    若使用集成 eMMC 的 CM4 则不需 microSD 卡,但需要再准备一根 USB-C 连接线用于刷写 eMMC
  5. 网线 x2

系统安装

CM4 路由器 可以兼容大部分支持树莓派 4 的系统,但大部分 Linux 发行版并未对网络应用场景优化,推荐使用 OpenWRT。

OpenWRT 系统下载

SD 卡安装

适用于无 eMMC 版 Compute Module 4 Lite

  1. 准备
  2. 使用 7-Zip 解压系统镜像压缩包,得到 img 镜像文件
  3. 使用 rufus 打开解压出的 img 文件,并选择读卡器对应盘符写入

eMMC 安装

适用于带 eMMC 版 Compute Module 4

  1. 准备
  2. 进入引导模式
    1. 将 CM4 路由器上的 RPiBOOT 拨到 1 侧,禁用 eMMC 启动
    2. 先使用 USB-C 数据线连接电脑与 CM4 路由器 USB 数据口,再连接 CM4 路由器电源
    3. 在电脑上安装并运行 rpiboot 工具,可以看到 eMMC 已经被显示为磁盘
  3. 使用 7-Zip 解压系统镜像压缩包,得到 img 镜像文件
  4. 使用 rufus 打开解压出的 img 文件,并选择 eMMC 对应盘符写入

OpenWRT 基本设置

  1. 安装 Compute Module 4 并将 microSD 卡插入 (eMMC 版无需 SD 卡)
  2. 连接网线
    • A. 连接单台电脑
      连接路由器
    • B. 使用交换机连接多台电脑及其它设备
      连接路由器与交换机
    • ETH0 连接访问互联网的光猫、调制解调器或上级路由器
    • ETH1 连接电脑或局域网交换机
    • ETH0与ETH1为默认设定,启动后可按需更改,甚至使用VLAN扩展更多接口
  3. 为 CM4 路由器通电,稍等片刻启动完成后,可以通过电脑访问192.168.1.1进入管理界面。
    • 默认账户 root
    • 默认密码 无
  4. 您可以在界面中管理网络设置,安装软件包,更多高级功能请参考 OpenWRT 官方文档

其它设置

启用 USB 控制器

CM4 默认关闭 USB 控制器降低功耗,启用 USB 需要手动编辑 config 文件。

教程为在 OpenWRT 系统中使用 vi 编辑,如果您使用可插拔 SD 卡的 CM4 Lite,也可以将 SD 卡插到电脑上用记事本修改,修改内容相同。

  1. 编辑 config.txt 文件

     root@OpenWrt:~# vi /boot/config.txt
  2. a 进入编辑模式

  3. 在末尾加入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%
  4. 按 Esc 键退出编辑模式,左下角 I 变为 -

  5. 输入 :wq 回车,保存并退出

  6. 重启后,USB接口即可使用

调整 OpenWRT root 分区大小

为兼容小容量设备,OpenWRT 一般只会为 root 分区划分有限空间。如果需要使用更大的空间安装软件或储存文件,需要手动调整 root 分区大小。

  1. 准备一台装有任意 Linux 发行版的电脑或虚拟机

    • CM4 Lite: 将 microSD 取出,通过读卡器连接电脑
    • CM4: 禁用 eMMC 启动,进入引导模式,并通过 rpiboot 驱动为硬盘
  2. 安装 fdisk 和 resize2fs

  3. 使用 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
  4. 记下 /dev/sdb2 (root 分区) 的起始扇区

  5. 使用 fdisk 删除分区2 (即sdb2),不要将更改写入磁盘

     Command (m for help): d
     Partition number (1,2, default 2): 
    
     Partition 2 has been deleted.
  6. 使用 fdisk 创建新分区2,选择/输入您先前写下的起始扇区地址 (默认情况下,它将尝试将其放置在其他位置),并保留默认的结束扇区地址(这意味着该分区现在将使用所有可用空间)

  7. 将分区表更改写入磁盘。它可能会提示已经存在分区签名,输入 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.
  8. 写入以扩大实际文件系统以填充较大的分区大小。

     DFRobot@Ubuntu:~$ sudo resize2fs /dev/sdb2

使用串口终端调试 CM4 路由器

如果设置错误,已无法通过网络访问 CM4 路由器,可以使用串口终端对 CM4 路由器进行调试。

  1. 准备

  2. 将 SD 卡插入计算机并编辑 config.txt 使用记事本编辑,在末尾添加一行 enable_uart=1

  3. 连接 USB Serial 适配器与 CM4 路由扩展板

    • USB Serial TX - GPIO 10
    • USB Serial RX - GPIO 8
    • USB Serial GND - Ground
    • ⚠注意:不要连接5V,可能导致硬件损坏
      GPIO图
  4. 安装并打开 PuTTY 按下图进行设置并打开终端
    putty1

  5. 为 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:~#
  6. 若串口终端没有任何显示,请检查 config.txt 设置或系统镜像是否受损

设置固定 MAC

由于全新的网卡芯片没有烧录硬件 MAC,因此每次启动时驱动会随机生成一个 MAC 地址供扩展网卡使用,随机的 MAC 地址会对部分专业应用造成不便,可以使用以下的解决办法

开机脚本设置固定 MAC
  1. root 文件夹下创建一个新脚本

    root@OpenWrt:~# vi /root/set_mac.sh
  2. 在脚本中写入设置 MAC 的命令,00:0c:29:f3:33:77可以设置成需要的MAC地址,并保存退出

    #!/bin/sh
    
    mac="00:0c:29:f3:33:77"
    ip link set eth1 address $mac
  3. 为脚本添加执行权限

    root@OpenWrt:~# chmod +x /root/set_mac.sh
  4. 将脚本添加到 rc.local 中实现开机自动设置

    sh /root/set_mac.sh
    exit 0
  5. 执行 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 需要选中以下软件包才能使用完整功能

Raspberry Pi OS 与 Ubuntu

扩展网口需要手动安装驱动 r8168-dkms 才可以使用

  1. 确认网络连接正常
  2. sudo apt update
    更新软件包列表
  3. sudo apt install r8168-dkms
    安装 r8168-dkms

FAQ

相关链接