RDK-S100 无法在同一个系统环境中使用UART和MIPI相机。
其中MIPI相机根据 RDK S100 MIPI扩展板 无法同时打开两个相机 可以使用multi_pipe_vin_isp_ynr_pym_gdc_vpu打开
而串口问题根据 串口开发问题 中使用Deb包临时使用UART,但安装deb包后mipi相机无法打开,表现为:
sunrise@ubuntu:/app/multimedia_samples/sample_pipeline/multi_pipe_vin_isp_ynr_pym_gdc_vpu$ ./multi_pipe_vin_isp_ynr_pym_gdc_vpu -c “sensor=0” -c “sensor=1 link=0”
Using index:0 sensor_name:imx219-30fps config_file:linear_1920x1080_raw10_30fps_1lane.c
sensor_type:0
mipi mclk is not configed.
Searching camera sensor on device: /proc/device-tree/soc/vcon@0 i2c bus: 1 mipi rx phy: 0
mipi rx used phy: 00000000
INFO: Found sensor_name:imx219-30fps on mipi rx csi 0, i2c addr 0x10, config_file:linear_1920x1080_raw10_30fps_1lane.c
MIPI host: 0x1
Host 0: Used
Using index:1 sensor_name:sc1336_gmsl-30fps config_file:linear_1280x720_raw10_30fps_2lane.c
sensor_type:1
MIPI host: 0x1
Host 0: Used
Pipeline index 0:
Sensor index: 0
Sensor name: imx219-30fps
Active mipi host: 0
PYM Channel: 0
Encode type: h264
Pipeline index 1:
Sensor index: 0
Sensor name: sc1336_gmsl-30fps
Active mipi host: 4
PYM Channel: 0
Encode type: h264
Verbose: 0
Pipeline Connect Param:
[0] use [isp + ynr].
isp [hw:1] [slot_id:4] [mode:1]
ynr [hw:1] [slot_id:4] [mode:1]
pym [hw:1] [slot_id:4] [mode:1]
[1] use [isp + ynr].
isp [hw:1] [slot_id:5] [mode:1]
ynr [hw:1] [slot_id:5] [mode:1]
pym [hw:1] [slot_id:5] [mode:1]
create_vin_node(583) failed, ret -10
该问题在kernel 4.0.4 和 4.0.5 中均存在,且4.0.5更严重,安装deb包后无法找到eMMC正常进入系统
2 个赞
问题分析与解决方案
根据您描述的问题和错误日志,这是一个典型的资源冲突问题。安装 UART 的 deb 包后,MIPI 相机初始化失败(create_vin_node(583) failed, ret -10),说明 deb 包修改了设备树或内核配置,导致 MIPI CSI 控制器资源被占用或配置冲突。
核心问题
-
deb 包修改了设备树:临时 UART 方案通过修改设备树启用串口,但可能:
- 复用了 MIPI CSI 的引脚资源
- 修改了时钟配置(mipi mclk)
- 占用了 ISP/VI 的硬件 slot
-
错误码 -10 含义:在 Horizon 多媒体框架中,-10 通常表示硬件资源不可用或初始化失败
-
4.0.5 更严重:新版本内核可能对资源管理更严格,导致 eMMC 都无法正常挂载
解决方案
方案一:使用官方推荐的 UART 方案(推荐)
根据社区讨论,官方建议通过签署 NDA 获取完整 SDK来修改设备树,而不是使用临时 deb 包。
步骤:
-
申请 SDK 源码
-
正确修改设备树
- 找到 UART 对应的节点(通常是 UART2 或 UART5)
- 确保不占用 MIPI CSI 的引脚和时钟资源
- 重新编译内核镜像
-
验证资源分配
# 查看设备树中 MIPI 和 UART 的引脚配置
cat /proc/device-tree/soc/vcon@0
cat /proc/device-tree/soc/uart@*
# 检查时钟配置
cat /sys/kernel/debug/clk/clk_summary | grep -E "mipi|uart"
方案二:使用 UART5(MCU 透传方案)
根据文档,UART5 是通过 MCU 透传到 ACore 的,可能不与 MIPI 冲突。
步骤:
-
检查 UART5 是否可用
ls -l /dev/ttyS*
# 查看是否有 ttyS5
-
测试 UART5
# 设置波特率
stty -F /dev/ttyS5 921600
# 使用 screen 测试
screen /dev/ttyS5 921600
-
如果不可用,需要 MCU 固件支持
- 联系官方获取支持 UART5 透传的 MCU 固件
- 这种方式不需要修改 ACore 设备树,避免冲突
方案三:回退系统 + 分阶段调试
步骤:
-
刷回 4.0.4 原始镜像(确保 MIPI 相机正常工作)
# 使用官方提供的镜像刷写工具
./flash_tool.sh -i rdk_s100_4.0.4.img
-
验证 MIPI 相机
cd /app/multimedia_samples/sample_pipeline/multi_pipe_vin_isp_ynr_pym_gdc_vpu
./multi_pipe_vin_isp_ynr_pym_gdc_vpu -c "sensor=0" -c "sensor=1 link=0"
# 确认能正常打开
-
尝试其他 UART 配置方式
- 使用 40PIN 中默认就是 UART 的引脚(如 UART0/UART1)
- 避免使用需要复用配置的 UART2
-
如果必须用 UART2
- 联系官方 FAE 获取经过测试的 deb 包
- 明确告知您的内核版本和相机配置
方案四:硬件层面解决
如果软件层面无法解决,考虑:
-
使用 USB 转 UART 模块
- 通过 USB 接口扩展串口,避免内部资源冲突
- 成本低,兼容性好
-
使用 GPIO 模拟 UART
- 在应用层使用 bit-banging 方式
- 适合低速通信场景
关键排查命令
# 1. 查看当前设备树配置
cat /proc/device-tree/soc/vcon@0
cat /proc/device-tree/soc/vcon@1
# 2. 查看 UART 设备状态
dmesg | grep -i uart
ls -l /dev/ttyS*
# 3. 查看 MIPI CSI 状态
dmesg | grep -i mipi
dmesg | grep -i sensor
# 4. 查看硬件资源占用
cat /sys/kernel/debug/hb_isp/resource
cat /sys/kernel/debug/hb_vin/status
# 5. 检查内核版本
uname -a
建议行动路径
- 短期:使用 USB 转 UART 模块临时解决开发需求
- 中期:申请 NDA 获取 SDK,正确修改设备树
- 长期:推动官方提供经过测试的 UART+MIPI 共存镜像
相关资源
建议您先尝试方案二(UART5)或方案四(USB 转 UART),避免使用未经验证的 deb 包导致系统不稳定。如需进一步协助,请提供:
- 当前内核版本(
uname -a)
- 使用的具体 UART 引脚编号
- 相机传感器型号和连接方式
地瓜开发者您好!
您的问题已经收到,请补充一下信息。
内容要求:rdkos_info信息必须提供,其他信息根据问题类别选择提供
在附件中,提供 sudo rdkos_info 命令返回的结果,保存为 rdkos_info_xxxx.txt,以附件的形式放在帖子下。
详细描述预期结果和程序运行表现,描述与预期不符的地方
基础排查方式:升级所有软件包到最新
有时问题在新版本系统中已经解决,必须保证烧录的是最新的系统镜像,在最新的系统镜像的基础上 update upgrade
有时问题在新版本 miniboot 中已经解决,必须保证使用的是最新的 miniboot,在最新的系统镜像的基础上,使用 rdk-miniboot-update 命令将 miniboot 升级到最新。