Linux URB:了解Linux中的USB请求区块。(linuxurb)
Linux URB(USB Request Block)作为Linux的USB驱动的基础,提供了发送和接收USB控制信息的框架,它实现了USB设备和控制器之间的控制和传输。 URB的定义可以是通用的,也可以仅适用于特定架构。一个它被用于Linux操作系统的机器,URB中定义的内容可以与用于其他机器的内容不同。
Linux URB能够让设备和控制芯片进行双向通信,由设备发送和接收数据。它还维护状态,来确定控制信息的发送顺序,以及数据处理的结果。
首先,在Linux内部,每个USB设备都分配一个或多个URB,而每个URB又有关联的endpoint,而此endpoint负责维护数据传输的完整性和控制操作的执行有效性。的收到的数据由设备的endpoint按照URB的指示处理,然后将其发送给控制器,并且要求控制器发送数据检查结果。控制器根据URB组的小的segment来处理数据,控制器完成数据处理后,发送回复给设备。
struct urb {
int type; /* type of URB request */ int transfer_buffer_length; /* length of buffer data to transfer */
void* transfer_buffer; /* pointer to buffer data */ /* other data specific to the request... */
};
此外,URB还提供了一些必要信息,例如需要操作的设备附件,也可以包括所请求的URB类型和操作结果的回报值。其负责传输的buffer数据也可以另外存放到一个通用的内存位置(如dma_buffer),以防止USB设备损害控制芯片。
最后,UBC被普遍用于Linux系统中,它能够提供一个简洁而高效的机制,控制USB设备和控制芯片之间的双向通信。URB将复杂的USB控制信息包装成简洁而可操作的对象,使设备和控制器之间的数据在适当的方式中交换,从而简化LinuxUSB外设驱动程序的编写。