找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2328

积分

1

好友

321

主题
发表于 2025-12-30 04:17:20 | 查看: 25| 回复: 0

系统识别到两个WIFI的问题

在连接WIFI时,系统可能识别到两个无线设备。经过排查,发现其中一个是由 p2p0 设备创建的信号。

查看网络接口状态
图1:通过ifconfig查看网络接口状态

解决此问题有两种方法:一是直接关闭 p2p0 接口,二是通过 udev 规则禁止其创建。

ifconfig p2p0 down

或者通过修改NetworkManager配置,使其不管理 p2p0 设备:

# 修改配置文件,或直接删除p2p0节点
vi /etc/NetworkManager/NetworkManager.conf
[device]
match-device=interface-name:p2p0
managed=false

关于 WIFI p2p0 接口

p2p0 接口通常与 WiFi Direct(也称为 Wi-Fi Peer-to-Peer,简称 P2P)协议相关。这套由 Wi-Fi 联盟发展的协议,允许设备无需通过无线路由器即可直接相互连接,进行高速数据传输。例如,两台手机通过 Wi-Fi 直连功能传输文件就会用到这种接口。

而模拟AP(SoftAP)功能,则是将无线网卡转换为一个Wi-Fi热点,使其他设备(如手机、平板)能够通过连接该热点共享网络。

无线网络连接示意图
图2:设备通过无线热点互联示意图

热点无法联网的解决方法

如果创建的热点无法让连接的设备访问互联网,通常需要启用系统的IP转发功能。

编辑系统配置文件:

vim /etc/sysctl.conf
# 取消对 net.ipv4.ip_forward=1 这一行的注释
# 修改后保存

然后使配置生效:

sudo sysctl -p

USB Camera视频格式解析

不同的USB摄像头支持不同的视频压缩格式,了解它们有助于选择合适设备:

  • YUYV:传输未经压缩的YUV数据,数据量很大,通常分辨率和帧率较低。这种原始数据一般由后端进行再处理,常用于虹膜识别、红外人脸识别等特殊用途。
  • MJPEG:一种Motion-JPEG压缩格式,通常用于分辨率相对较低(如720P、VGA)的USB摄像头,传输数据量依然较大。
  • H.264:高效的视频压缩编码,通常用于较高分辨率(如1080p、720p)的USB摄像头,能显著减小传输数据量。

使用 v4l2-ctl 调试摄像头

v4l2-ctl 是Linux下调试V4L2摄像头设备的常用工具,其内核模块功能丰富。

  • 列出系统支持的所有视频设备:
    v4l2-ctl --list-devices
  • 列出特定设备支持的像素格式:
    v4l2-ctl --device=/dev/video0 --list-formats
  • 查询设备对特定格式(如YUYV)所支持的分辨率:
    v4l2-ctl -d /dev/video0 --list-framesizes=YUYV

查看摄像头支持的分辨率
图3:使用命令查看USB摄像头支持的离散分辨率列表

USB Camera驱动路径

标准的USB视频类(UVC)摄像头驱动位于内核源码的以下路径:

kernel-5.10/drivers/media/usb/uvc

摄像头前后置标识问题

在Android等系统中,摄像头有前后置之分。如果默认是后置摄像头,需要修改为前置,可以调整驱动代码:

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

RKISP1 图像信号处理器

RKISP驱动基于V4L2和media framework实现,负责硬件配置、中断处理、缓冲区轮转以及控制如MIPI DPHY和Sensor等子设备。

RKISP1驱动架构

驱动代码位于 drivers/media/platform/rockchip/rkisp1,使用媒体控制器API。该驱动提供了4个视频设备节点和3个子设备。

RKISP1默认媒体管道拓扑图
图4:RKISP1驱动的默认媒体管道拓扑结构图

视频设备包括:

  • rkisp1_mainpath:用于捕获图像的主路径设备,通常支持较高分辨率。
  • rkisp1_selfpath:用于捕获图像的辅路径设备。
  • rkisp1_stats:元数据捕获设备,用于输出统计信息。
  • rkisp1_params:元数据输出设备,用于接收来自用户空间的参数配置。

子设备包括:

  • rkisp1_resizer_mainpath:用于调整主路径捕获帧的大小和下采样。
  • rkisp1_resizer_selfpath:用于调整自路径捕获帧的大小和下采样。
  • rkisp1_isp:连接传感器,执行所有ISP操作。

如何关闭RKISP1驱动

如果不需要使用ISP功能,可以通过修改设备树(DTS)文件将其状态设置为 disabled。以下是一个diff示例:

diff --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.dtsi
index 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";

启动USB摄像头时的注意事项

在使用 cheeseguvcviewQt V4L2 Test Utility 等工具测试摄像头时,默认可能会打开 video0(即 rkisp_mainpath,这是RK ISP处理器捕获的设备)。若要直接测试USB摄像头,请确保在工具中切换到 HD Web Camera 对应的设备节点。注意,cheese 等工具在切换设备后可能需要重启才能生效。

解决识别到双摄像头的问题

某些USB摄像头驱动会同时创建视频流设备和元数据设备,导致系统识别出两个摄像头(如 video0video1)。如果只需要一个,可以通过修改驱动来避免创建元数据设备。

打开UVC驱动文件 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); // 注释掉这一行

term->vdev = &stream->vdev;
}

Linux udev规则详解

用户空间设备管理器(udev)允许我们为设备定义持久化的命名规则,这些规则存储在 .rules 扩展名的文件中。

  • /etc/udev/rules.d/:用于存放自定义规则,拥有更高优先级。
  • /usr/lib/udev/rules.d/:存放软件包安装的默认规则。

使用udev规则的主要目的包括:为热插拔设备创建确定的设备映射、解决主/辅设备号不足、管理 /dev 目录下过多的文件,以及提供更灵活的命名方式。

udev设备管理流程图
图5:udev接收内核事件并处理设备文件的流程图

udev规则语法与关键字

一个规则文件由一系列键值对组成,分为匹配键和赋值键。

常见关键字示例:

  • ACTION:事件行为,如 add(添加设备)、remove(删除设备)。
  • SUBSYSTEM:子系统名称,例如块设备的子系统为 block
  • KERNEL:内核设备名称。
  • ATTRS{idVendor}ATTRS{idProduct}:设备的供应商ID和产品ID。
  • SYMLINK:在 /dev/ 下为设备创建符号链接。这是推荐做法,可以避免覆盖系统默认规则生成的文件。
  • MODE:设备文件的权限(八进制)。
  • NAME:创建的设备文件名(仅第一行有效)。
  • GOTO / LABEL:用于规则内部的跳转控制。

操作符说明:

操作符 匹配或赋值 解释
== 匹配 相等比较
!= 匹配 不等比较
= 赋值 分配一个特定值,可被后续规则覆盖
+= 赋值 向已存在的键追加特定值
:= 赋值 分配一个特定值,后续规则无法覆盖

实战:为USB摄像头创建udev规则

假设我们有一个供应商ID为 05a3,产品ID为 9332 的USB摄像头,我们希望为其创建一个固定且权限为777的符号链接。

创建规则文件 /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

执行后,该摄像头除了默认的 /dev/videoX 节点外,还会有一个永久的 /dev/camera 符号链接,这在进行稳定的驱动开发和应用程序配置时非常有用。

参考资料

  1. rk3568 Debian11 如何打开热点
  2. ubuntu搭建wifi热点,共享网络,超简单

本文由云栈社区整理发布,旨在为RK3568开发者提供实用的调试参考。




上一篇:OpenVINO 2025.4 入门指南:在NPU上部署文本与视觉生成模型
下一篇:年底职场变动期:警惕公司辞退员工的N种方式与应对
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 18:32 , Processed in 0.210898 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表