当前位置:首页>Linux>RK3568 Linux USB WIFI Camera 问题调试

RK3568 Linux USB WIFI Camera 问题调试

  • 2026-10-27 17:16:14
RK3568 Linux USB WIFI Camera 问题调试

系统识别到两个WIFI问题

对其中一个进行连接发现,一个WIFI是 p2p0设备

ifconfig信息

将 p2p0关掉 可以解决此问题 或者 通过 udev 规则 禁止p2p0文件的创建。

ifconfig p2p0 down
#修改如下 ,或者直接删掉p2p0节点。vi /etc/NetworkManager/NetworkManager.conf[device]match-device=interface-name:p2p0managed=false

WIFI p2p0

WiFi Direct的协议是Wi-Fi联盟发展,支持与授权认证的一套软件协议,也被称为Wi-Fi点对点(Wi-Fi Peer-to-Peer,简称P2P)。这套协议允许无线网络中的设备无需通过无线路由器即可相互连接,以点对点的方式直接与另一个WiFi设备连线,进行数据高速传输。

p2p0 一般指 Wi-Fi点对点(P2P)接口,用于设备之间进行无线连接,无需通过无线路由器,比如两台手机通过 Wi-Fi直连功能传输文件 就会用到这种接口

模拟AP 也叫做 SoftAP ,在可以上网的电脑上开启无线网卡的模拟AP功能后,无线网卡就可以将电脑的网络转换成Wi-Fi无线信号,手机,pad等终端连接该无线信号后即可上网

AP热点

热点无法联网

启动路由转发

vim /etc/sysctl.conf# 接触 对 net.ipv4.ip_forward=1 的注释# 修改后保存# 使其生效sudo sysctl -p 

USB Camera格式

YUYV : 传输 的是 YUV数据,数据量很大,分辨率和帧率较低,一般由后端对数据进行再处理,用于一些特殊用途(虹膜,红外人脸识别等)

MJPEG : 一般用于分辨率相对较低的USB Camera(720P,VGA),传输数据较大

H.264: 一般用于分辨率较高的USB Camera(1080p ,720p) 传输数据较小。

v2l2-ctl 调试

# 列出支持的所有视频设备v4l2-ctl --list-devices
 # 列出特定设备支持的格式 v4l2-ctl --device=/dev/video0 --list-formats
# 设备支持的分辨率v4l2-ctl -d /dev/video0 --list-framesizes=YUYV
查看设备分辨率

USB Camera驱动

kernel-5.10/drivers/media/usb/uvc

前后置问题

默认是后摄,前摄如下修改

# hardware/interfaces/camera/device/3.4/default/ExternalCameraDevice.cpp# const uint8_t facing = ANDROID_LENS_FACING_EXTERNAL;constuint8_t facing = ANDROID_LENS_FACING_FRONT;UPDATE(ANDROID_LENS_FACING, &facing, 1);

RKISP1

RKISP驱动主要是依据 v4l2 / media framework 实现硬件的配置,中断处理,控制 buffer轮转,以及控制subdevice (如 mipi dphy 及 sensor的上下电 功能)

RKISP1 Rockchip图像信号处理器

程序驱动位于 drivers/media/platform/rockchip/ rkisp1  并使用 媒体控制器 API

Diagram of the default media pipeline topology

该驱动 有 4个 视频设备

  • rkisp1_mainpath: 用于检索图像的捕获设备,通常具有较高的分辨率
  • rkisp1_selfpath: 用于检索图像的捕获设备
  • rkisp1_stats: 一个元数据的捕获设备,用于发送统计信息
  • rkisp1_params: 一个元数据输出设备,用于接受来自用户空间的参数配置。

该驱动有三个子设备

  • rkisp1_resizer_mainpath: 用于调整主路径捕获设备帧的大小和下采样。
  • rkisp1_resizer_selfpath: 用于调整自路径捕获设备帧的大小和下采样
  • rkisp_isp:连接到传感器,复制所有isp操作。

关闭RKISP1

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rb-rk3568-evb.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rb-rk3568-evb.dtsidiff --git a/kernel/arch/arm64/boot/dts/rockchip/rb-rk3568-evb1-ddr4-v10.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rb-rk3568-evb1-ddr4-v10.dtsiindex ac1d7a945..4bc6d7736 100644--- a/kernel/arch/arm64/boot/dts/rockchip/rb-rk3568-evb1-ddr4-v10.dtsi+++ b/kernel/arch/arm64/boot/dts/rockchip/rb-rk3568-evb1-ddr4-v10.dtsi@@ -452,15 +452,15 @@ uart8_gpios: uart8-gpios { &rkisp {-       status = "okay";+       status = "disabled"; }; &rkisp_mmu {-       status = "okay";+       status = "disabled"; }; &rkisp_vir0 {-       status = "okay";+       status = "disabled";        port {                #address-cells = <1>;

Linux启动USB摄像头注意事项

无论是 cheese(拍照) 还是 guvcview 还是Qt V4L2 Test Utility 默认启动的都是Video0 即 rkisp_mainpath(RK的图像处理器捕获的设备) ,在进行测试的时候,请切换到 HD Web Camera 即可正常打开设备,注意 cheese 需要重新运行。

识别到双摄像头问题

可以通过修改驱动将video1给删除掉,来避免双摄像头问题

打开驱动文件 kernel/drivers/media/usb/uvc/uvc_driver.c

/* Register a metadata node, but ignore a possible failure, * complete registration of video nodes anyway. */uvc_meta_register(stream);// 注释掉 下面这行// uvc_meta_register(stream);term->vdev = &stream->vdev;}

Linux文件 udev规则

用户空间设备管理器(udev)子系统允许您为设备 分配持久名称定义规则,这些规则存储在 带有 .rule 扩展名的文件中,

  • /etc/udev/rules.d 用于自定义 udev 规则 ,拥有更高优先级,优先进行修改。
  • /usr/lib/udev/rules.d/ 目录包含安装的软件包附带的默认规则。

规则的目的 是 确保存储设备的识别一致且可预测,即使系统重启和配置发生变化也是如此。

  • 创建确定的设备映射,尤其是针对热拔插设备
  • 解决没有足够的 主/辅 设备号
  • 解决 dev目录下文件太多
  • 解决命名不够灵活
udev规则

对于存储设备,udev规则控制在 /dev/disk/ 目录中创建符号链接。这些符号链接为存储设备提供用户友好的别名,从而引用和管理这些设备更为方便。

# This is used to change the default configuration of Realtek USB ethernet adapters# ACtion 事件uevent的行为,例如 add(添加设备)remove(删除设备)# GOTO 跳到匹配的规则 通过label标识# != 使用不等比较,不相等直接退出ACTION!="add", GOTO="usb_realtek_net_end"# SUBSYSTEM 子系统的名称,例如 sda的子系统为blockSUBSYSTEM!="usb", GOTO="usb_realtek_net_end"# ENV{value} 环境变量,可以表示任意ENV{DEVTYPE}!="usb_device", GOTO="usb_realtek_net_end"# Modify this to change the default valueENV{REALTEK_MODE1}="1"ENV{REALTEK_MODE2}="3"# RealtekATTR{idVendor}=="0bda", ATTR{idProduct}=="815[2,3,5,6]", ATTR{bConfigurationValue}!="$env{REALTEK_MODE1}", ATTR{bConfigurationValue}="$env{REALTEK_MODE1}"ATTR{idVendor}=="0bda", ATTR{idProduct}=="8053", ATTR{bcdDevice}=="e???", ATTR{bConfigurationValue}!="$env{REALTEK_MODE2}", ATTR{bConfigurationValue}="$env{REALTEK_MODE2}"ATTR{idVendor}=="0bda", ATTR{idProduct}=="c820", ATTR{bcdDevice}=="e???", ATTR{bConfigurationValue}!="$env{REALTEK_MODE2}", ATTR{bConfigurationValue}="$env{REALTEK_MODE2}"# LABEL 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务)LABEL="usb_realtek_net_end"
  • BUS : 总线的名字
  • DRIVER:设备驱动的名字
  • ID:独立于内核名字的设备名称
  • SYSFS{value} sysfs属性值,它可以表示任意
  • FROGRAM: 可执行的外部程序,如果程序返回0值,该键则认为为真true
  • RESULT:上一个FROGRAM调用返回标准输出
  • NAME: 根据这个规则创建的设备文件名,仅仅第一行的NAME描述有效,后面的均忽略,如果使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键
  • SYMLINK : 为 /dev/ 下的设备产生符号链接。由于udev只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的udev规则所产生的文件,推荐使用符号链接。
  • OWNER: 设备文件的属组
  • GROUP: 设备文件所在的组
  • MODE:设备文件的权限,采用8进制
  • LABEL: 在配置文件里为内部控制而采用的名字标签
  • GOTO:跳到匹配的规则,通过LABEL来表示
  • IMPORT{type}:导入一个文件或一个程序执行后而生成的规则集到当前文件
  • WAIT_FOR_SYSFS: 等待一个特定的设备文件的创建,主要是用作时序和依赖问题
  • OPTIONS: 特定的选项
    • last_rule 对这类设备终端规则执行
    • ignore_device 忽略当前规则
    • ignore_remove:忽略接下来的并移走请求
    • all_partitions: 为所有的磁盘分区创建设备文件

匹配键 和 复制键 操作符

操作符
匹配或赋值t
解释
==
匹配
相等比较
!=
匹配
不等比较
=
赋值
分配一个特定的值给该键,他可以覆盖之前的赋值。
+=
赋值
追加特定的值给已经存在的键
:=
赋值
分配一个特定的值给该键,后面的规则不可能覆盖它。

创建文件 /etc/udev/rules.d/99-usb-camera.rules

KERNEL=="video*", ATTRS{idVendor}=="05a3", ATTRS{idProduct}=="9332",MODE="0777",SYMLINK+="camera"

重新加载 udev规则 或者重启

# 重新加载规则文件udevadm control --reload-rules# 触发UDEV事件以重新处理已连接的设备sudo udevadm trigger

参考资料

  • rk3568 Debian11 如何打开热点[1]

  • ubuntu搭建wifi热点,共享网络,超简单 [2]

参考资料
[1] 

rk3568 Debian11 如何打开热点: https://blog.csdn.net/YY2065/article/details/131976216

[2] 

ubuntu搭建wifi热点,共享网络,超简单 : https://www.cnblogs.com/mediocreWorld/p/16000916.html

最新文章

随机文章