SDK相关 - RNDIS

默认镜像:当前镜像开不了 RNDIS,必须改配置后重新编内核和 rootfs。
设备现状
已 SSH 到 root@10.0.0.102(你写的 10.102 就是这台):
| 项 | 结果 |
|---|---|
| 板子 | RV1126BP EVB1 V12,aarch64,Buildroot |
| 镜像 | rockchip_rv1126b_ipc(64 位 IPC) |
| USB | gadget 服务在跑,只有 ADB(USB_FUNCS="adb",PID 0x0006) |
| UDC | 21500000.usb,状态 not attached(OTG 口没接到电脑) |
| 内核 | 没有 CONFIG_USB_CONFIGFS_RNDIS,也没有模块目录 |
现场试过创建 gadget 功能:rndis / ecm / ncm 全部失败(No such file or directory)。运行中的内核没有 USB 网卡功能,改脚本也没用。
结论
RNDIS 要两处同时开:
- 内核:编进
CONFIG_USB_CONFIGFS_RNDIS - 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 里改这三处文件。