【问题标题】:Embedded Linux Read and Write Video from a USB port嵌入式 Linux 从 USB 端口读取和写入视频
【发布时间】:2011-04-21 15:42:11
【问题描述】:

我有一个嵌入式 Linux 项目,我需要通过 USB 端口读取视频,对该视频进行一些修改(例如压缩),然后最好通过相同的 USB 端口将其发送回主机。如果我们可以发送命令来更改诸如从主机到设备的视频压缩级别等内容,这也是一个首选功能。

可以假设主机是运行某个版本的 Linux 的桌面,而实际执行此视频处理的设备是运行嵌入式 Linux 的 Gumstix。

我基本上不知道如何开始这个项目,或者在 Linux 中的输入/输出划分中要研究什么。首先,是否可以通过同一个 USB 端口同时读取视频、写入视频和发送命令?视频比较小,尤其是经过设备压缩后,所以带宽不是问题。主要问题是知道从哪里开始这个项目的研究。有没有像 USB 的 TCP/IP 这样的东西,你可以在主机和设备之间打开多个连接来传输数据?

我们是否必须编写自己的 USB 设备驱动程序?开发我们自己的协议还是 USB 支持在同一个端口上做多个事情相对容易?

我应该开始研究 Linux 驱动程序、用户级编程和 API 还是 USB 协议?还是完全不同的东西?

我是一名高级计算机工程专业的学生,​​所以我的经验水平是 C、C++、Java、Verilog、TCL 等编程的混合体。几乎所有与套接字相关的编程都使用 Java(独立于操作系统)所以我真的我不确定从哪里开始编写 Linux 应用程序来执行这样的任务。我在微处理器编程(AVR、coldfire)方面有相当多的经验,但是尽管已经接近我需要的东西,但它并没有真正帮助我弄清楚从哪里开始。

【问题讨论】:

    标签: embedded linux-kernel driver linux-device-driver embedded-linux


    【解决方案1】:

    USB 端口有两种形式;主机是总线的控制器,可以在 PC 和设备上找到,也可以在 Linux 中找到一个小工具(静态相机中常见的一个版本,端口可以在连接时切换类型,称为 USB on the go)。一个主机端口可以连接到多个小工具端口(通过集线器)。主机在很大程度上控制着作为奴隶运行的小工具。 两种端口类型的硬件非常不同,许多嵌入式内核包含每种类型控制器的示例。 Linux 内核包含 OHCI EHCI 和 UHCI 主机控制器硬件的主机驱动程序和各种协议驱动程序(打印机、键盘等)。对于某些设备类型,USB 组织已经实施了标准协议,因此您不需要制造商的 USB 磁盘驱动器驱动程序,因为它们都应该符合免费和公开可用的标准。

    如果您希望您的设备与 PC 主机通信,您将需要实现设备/小工具接口,电缆另一端的硬件设计种类要多得多,但您应该会发现 Linux 内核支持选择更常见的。

    小工具目录还包括一系列协议驱动程序。可以节省大量工作的一个技巧是将您的设备配置为 USB 网络接口,这样可以避免编写很多低级的东西,并且您可以利用网络诊断工具,并且 USB 层被抽象出来两端的应用程序。这甚至可以在不需要编写自定义 Windows 驱动程序的情况下与 Windows 主机一起使用(XP 仅支持 Microsoft RNDIS USB 协议,并且 Windows 驱动程序有问题并且可以在断开连接时挂起,但内核包含一个 RNDIS 包装器,并且可以使此解决方案运行良好)。

    根据您的问题,我不确定视频源是独立的 USB 设备,在这种情况下,您的设备上需要一个单独的 USB 主机端口,或者它是否由主机提供。

    获取您自己的一组内核源代码并研究 USB 小工具目录,还可以从 USB.org 下载 USB 规范。您将需要了解第 8 9 10 11 章,因为它们解释了主机检测到小工具后会发生什么,以及端点的概念。 Mindshare 做了 USB 书,作为 USB 的快速介绍还不错。

    【讨论】:

    • 请问libusb在上面的分析中“坐”在哪里?我的意思是它是否为设备 IO 实现了“协议”?也就是说,它是否与协议驱动程序处于同一级别?谢谢
    【解决方案2】:

    您想要的是 Linux 上的“小工具”驱动程序 - 一种使 Linux 充当 USB 设备的驱动程序。这个LWN article on the USB composite framework 是一个很好的起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 2012-08-29
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2018-09-22
      相关资源
      最近更新 更多