25.2.1 LinuxÄÚºËUSBÇý¶¯¿ò¼Ü
25.2.1 LinuxÄÚºËUSBÇý¶¯¿ò¼Ü
ͼ25-2ÊÇLinuxÄں˴ÓÖ÷»úºÍÉ豸Á½¸ö½Ç¶È¹Û²ìUSB×ÜÏ߽ṹµÄʾÒâͼ¡£
´Óͼ25-2ÖпÉÒÔ¿´³ö£¬LinuxÄÚºËUSBÇý¶¯Êǰ´ÕÕÖ÷»úÇý¶¯ºÍÉ豸Çý¶¯Á½Ì×ÌåϵʵÏֵģ¬ÏÂÃæ½éÉÜÁ½Ì×ÌåϵµÄ½á¹¹ºÍÌØµã¡£
1£®»ù±¾½á¹¹
ͼ25-2µÄ×ó²àÊÇÖ÷»úÇý¶¯½á¹¹¡£Ö÷»úÇý¶¯µÄ×îµ×²ãÊÇUSBÖ÷»ú¿ØÖÆÆ÷£¬ÌṩÁËOHCI/EHCI/UHCIÕâ3ÖÖÀàÐ͵Ä×ÜÏß¿ØÖƹ¦ÄÜ¡£ÔÚUSB¿ØÖÆÆ÷µÄÉÏÒ»²ãÊÇÖ÷»ú¿ØÖÆÆ÷µÄÇý¶¯£¬·Ö±ð¶ÔÓ¦OHCI/EHCI/UHCIÕâ3ÖÖÀàÐ͵Ä×ÜÏß½Ó¿Ú¡£USBºËÐIJ¿·ÖÁ¬½ÓÁËUSB¿ØÖÆÆ÷Çý¶¯ºÍÉ豸Çý¶¯£¬ÊÇÁ½ÕßÖ®¼äµÄת»»½Ó¿Ú¡£USBÉ豸Çý¶¯²ãÌṩÁ˸÷ÖÖÉ豸µÄÇý¶¯³ÌÐò¡£
USBÖ÷»ú²¿·ÖµÄÉè¼Æ½á¹¹ÍêÈ«ÊÇ´ÓUSB×ÜÏßÌØµã³ö·¢µÄ¡£ÔÚUSB×ÜÏßÉÏ¿ÉÒÔÁ¬½Ó¸÷ÖÖ²»Í¬ÀàÐ͵ÄÉ豸£¬°üÀ¨×Ö·ûÉ豸¡¢¿éÉ豸ºÍÍøÂçÉ豸¡£ËùÓÐÀàÐ͵ÄUSBÉ豸¶¼ÊÇÓÃÏàͬµÄµçÆø½Ó¿Ú£¬Ê¹ÓõĴ«ÊäÐÒéÒ²»ù±¾Ïàͬ¡£ÏòÓû§ÌṩijÖÖÌØ¶¨ÀàÐ͵ÄUSBÉ豸ʱ£¬ÐèÒª´¦ÀíUSB×ÜÏßÐÒé¡£ÄÚºËÍê³ÉËùÓеÄUSB×ÜÏßÐÒé´¦Àí£¬²¢ÇÒÏòÓû§Ìṩ±à³Ì½Ó¿Ú¡£
ͼ25-2 LinuxÄÚºËUSB×ÜÏ߽ṹ
ͼ25-2ÓÒ²àÊÇÉ豸Çý¶¯½á¹¹¡£ÓëUSBÖ÷»úÀàËÆ£¬USBÉ豸ÌṩÁËÏàͬµÄ²ã´Î½á¹¹ÓëÖ®¶ÔÓ¦¡£µ«ÊÇÔÚUSBÉ豸һ²àʹÓÃÃûΪGadget APIµÄ½á¹¹×÷ΪºËÐÄ¡£Gadget APIÊÇLinuxÄÚºËʵÏֵĶÔÓ¦USBÉ豸µÄºËÐĽṹ¡£Gadget APIÆÁ±ÎÁËUSBÉ豸¿ØÖÆÆ÷µÄϸ½Ú£¬¿ØÖƾßÌåµÄUSBÉ豸ʵÏÖ¡£
2£®É豸
ÿ¸öUSBÉ豸ÌṩÁ˲»Í¬¼¶±ðµÄÅäÖÃÐÅÏ¢¡£Ò»¸öUSBÉ豸¿ÉÒÔ°üº¬Ò»¸ö»ò¶à¸öÅäÖ㬲»Í¬µÄÅäÖÃʹÉ豸±íÏÖ³ö²»Í¬µÄÌØµã¡£ÆäÖУ¬É豸µÄÅäÖÃÊÇͨ¹ý½Ó¿Ú×é³ÉµÄ¡£LinuxÄں˶¨ÒåÁËUSBÉ豸ÃèÊö½á¹¹ÈçÏ£º
struct usb_device_descriptor {
__u8 bLength; // É豸ÃèÊö·û³¤¶È
__u8 bDescriptorType; // É豸ÀàÐÍ
__le16 bcdUSB; // USB°æ±¾ºÅ£¨Ê¹ÓÃBCD±àÂ룩
__u8 bDeviceClass; // USBÉ豸ÀàÐÍ
__u8 bDeviceSubClass; // USBÉ豸×ÓÀàÐÍ
__u8 bDeviceProtocol; // USBÉ豸ÐÒéºÅ
Ïà¹ØÎĵµ£º
±¾Õ½éÉÜ POSIX Ï̵߳Ļù±¾Ï̱߳à³ÌÀý³Ì¡£±¾Õ½éÉÜȱʡỊ̈߳¨¼´£¬¾ßÓÐȱʡÊôÐÔÖµµÄỊ̈߳©£¬ÕâÊǶàÏ̱߳à³ÌÖÐ×î³£ÓõÄÏ̡߳£±¾Õ»¹½éÉÜÈçºÎ´´½¨ºÍʹÓþßÓзÇȱʡÊôÐÔµÄÏ̡߳£
±¾Õ½éÉÜµÄ POSIX Àý³Ì¾ßÓÐÓë×î³õµÄ Solaris ¶àÏ߳̿âÏàËÆµÄ±à³Ì½Ó¿Ú¡£
Ï߳̿â
ÏÂÃæ¼òÒªÂÛÊöÁËÌØ¶¨ÈÎÎñ¼°ÆäÏà¹ØÊÖ²áÒ³¡£
´´½¨È±Ê¡Ïß³Ì
Èç¹ûδ ......
Á÷ýÌåÖ¸µÄÊÇÔÚÍøÂçÖÐʹÓÃÁ÷¼¼Êõ´«ÊäµÄÁ¬ÐøÊ±»ùýÌ壬ÆäÌØµãÊÇÔÚ²¥·Åǰ²»ÐèÒªÏÂÔØÕû¸öÎļþ£¬¶øÊDzÉÓñßÏÂÔØ±ß²¥·ÅµÄ·½Ê½£¬ËüÊÇÊÓÆµ»áÒé¡¢IPµç»°µÈ
Ó¦Óó¡ºÏµÄ¼¼Êõ»ù´¡¡£RTPÊǽøÐÐʵʱÁ÷ýÌå´«ÊäµÄ±ê×¼ÐÒéºÍ¹Ø¼ü¼¼Êõ£¬±¾ÎĽéÉÜÈçºÎÔÚLinuxÏÂÀûÓÃJRTPLIB½øÐÐʵʱÁ÷ýÌå±à³Ì¡£
&nb ......
¿ÉÒÔ²ÉÓÃsysVµÄshmget £« shmat ʵÏÖ¡£
µ«ÊÇÎÒ¸üϲ»¶shm_open + mmap ¸ü¼òµ¥¡£
#---------------------writer.c----------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
......
20.1 LinuxÄÚºËÒÆÖ²Òªµã
LinuxµÄ´úÂëÍêÈ«¿ª·ÅÒÔ¼°ÆäÁ¼ºÃµÄ½á¹¹Éè¼Æ·Ç³£ÊÊÓÚǶÈëʽϵͳ¡£ÒÆÖ²Linuxϵͳ°üÀ¨Äںˡ¢³ÌÐò¿âºÍÓ¦ÓóÌÐò£¬ÆäÖÐ×îÖ÷ÒªµÄ¾ÍÊÇÄÚºËÒÆÖ²¡£ÓÉÓÚLinuxÄں˵Ŀª·ÅÐÔ£¬³öÏÖÁËÐí¶àÕë¶ÔǶÈëʽӲ¼þϵͳµÄÄں˰汾£¬ÆäÖÐÖøÃûµÄ°üÀ¨μcLinux¡¢RT-LinuxµÈ¡£
Linux±¾Éí¶ÔÄÚ´æ¹ÜÀí£¨MMU£©ÓкܺõÄÖ§³Ö¡£Ò ......