Embedded 嵌入式Linux从USB端口读写视频

Embedded 嵌入式Linux从USB端口读写视频,embedded,linux-kernel,driver,linux-device-driver,embedded-linux,Embedded,Linux Kernel,Driver,Linux Device Driver,Embedded Linux,我有一个嵌入式Linux项目,我需要通过USB端口读取视频,对视频进行一些修改(如压缩),然后最好通过相同的USB端口将其发送回主机。如果我们可以发送命令来更改主机到设备的视频压缩级别,这也是一个首选功能 可以假设主机是运行某个版本Linux的桌面,而实际执行此视频处理的设备是运行嵌入式Linux的Gumstix 我基本上不知道如何启动这个项目,也不知道在Linux中输入/输出部分应该研究什么。首先,读视频、写视频和通过同一USB端口发送命令听起来可能吗?视频相对较小,尤其是经过设备压缩后,因此

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

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

我基本上不知道如何启动这个项目,也不知道在Linux中输入/输出部分应该研究什么。首先,读视频、写视频和通过同一USB端口发送命令听起来可能吗?视频相对较小,尤其是经过设备压缩后,因此带宽不是问题。主要问题是知道从哪里开始这个项目的研究。是否有类似TCP/IP for USB的功能,可以在主机和设备之间打开多个连接以传输数据

我们是否需要编写自己的USB设备驱动程序?开发我们自己的协议,还是USB支持在同一端口上相对容易地执行多项操作

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


<>我是一个高级计算机工程专业的学生,所以我的经验是C、C++、java、verilog、TCL等编程的混合。几乎所有的Socket相关的编程都是java(OS无关),所以我真的不确定从哪里开始编写Linux应用程序来执行这样的任务。我在微处理器编程(AVR、coldfire)方面有相当丰富的经验,但是,尽管与我所需要的非常接近,但它并不能真正帮助我确定从何处开始这项工作。

您需要的是Linux上的“小工具”驱动程序—一种使Linux充当USB设备的驱动程序。这是一个很好的起点。

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

如果你想让你的设备与PC主机对话,你需要实现一个设备/小工具接口,在另一端的硬件设计上有更多的种类,但是你应该发现Linux内核支持一系列更常见的设计

gadget目录还包括协议驱动程序的选择。一个可以节省大量工作的技巧是将设备配置为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的“协议”?也就是说,它是否与协议驱动程序处于同一级别?谢谢