freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linuxusbgadget設(shè)備驅(qū)動解析-資料下載頁

2025-06-25 07:07本頁面
  

【正文】 D_HIGH, else .speed = USB_SPEED_FULL, endif .function = (char *) longname, .bind = zero_bind, .unbind = __exit_p(zero_unbind), .setup = zero_setup, .disconnect = zero_disconnect, .suspend = zero_suspend, .resume = zero_resume, .driver = { .name = (char *) shortname, .owner = THIS_MODULE, }, }。構(gòu)建一個usb_gadget_driver,調(diào)用usb_gadget_register_driver注冊函數(shù)即可注冊一個usb gadget驅(qū)動。需要注意的是,目前S3C2410主機控制器只能注冊一個gadget功能驅(qū)動。這主要是由協(xié)議決定的。int usb_gadget_register_driver(struct usb_gadget_driver *driver) {…… if (udcdriver)//如果已經(jīng)注冊過了 return EBUSY。 …… }usb_gadget_driver結(jié)構(gòu)事實上我們的工作就是構(gòu)建這個usb_gadget_driver結(jié)構(gòu)。那么這個結(jié)構(gòu)這樣和我們上面要實現(xiàn)的3個目標(biāo)聯(lián)系起來呢。 . Setup (zero_setup) 處理host端發(fā)來的request,如:處理host端發(fā)來的get_descriptor請求。 在這實現(xiàn)了前面提到的必須要實現(xiàn)的第一個功能。 . bind (zero_bind) 綁定dev與driver,在gadget driver,注冊驅(qū)動時被usb_gadget_register_driver調(diào)用,綁定之后driver才能處理setup請求 另外,通過usb_ep_autoconfig函數(shù),可以分配到名為EP_IN_NAME、EP_OUT_NAME兩個端點。后面可以對兩個端點發(fā)起數(shù)據(jù)傳輸請求,和USB 主機端的urb請求非常相似,大家可以和urb對照一些。 發(fā)起數(shù)據(jù)請求大致有以下幾步: struct usb_request *req。 req = alloc_ep_req(ep, buflen)。//分配請求,數(shù)據(jù)傳輸?shù)姆较蛴蒭p本身決定 reqplete = source_sink_plete。 //請求完成后的處理函數(shù) status = usb_ep_queue(ep, req, GFP_ATOMIC)。//遞交請求 free_ep_req(ep, req)。//釋放請求,通常在請求處理函數(shù)plete中調(diào)用 . 通常在bind和unbind函數(shù)中注冊具體的功能驅(qū)動 如果為了實現(xiàn)某個特定功能需要在設(shè)備端注冊字符、塊、網(wǎng)絡(luò)設(shè)備驅(qū)動的話,選擇的場合通常是bind中注冊,unbind中卸載。: static int __init eth_bind (struct usb_gadget *gadget) { …… status = register_netdev (devnet)。 //注冊網(wǎng)卡驅(qū)動 …… } static void /* __init_or_exit */ eth_unbind (struct usb_gadget *gadget) { …… unregister_netdev (devnet)。 //注銷網(wǎng)卡驅(qū)動 …… } 這也讓我們對在設(shè)備端實現(xiàn)一個字符、塊、網(wǎng)絡(luò)驅(qū)動的結(jié)構(gòu)有了一些了解。總結(jié) 本文對gadget的驅(qū)動結(jié)構(gòu)做了簡要的介紹。下一篇將介紹如何編寫一個簡單的gadget驅(qū)動及應(yīng)用測試程序。一、編寫計劃通過前面幾節(jié)的基礎(chǔ),本節(jié)計劃編寫一個簡單的gadget驅(qū)動。重在讓大家快速了解gadget驅(qū)動結(jié)構(gòu)。這個程序考慮到了多配置、高速傳輸、USB OTG等因素。應(yīng)該說寫的比較清楚,是我們了解gadget驅(qū)動架構(gòu)的一個非常好的途徑。但把這些東西都放在一起,對很多初學(xué)人員來說還是不能快速理解。那就再把它簡化一些,針對S3C2410平臺,只實現(xiàn)一個配置、一個接口、一個端點,不考慮高速及OTG的情況。只完成單向從host端接收數(shù)據(jù)的功能,但要把字符設(shè)備驅(qū)動結(jié)合在里面。這需要有一個host端的驅(qū)動,來完成向device端發(fā)送數(shù)據(jù)。關(guān)于在主機端編寫一個簡單的USB設(shè)備驅(qū)動程序,有很多的資料。相信大家很快就會完成的。二、功能展示能夠向device端發(fā)送數(shù)據(jù)對目標(biāo)平臺編寫一個gadget驅(qū)動,測試步驟在目標(biāo)平臺(基于S3C2410)上加載gadget驅(qū)動 insmod name=ep1bulk smdk2410_udc: Pullup enable mknod /dev/usb_rcv c 251 0 insmod mknod /dev/usbtransfer c 266 0連接設(shè)備,目標(biāo)平臺的終端顯示:connected目標(biāo)平臺讀取數(shù)據(jù) cat /dev/usb_rcvPC端發(fā)送數(shù)據(jù)echo “12345” /dev/usbtransfer echo “abcd” /dev/usbtransfer設(shè)備端會顯示收到的數(shù)據(jù) cat /dev/usb_rcv 12345 abcd三、代碼分析、修改的。一些結(jié)構(gòu)的名稱還是保留以前的,但含義有所變化。如:loopback_config,不再表示loopback,而只是單向的接收數(shù)據(jù)。/** Gadget Zero, for simple USB development * lht@ * All rights reserved.*/ /* define VERBOSE_DEBUG */include linux/ include linux/ include linux/ include linux/usb/ include linux/usb/ include include linux/ include linux/ include linux/ include linux/usb/ include linux/ include asm/ include linux/ include linux/ include linux/ /* size_t */ include linux/ /* error codes */ include asm/ include asm/ include linux//**/ static const char shortname[] = zero。 static const char loopback[] = loop input to output。 static const char longname[] = Gadget Zero。 static const char source_sink[] = source and sink data。 define STRING_MANUFACTURER 25 define STRING_PRODUCT 42 define STRING_SERIAL 101 define STRING_SOURCE_SINK 250 define STRING_LOOPBACK 251//define DRIVER_VENDOR_NUM 0x0525 /* NetChip */ //define DRIVER_PRODUCT_NUM 0xa4a0 /* LinuxUSB Gadget Zero */ define DRIVER_VENDOR_NUM 0x5345 /* NetChip */ define DRIVER_PRODUCT_NUM 0x1234 /* LinuxUSB Gadget Zero */static int usb_zero_major = /**/ static const char *EP_OUT_NAME。 /* sink */ /**//* big enough to hold our biggest descriptor */ define USB_BUFSIZ 256 struct zero_dev { //zero設(shè)備結(jié)構(gòu) spinlock_t lock。 struct usb_gadget *gadget。 struct usb_request *req。 /* for control responses */ struct usb_ep *out_ep。 struct cdev cdev。 unsigned char data[128]。 unsigned int data_size。 wait_queue_head_t bulkrq。 }。 define CONFIG_LOOPBACK 2 static struct usb_device_descriptor device_desc = { //設(shè)備描述符 .bLength = sizeof device_desc, .bDescriptorType = USB_DT_DEVICE, .bcdUSB = __constant_cpu_to_le16(0x0110), .bDeviceClass = USB_CLASS_VENDOR_SPEC, .idVendor = __constant_cpu_to_le16(DRIVER_VENDOR_NUM), .idProduct = __constant_cpu_to_le16(DRIVER_PRODUCT_NUM), .iManufacturer = STRING_MANUFACTURER, .iProduct
點擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1