2

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

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

对于如何开始这个项目或者在Linux中输入/输出的划分方面进行研究,我基本上已经迷失了方向。首先,是否有可能通过相同的USB端口读取视频,写入视频和发送命令?视频相对较小,尤其是在设备压缩后,因此带宽不成问题。主要问题是要知道从哪里开始研究这个项目。是否有类似USB的TCP/IP,您可以在主机和设备之间打开多个连接来传输数据?

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

我应该开始研究Linux驱动程序,用户级编程和API或USB协议吗?或者完全不同的东西?我是一名高级计算机工程专业的学生,​​所以我的经验水平是C,C++,Java,Verilog,TCL等编程的混合体。几乎所有与套接字相关的编程都在Java(独立于操作系统)中,所以我真的不知道从哪里开始编写Linux应用程序来执行这样的任务。在微处理器编程(AVR,coldfire)方面我有过相当多的经验,但是尽管接近我的需求,但它并不能真正帮助我找出开始的地方。

回答

3

USB端口有两种口味;主机是公共汽车的控制器,可以在个人电脑和设备上找到,也可以在Linux中找到一个小工具(在静止图像摄像机中有一个通用的版本,其中的端口可以在移动时称为USB连接切换类型)。主机端口可以连接到多个小工具端口(通过集线器)。主机非常擅长控制作为从属设备的小工具。 两种端口类型的硬件有很大不同,许多嵌入式核心都包含每种类型控制器的示例。 Linux内核包含OHCI EHCI和UHCI主机控制器硬件以及各种协议驱动程序(打印机,键盘等)的主机驱动程序。对于某些设备类型,USB组织实施了标准协议,因此您不需要USB磁盘驱动器的制造商驱动程序,因为它们应该都符合免费的公开可用标准。

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

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

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

获取您自己的内核源代码集并学习USB gadget目录,同时从USB.org下载USB规范您将需要了解第8章9 10 11章节,因为它们解释了主机检测到小工具后会发生什么端点的概念。作为USB的快速介绍,Mindshare做了一本USB书。

+0

请问在上面的分析中libusb'sit'在哪里?我的意思是它实现了设备IO的'协议'吗?也就是说,它是否与协议驱动程序位于同一级别?谢谢 – nass 2013-07-02 16:35:48