跳到主要内容

SDK相关 - RNDIS

导航栏

默认镜像:当前镜像开不了 RNDIS,必须改配置后重新编内核和 rootfs。

设备现状​

已 SSH 到 root@10.0.0.102(你写的 10.102 就是这台):

项结果
板子RV1126BP EVB1 V12,aarch64,Buildroot
镜像rockchip_rv1126b_ipc(64 位 IPC)
USBgadget 服务在跑,只有 ADB(USB_FUNCS="adb",PID 0x0006)
UDC21500000.usb,状态 not attached(OTG 口没接到电脑)
内核没有 CONFIG_USB_CONFIGFS_RNDIS,也没有模块目录

现场试过创建 gadget 功能:rndis / ecm / ncm 全部失败(No such file or directory)。运行中的内核没有 USB 网卡功能,改脚本也没用。

结论​

RNDIS 要两处同时开:

  1. 内核:编进 CONFIG_USB_CONFIGFS_RNDIS
  2. rootfs:USB gadget 服务把 rndis 加进功能列表,并给 usb0 配 IP

SDK 默认都没开:RK_USB_ADBD=y,RK_USB_RNDIS 未开;64 位 rockchip_linux_defconfig 也没有 RNDIS。kernel-6.1/arch/arm/configs/rv1126b-rndis.config 是 32 位 fragment,对你这台 aarch64 板子不适用。


具体改法​

对应 defconfig:device/rockchip/rv1126b/rockchip_rv1126bp_ipc_64_evb1_v10_defconfig
(DTS 是 rv1126bp-evb1-v12,和设备 compatible 一致。)

1. SDK:打开 RNDIS gadget​

文件:device/rockchip/rv1126b/rockchip_rv1126bp_ipc_64_evb1_v10_defconfig

加上:

RK_USB_RNDIS=y

或交互配置:

make rockchip_rv1126bp_ipc_64_evb1_v10_defconfig
make config-usb-gadget

在 USB gadget 菜单里打开 Remote Network Driver Interface Specification (RNDIS)。
overlay-usb-gadget.sh 会把 rndis 写进 /etc/profile.d/usb-gadget.sh 的 USB_FUNCS(会变成 adb rndis)。

2. 内核:打开 RNDIS 功能(必须)​

64 位会自动叠 kernel-6.1/arch/arm64/configs/rv1126b.config。在这个文件末尾加:

CONFIG_USB_CONFIGFS_RNDIS=y

Kconfig 会连带选上 USB_F_RNDIS 和 USB_U_ETHER。
不要用 arch/arm/configs/rv1126b-rndis.config,那是 32 位,还会把 USB 改成模块。

或:

make kernel-config

路径:Device Drivers → USB support → USB Gadget Support → USB Gadget functions configurable through configfs → RNDIS

3. 给 USB 网卡配 IP​

gadget 脚本里已有示例,需要做成 hook。新建:

device/rockchip/rv1126b/rndis.sh

#!/bin/sh
rndis_post_start_hook()
{
while ! ifconfig usb0 >/dev/null 2>&1; do
sleep .1
done
ifconfig usb0 192.168.42.1 netmask 255.255.255.0
}

同一份 defconfig 再加:

RK_USB_HOOKS="rndis.sh"

编译时会装到 /etc/usb-gadget.d/。192.168.42.1 避免和现有 eth0 10.0.0.102/22 冲突。

4. 编译烧写​

make kernel
make recovery # 若 rootfs/overlay 一起更
make

至少要更新 boot.img(内核) 和 rootfs。只刷 rootfs、不刷内核,设备上还是创建不了 rndis.0。

5. 接线与主机​

  • 用板子 USB OTG(DWC3 21500000.usb)接到电脑,不要用普通 Host 口。
  • 设备侧应出现 usb0,地址 192.168.42.1。
  • 电脑侧给 USB 网卡配 192.168.42.2/24,再 ping 192.168.42.1。

Windows 一般能直接认 RNDIS。你这台开发机是 macOS,系统不带 RNDIS 驱动;若 USB 插的是 Mac,应改开 ECM(RK_USB_ECM=y + CONFIG_USB_CONFIGFS_ECM=y),不要用 RNDIS。


刷机后可在设备上确认​

cat /etc/profile.d/usb-gadget.sh          # 应含 rndis
mkdir /sys/kernel/config/usb_gadget/rockchip/functions/rndis.0 # 应成功
cat /sys/class/udc/21500000.usb/state # 插上电脑后应为 configured
ifconfig usb0
usb-gadget restart

当前镜像没有内核 RNDIS,设备上临时改 USB_FUNCS 不会生效。需要的话我可以直接在 SDK 里改这三处文件。