0? 概述
嵌入式linux系統環境以其易于移植裁減、內核小、效率高、完整、原代碼開放及性能優異等特點,在嵌入式領域得到了非常廣泛的應用。Linux的USB設備端的源代碼中主要有USB device的海量存儲設備、串口設備、網絡設備等設備驅動程序及各種USB device控制器芯片的驅動程序。市場上USB設備控制器芯片種類繁多,大多數用戶需要針對特定應用來開發相關的USB設備控制器驅動程序,才能使設備正常工作在linux操作系統下。
1 USB設備端驅動系統
Linux Gadget子系統主要分為三層:第一層為芯片驅動層,負責將各種USB device控制器抽象為統一的函數接口,以供上層驅動程序調用;第二層主要是對操作函數的簡單封裝;第三層為設備驅動層,可根據系統的需求實現所對應的功能。圖1所示是Linux Gadget子系統的驅動層次。Linux Gadget子系統的設備驅動層主要根據各個類別的規范及協議實現各種設備的驅動,本設計需要使一個嵌入式設備擁有移動硬盤的功能,所以,可以根據海量存儲類的規范及協議來實現該功能。
1.1 UDC驅動的基本構架
圖2所示是UDC驅動的基本構架圖。在控制器驅動程序中,首先應注冊platform驅動,調用其probe函數搜索設備,并在probe函數內初始化usb_ep和usb_gadget等結構,然后注冊設備,并申請中斷,接著等待中斷進入中斷服務子程序,最后聲明和實現usb_gadget_register_driver注冊函數并輸出給上層驅動。在該過程中,聯系它們的紐帶是一些全局結構體變量。
1.2 Gadget API
Gadget API為Gadget系統定義了統一的數據結構和接口函數,它和主機端的USB Core地位類似,但功能僅限于提供編程接口,如用結構體usb_gadget_ops和usb_ep_ops對設備控制器驅動操作函數和端點操作函數進行重新封裝。比較特殊的是Gadget驅動程序注冊函數usb_gadget_register_driver,它們是由設備控制器(UDC)驅動直接提供的,用于將UDC綁定到gadget driver。這增加了Gadget Driver和UDC之間的依賴性。
在設備端,Gadget系統雖然類似主機驅動系統分了三層結構,但Gadget API只定義了一些數據結構、宏和功能函數,并對UDC驅動程序進行了簡單包裝,而沒有驅動管理等功能。
1.3設備應用驅動程序
設備端應用程序(Gadget Driver)用于控制USB設備功能的實現,使設備表現出“網絡連接”、“打印機”或“大容量存儲設備”等特性。本文以大容量移動存儲設備為例來實現移動硬盤的功能。
BULK ONLY傳輸指的是主機和大容量存儲設備之間的一種數據傳輸方式。
2設備端驅動調度
在嵌入式Linux操作系統中,Gadget driver和Gadget API可完成部分USB協議處理、BULK ONLY等傳輸協議以及指令的解析處理,用戶只需要在設備控制器驅動程序中完成部分USB協議處理和Gadget API的銜接工作。
圖3所示的流程圖給出了USB設備端驅動程序的基本調度思想。該方案的主要思路是被動的接受主機端的傳輸命令(任何類型的通信都由USB主機發起,USB設備間不能直接通信),然后通過中斷觸發的方式完成主機端的數據傳輸。當產生設備端中斷時,設備控制器驅動程序首先判斷中斷類型。當其為批量傳輸端點IN中斷時,驅動程序會將該EP下鏈接的REQ中的數據依次寫入USB2.0 OTG IP的設備控制器的內存區;當其為批量傳輸OUT中斷時,驅動程序會將設備控制器內存區的數據讀入REQ中的buffer中;當其為端點0的控制傳輸中斷時,驅動程序將讀取端點緩沖區的數據,并解析當前的設備請求。如果主機傳輸給設備的設備請求為USB REO SEDRESS(設置設備地址)、USB_REQ_GET_STATUS(獲取設備狀態)、USB_REQ_SET_FEATURE(設置設備特性),設備控制器驅動程序會自行響應請求。但是,如果是其它設備請求,如GET_DESCRIPTOR(獲取設備描述符)時,設備控制器驅動便會將該請求提交給Gadget Driver,然后由Gadget Driver排隊將該設備請求提交給端點,以等待下次控制端點中斷。
控制傳輸比較復雜,它需要完成建立階段、數據傳輸階段和狀態階段。整個控制端點中斷的處理可通過四個狀態實現,分別是:端點0空閑(EP0_IDLE)、 數據IN傳輸(EP0 IN DATA_PHASE)、數據OUT傳輸(EP0 OUT DATA_PHASE)和狀態階段(EPO_STATUS)。
EP0_IDLE狀態主要處理建立階段的setup令牌,并根據獲得的設備請求處理能夠處理的設備請求,同時把不能處理的設備請求(如獲取設備描述符,配置描述符等)提交給上層Gadget Driver;EP0_OUT_DATA_PHASE狀態主要處理數據階段的OUT傳輸;EP0_OUT_DATA_PHASE狀態主要處理數據階段的IN傳輸;EP0_STATUS狀態則主要完成控制傳輸過程中的狀態階段。
在圖3所示的流程圖中,EP0為控制傳輸端點,EP1、EP2、EP3為批量傳輸端點,它們主要包括端點傳輸類型、端點緩沖區大小等信息。REQ為Gadget Driver提交的端點請求,主要包含傳輸的數據長度和地址。
3 UDC的設計與實現
設備控制器驅動主要分為Gadget Driver接口模塊、Gadget API函數模塊、中斷處理模塊、數據結構定義、初始化模塊、硬件讀寫模塊等,各模塊可以單獨進行設計。
3.1? 數據結構定義
根據Gadget API提供的數據結構,可以定義自己的數據結構(如設備數據結構otg_udc,端點數據結構otg_udc_ep等)來描述該USB設備控制器。
定義完特定的設備控制器驅動的數據結構后,再進行相應的映射(static struct otg_ip_udcmemory),以便將具體的設備控制器、設備端點和Gadget的抽象數據結構聯系起來。
3.2 Gadget Driver接口模塊
UDC驅動提供有usb_gadget_driver_register模塊,該模塊可實usb_gadget_register_driver等綁定函數的功能,以綁定UDC和Gadget Driver。
3.3 Gadget API函數模塊
Linux USB gadget driver API定義了一個通用的gadget driver的接口,利用gadget driver可通過API與底層USB controller driver進行通信。該API屏蔽了底層硬件的不同,故可使gadget driver只注重功能的實現,而盡量與硬件無關。其代碼如下:
該模塊主要實現Gadget API定義的函數功能,如結構體usb_ep_ops和usb_gadget_ops中的函數,以及usb_gadget_register_driver注冊函數等。這些函數可供Gadget Driver調用。
3.4? 中斷處理模塊
由于設備是被動的接受主機的控制,設備的所有行為都是基于設備中斷的觸發,因此,函數主要處理Reset中斷、Resume中斷、Suspend中斷、EP0中斷以及其他端口中斷。
3.5? 初始化模塊
初始化主要是打開中斷、打開并設置端點、設置最大總線轉向時間(此時問即包間最大等待時間),還要設置最大緩沖區長度等。
3.6? 硬件讀寫模塊
和主機控制器驅動程序類似,設備控制器的讀寫方式分為PIO讀寫和DMA讀寫兩種模式,讀寫內容也分為寄存器讀寫和端點緩沖區讀寫。在讀寫過程中,所有讀寫地址都必須是雙字節對齊模式。
4? 驅動測試結果
本文研究的HCD已經應用于實際的工程中,驅動測試的硬件環境如圖4所示。
本系統的硬件平臺是Realview EB,這是一個高度集成的開發板,其母板上的硬件資源包括:一個FPGA (Xilinx Virtex-II XC2V6000)、靜態和動態內存、集成外圍設備和兩個用于Core Tiles連接的tile連接器。設計時可通過增加一個額外的Core Tile(ARM926EJS CORE)來創建一個微處理系統。Logic Tile(Xilinx XC2V6000)中包含有一塊具有主機控制器功能的芯片otg_ip,otg_ip可通過片內總線AHB掛載在母板EB上。在該開發板上運行Linux系統時,可通過交叉編譯調試環境將開發報與一臺PC機相連,這樣,調試信息就可以通過串口打印在該主機的終端上。otg_ip可通過ULPI接口連接PHY芯片,并與USB設備相連。
設備控制器驅動模塊otg_ip_udc.ko和g_filestorage.ko成功加載后,再將其作為移動優盤插入電腦主機的USB接口,驅動即可成功識別。圖5所示是內核打印的信息結果。
5? 結束語
USB通用串行總線具有傳輸速率高、功耗低、可熱插拔和發展快速等優點,而Linus操作系統則具有易于移植和裁減、內核小、效率高、原代碼開放等特點,本文通過將其結合而給出的Linux環境下的USB設備驅動方法,可以快速地實現大容量的存儲功能,實驗表明:該系統的數據讀寫速度可以達到681 kB/s,而且效果良好。
Linux2.6環境下USB設備的驅動實現
- USB設備(17000)
- 驅動實現(6506)
相關推薦
熱點推薦
嵌入式Linux下的USB設備驅動技術
嵌入式Linux下的USB設備驅動技術
Linux以其穩定、高效、易定制、硬件支持廣泛、源代碼開放等特點,已在嵌入式領域迅速崛起,被國際上許多大型的
2010-05-08 08:30:27
2202
2202
BME680環境傳感器的驅動設計與實現
環境傳感器是一類我們很常用的傳感器。它可以方便我們獲取壓力、溫度、濕度以及空氣質量等數據。在這一篇中,我們將分析BME680環境傳感器的功能,并設計和實現BME680環境傳感器的驅動。
2022-12-08 15:41:35
3444
3444
Linux2.6在內存管理有哪些問題需要注意?
Linux2.6引入了基于對象的反向映射機制,這種方法為物理頁面設置一個用于反向映射的鏈表,但是鏈表上的節點并不是引用了該物理頁面的所有頁表項,而是相應的虛擬內存區域(vm_area_struct結構)。
2020-04-09 07:08:17
Linux2.4與Linux2.6內核調度器的比較研究
)算法,它在高負載的情況下執行得極其出色,并且當有很多處理器時也可以很好地擴展,不但大大改善了對SMP的支持,同時也兼顧了單CPU或者雙CPU系統的要求。3 Linux2.6調度器的改進目標為了改善
2008-06-17 12:04:46
Linux2.4和Linux2.6的調度器對比分析,Linux2.6對調度器的改進有哪些方面?
Linux2.4和Linux2.6的調度器對比分析,Linux2.6對調度器的改進有哪些方面?Linux2.4調度器性能低下的原因是什么
2021-04-27 06:42:00
Linux環境下USB的原理、驅動和配置
運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作為內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序。Linux下對于一個硬件的驅動
2013-11-08 16:30:39
Linux學習
`#Linux培訓#華清遠見Linux學習資料《Linux3.4內核USB驅動的移植》,USB接口是現在計算機系統中最通用的一種接口,通過移植USB驅動,了解Linux3.4內核與Linux2.6
2013-07-10 10:40:22
linux平臺設備驅動
區)在設備驅動程序中經常會見到和platform相關的字段,分布在驅動程序的多個角落,這也是2.6內核中比較重要的一種機制,把它原理弄懂,對以后分析驅動程序很有幫助:在linux2.6設備模型中,關心
2017-09-01 14:40:51
Atmel studio 7環境 使用pickit4下載程序,如何切換為AVR模式?
Atmel studio 7環境使用pickit4下載程序,使用UPDI模式,提示當前處于PIC模式,需要切換到AVR模式,請問如何切換為AVR模式?
2020-11-22 15:50:38
MX6Q Qt5.6+Linux4.1.15環境運行圖形界面程序報錯是為什么?
MX6Q Qt5.6+Linux4.1.15環境運行圖形界面程序,報錯:QXcbConnection: Could not connect to display是不是哪個環境變量沒有設置?
2022-01-11 06:05:33
RK3288環境安裝Linux QT平臺搭建相關資料推薦
一、RK3288環境安裝Linux QT平臺搭建記錄1、sudo apt-get update2、sudo apt-get install git-core gnupg flex bison
2022-08-11 17:22:30
TM4C123G在CCS5.5環境下JLINK仿真器可以在CCS5.5環境下使用嗎?
。現在想把它轉化為自己的產品,想請教幾個問題:1、在CCS5.5環境下可以用SEED-XDS560PLUS仿真器對TM4C123G ARM處理器進行仿真和程序下載嗎?2、如果不能使用XDS560仿真器
2018-08-14 06:51:31
[分享資料]linux設備驅動開發詳解_宋寶華
Linux2.6 版本內核為藍本,詳細介紹自旋鎖、信號量、完成量、中斷頂/底半部、定時器、內存和I/O映射以及異步通知、阻塞I/O、非阻塞I/O等Linux設備驅動理論;字符設備、塊設備、TTY設備、I2C設備
2015-09-11 23:36:44
為什么foundation 3.1環境里找不到啟動testbench.vhd的程式?
在foundation 3.1環境里怎么找不到啟動testbench.vhd的程式?
2019-09-18 05:55:16
關于protel *** 2004 在win7 64位環境下運行的問題
剛下載的protel *** 2004 在win7 64位環境下不能運行,安裝完成以后就提示“出現災難性故障”,求大師解決,怎樣才能運行啊。
2013-03-12 08:37:11
在stm32f107環境下可實現哪些功能
在stm32f107環境下實現如下功能: - 以太網接口用作串口使用(區別于C/S模型);- 以太網接口接收全部的網內數據; - 對網內數據包過濾,僅接收本機相關數據包及廣播包; 工具
2021-08-05 06:38:09
基于Linux的USB設備驅動方法有什么優點?
設備、串口設備、網絡設備等設備驅動程序及各種USB device控制器芯片的驅動程序。市場上USB設備控制器芯片種類繁多,大多數用戶需要針對特定應用來開發相關的USB設備控制器驅動程序,才能使設備正常工作在linux操作系統下。
2019-11-07 08:31:16
如何在F103環境下進行UART通信實驗和RS232通信實驗
RS485線在F103環境下進行UART通信實驗和RS232通信實驗在F407環境下進行RS485實驗(1.我的103板子沒有485口,2.正好看下開發板環境不同的差異)UART通信實驗(通用異步收發器)UART串口通信原理:什么是串行通信?什么是異步通信?什么是全雙工?什么是串行.
2022-02-17 07:17:45
如何對在QuartusII9.0環境下的多路寫信號處理電路進行仿真
如何對在QuartusII9.0環境下的多路寫信號處理電路進行仿真?怎樣去設計一種FIFO讀信號地址譯碼電路?
2021-09-26 06:53:31
如何編譯linux驅動模塊
在嵌入式系統應用中,嵌入式linux是非常重要的一個方面,而linux驅動編譯又是嵌入式linux中至關重要的一個環節。下面,本文將詳細講解如何編譯linux驅動模塊。首先,我們要了解一下模塊
2021-11-04 08:45:37
嵌入式Linux下USB藍牙設備驅動
的應用大打折扣。在分析藍牙協議棧的體系結構、Linux藍牙協議BlueZ的組織結構的基礎上,詳細闡述藍牙USB傳輸層,給出藍牙設備驅動實現的關鍵數據結構和函數,并在MP2530硬件平臺下實現Linux下USB藍牙
2010-04-24 09:30:17
嵌入式Linux下的USB設備驅動
,而且所有的配置過程都由系統自動完成,無須用戶干預。1 Linux下的USB設備驅動在Linux內核的不斷升級過程中,驅動程序的結構相對穩定。由于USB設備也是外圍設備的一種,因此,它的驅動
2018-12-07 10:29:50
嵌入式Linux開發學習推薦書籍
詳解》 (宋寶華編) 人民郵電出版社定價:89 linux2.6字符驅動講的比較好 llinux設備驅動程序(第三版) (驅動的一些理論講的比較好,但是比較深) 《構建嵌入式LINUX系統》 (美)雅
2018-07-05 02:30:35
怎樣去解決sw4stm32環境下遇到重定向完成后printf沒有輸出的問題呢
在sw4stm32環境下如何添加printf支持呢?怎樣去解決sw4stm32環境下遇到重定向完成后printf沒有輸出的問題呢?
2021-12-02 07:13:11
現在分享一個大四做的一個基于Cortex A8和linux2.6的廣告機
現在分享一個大四做的一個基于Cortex A8和linux2.6的廣告機,利用多線程編程,實現圖片循環播放,同時播放音樂,此項目涉及jpg和mp3格式解碼,所以必須在PC端linux系統安裝這兩個解碼庫,解碼庫自己找,這里只提供原碼,如果需要的話可以找我要
2015-10-21 10:51:14
編譯linux2.6時make uImage出現如下錯誤
首次編譯linux2.6時 make uImage 出現如下錯誤:sound/soc/s3c24xx/s3c2410-uda1341.c:26:32: asm/arch/regs-gpio.h
2019-05-30 01:38:30
請問microblaze可以跑linux2.6.X的內核嗎?
我想試著在支持MMU的microblaze7.0上跑個linux2.6內核,應該如何配置交叉編譯環境?我看到網上有人提到microblaze-gcc,我裝過arm-linux的交叉編譯環境,那個
2012-08-23 10:38:50
請問能在CCS3.3環境下使用HVRESLLCKIT開發套件嗎?
1.請問能在CCS3.3環境下使用這個套件嗎?2controlsuit中怎么沒有PeripheralHeaderIncludes.h這個頭文件,難道我的controlsuit版本不夠新?
2020-07-14 11:31:33
UNIX環境中實現PCI接口設備驅動
以UNIX操作系統Solaris 8環境中設計PMC-Sirra 7364卡驅動程序為例,探討在UNIX系統下PCI接口設備驅動程序的開發技術,包括設計思想、基本步驟、程序構架、常用函數以及PCI設備的系統
2009-02-18 14:11:24
10
10基于USB設備的Linux網絡驅動程序開發
介紹Linux 的體系結構及其網絡子系統,并結合USB 設備在Linux 下的訪問機制,給出了一種USB 網絡驅動程序的設計方法。該設計方法充分利用Linux 網絡子系統和USB總線提供的支持
2009-08-11 11:23:49
20
20Linux環境下USB的原理、驅動和配置
本文對 Linux 環境下USB 的原理、驅動和配置進行詳細介紹。隨著生活水平的提高,人們對 USB 設備的使用也越來越多,鑒于Linux 在硬件配置上尚不能全部即插即用,因此關于Linux 如
2010-01-16 16:57:53
33
33Win32環境下硬盤編輯器設計
提出了Win32環境下硬盤編輯器的設計方法,實現了硬盤所有扇區訪問,編程實現了一個實用的硬盤編輯器,為特殊類應用提供了一個強大的工具,在該工具中增加了硬盤信息抹除功能
2010-12-25 16:34:02
0
0嵌入式Linux的USB驅動設計
本文主要介紹了 Linux 平臺的USB設備驅動開發的一般步驟方法和技巧,通過詳細介紹USB的相關概念和Linux中USB設備驅動程序的數據結構,框架和步驟,并通過設計和實現一個驅動的實例,
2011-06-08 17:15:48
49
49C51環境下TLC2543的軟件設計
本文介紹了在C51環境下采用C語言和匯編語言兩種方式對AD轉換芯片TLC2543進行編程的方法,兩種方法均可以實現對外部模擬量數據的采集。
2011-09-19 11:30:04
91
91編譯Linux2.6內核并添加一個系統調用
本文以實例來詳細描述了從準備一直到使用新內核的Linux2.6 內核編譯過程,然后介紹了添加系統調用的實現步驟,最后給實驗結果。
2011-12-01 15:54:55
46
46Linux設備驅動模型摘抄
Linux2.6 內核提供了新的設備模型,目的是為了對計算機上的所有設備進行統一地表示和操作,包括設備本身和設備之間的連接關系。這個模型是在 分析了 PCI 和 USB 的總線驅動過程中得到
2012-03-19 15:15:52
39
39基于StrongARM嵌入式Linux系統下的USB通信實現
該文首先介紹以Intel StrongARM處理器和ISP1161USB主控制芯片為核心的,能實現USB通信的嵌入式硬件平臺并在簡要介紹Linux下驅動程序的原理和相關知識的基礎上 ,詳細介紹嵌入式Linux系統下的USB系統結構和USB驅動程序的開發。
2016-04-18 10:46:53
5
5基于FPGA嵌入式系統的設備驅動開發
基于FPGA嵌入式系統,在PowerPC 架構的Linux2.6 操作系統環境下,對通用輸入輸出接口(GPIO)控制器的驅動,采用平臺設備機制進行中斷控制管理。通過該管理機制,將GPIO設備本身
2017-11-18 11:32:57
2667
2667
基于Linux2.6內核的實時性增強方案設計
性能的若干方面進行研究,并利用相應的解決方法基于標準Linux2.6內核加以實現,最后通過測試,驗證了此改進方法的效果。
2018-08-17 15:01:02
1181
1181s3c2410移植MPlayer到linux2.6
s3c2410移植MPlayer到linux2.6 我使用的linux內核為2.6.14.1 MPlayer版本為MPlayer-1.0pre7try2.bz2 目前雖然已經添加了mad的mp3庫
2018-09-21 14:36:01
458
458linux下bus、devices和platform的基礎模型
kobject是Linux2.6引入的設備管理機制,在內核中由struct kobject結構表示,這個結構使所有設備在底層都具有統一的接口.kobject提供了基本的對象管理能力,是構成Linux2.6設備模型的核心結構,它與sysfs文件系統緊密聯系
2019-05-15 09:01:42
2188
2188
Linux下的硬件驅動—USB設備(上)
linuxdriver.cn方式,為更好地配置和使用USB設備提供了方便;而對于希望開發Linux系統下USB設備驅動的程序員,提供了初步學習USB驅動架構的機會。 前言 USB是英文
2019-04-02 14:35:56
937
937Linux下的硬件驅動—USB設備(下)
RESERVED FOR FUTURE USE INCLUDE FILES--> 前言在上篇《 Linux下的硬件驅動--USB設備(上)(驅動配制部分)》中,我們知道了在Linux下如何去使用一些最常
2019-04-02 14:37:35
727
727Linux2.6內核驅動移植參考
作者:晏渭川 隨著Linux2.6的發布,由于2.6內核做了教的改動,各個設備的驅動程序在不同程度上要 進行改寫。為了方便各位Linux愛好者我把自己整理的這分文檔share出來
2019-04-02 14:38:39
295
295Linux2.6 內核的 Initrd 機制解析
的"某個文件",完成加載驅動模塊等任務,第二階段才會執行真正的根文件系統中的 /sbin/init 進程。這里提到的"某個文件",Linux2.6 內核會同以前版本內核的不同,所以這里暫時使用了"某個
2019-04-02 14:39:19
817
817Linux設備驅動開發詳解PDF電子書免費下載
這是一本介紹Linux設備驅動開發理論、框架與實例的書,Linux設備驅動開發詳解基于LDD6410開發板,以Linux2.6 版本內核為藍本,詳細介紹自旋鎖、信號量、完成量、中斷頂/底半部、定時器
2019-04-28 08:00:00
37
37Linux設備驅動開發詳解PDF電子書免費下載的
這是一本介紹Linux設備驅動開發理論、框架與實例的書,《Linux設備驅動開發詳解(第2版)》基于LDD6410開發板,以Linux2.6 版本內核為藍本,詳細介紹自旋鎖、信號量、完成量、中斷頂
2019-07-24 08:00:00
39
39米爾科技Linux設備驅動研究淺談
《Linux設備驅動開發詳解(第2版)》是一本介紹linux設備驅動開發理論、框架與實例的書,《Linux設備驅動開發詳解(第2版)》基于ldd6410開發板,以linux 2.6版本內核為藍本
2019-11-25 09:32:41
2460
2460
怎么樣才能在Keil C51環境下實現64位浮點庫的設計
為解決Keil C51環境下無法進行64位雙精度計算的問題,采用分部存儲和分部計算的方法,設計了在Keil C51環境下符合IEEE一754標準的64位浮點庫.程序用C51語言實現,具有很強
2020-07-01 08:00:00
22
22如何使用Linux內核實現USB驅動程序框架
Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度觀察USB總線結構。本節介紹 Linux內核USB驅動
2020-11-06 17:59:17
20
20完整的linux系統包括哪些部分?
Linux的驅動程序可以說是五花八門,linux2.4和linux2.6的編寫有相當大的區別,就是同為linux2.6但是不同版本間的驅動程序也有區別,因此編寫linux的驅動程序變都不是那么容易的事情,對于最新版本的驅動程序的編寫甚至還沒有足夠的參考資料。
2022-12-02 11:51:42
873
873
電子發燒友App



評論