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

时间:2010-10-06 05:59:52

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

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

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

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

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

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

我是一名高级计算机工程专业的学生,​​所以我的经验水平是C,C ++,Java,Verilog,TCL等编程的混合。几乎所有与套接字相关的编程都是Java(OS独立)所以我真的我不知道从哪里开始编写Linux应用程序来执行这样的任务。我在微处理器编程(AVR,coldfire)方面拥有相当丰富的经验,但是尽管接近我需要的东西,它并没有真正帮助我找到从哪里开始。

2 个答案:

答案 0 :(得分:3)

USB端口有两种风格;主机是总线的控制器,可以在PC和设备上找到,也可以在Linux中找到一个小工具(有一个版本常见于静止照相机,端口可以在连接时切换类型为USB的连接类型)。主机端口可以连接到多个小工具端口(通过集线器)。主机远离控制器,作为奴隶运行的小工具。 两种端口类型的硬件非常不同,许多嵌入式内核包含每种类型控制器的示例。 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。

答案 1 :(得分:1)

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