導航:首頁 > 源碼編譯 > usb源碼分析

usb源碼分析

發布時間:2022-10-06 00:42:59

1. 用服務寫USB的拔插程序。求詳細源代碼,能用能跑的啊

這種情況也可能有,但是還有一個情況,還有一款USB設備也是自己做的,但是用了CYPRESS提供的一個USB類對下位機進行訪問,這款USB設備的拔插是可以訪問的。而我前面所說的不能識別拔插的USB設備是用IOCONTROL對下位機訪問的,所以我懷疑可以在PC軟體上下手解決這個問題。又因為那個USB類無法在我前面提到的設備上應用,所以只能自己想辦法解決。中網互贏 手機客戶端

2. window7下如何編寫USB驅動源碼

首先需要把驅動壓縮解壓到一個文件夾
然後找到你桌面的計算機 點右鍵 屬性
然後點設備管理
然後找到你的Apple USB Ethernet Adapter 設備 點右鍵屬性
再點驅動程序 再點下面的更新驅動程序
再點 瀏覽計算機查找驅動程序軟體
然後一步步確定即可。重新啟動,OK!

3. usb 2.0 驅動源代碼

http://sourceforge.net/search/?words=USB+&type_of_search=soft
你可以到這里搜索一下。

http://www-128.ibm.com/developerworks/cn/linux/l-usb/index1.html
Linux下的硬體驅動——USB設備(上)(驅動配置部分)
http://www-128.ibm.com/developerworks/cn/linux/l-usb/index2.html
Linux下的硬體驅動——USB設備(下)(驅動開發部分)

4. linux的U盤驅動源碼

根據你的描述,估計FUSE不適合你。

參考以下幾個文件吧(我的系統是DEBIAN LENNY)

localhost:/home/aaa/program# apt-cache search libusb
libusb-0.1-4 - userspace USB programming library
libusb-1.0-0 - userspace USB programming library
libusb-1.0-0-dev - userspace USB programming library development files
libusb-dev - userspace USB programming library development files

用apt-get source libusb下載過來的內如如下所示:
total 1688
-rw-r--r-- 1 500 500 2661 2005-02-14 acinclude.m4
-rw-r--r-- 1 500 500 244051 2006-03-04 aclocal.m4
drwxrwxrwx 2 500 500 4096 2006-03-04 apidocs
-rw-r--r-- 1 500 500 130 2004-04-22 AUTHORS
-rw-r--r-- 1 500 500 16833 2006-03-04 bsd.c
-rw-r--r-- 1 500 500 189 2004-01-28 ChangeLog
-rwxr-xr-x 1 500 500 3642 2004-03-12 compile
-rwxr-xr-x 1 500 500 42037 2004-04-12 config.guess
-rw-r--r-- 1 500 500 2467 2006-03-04 config.h.in
-rwxr-xr-x 1 500 500 30221 2004-04-12 config.sub
-rwxr-xr-x 1 500 500 746195 2006-03-04 configure
-rw-r--r-- 1 500 500 6777 2006-03-04 configure.in
-rw-r--r-- 1 500 500 26428 2004-01-28 COPYING
-rw-r--r-- 1 500 500 35685 2006-03-04 darwin.c
drwxr-xr-x 3 root root 4096 02-19 18:51 debian
-rwxr-xr-x 1 500 500 14841 2004-03-12 depcomp
-rw-r--r-- 1 500 500 15021 2006-03-04 descriptors.c
drwxrwxrwx 2 500 500 4096 02-19 18:49 doc
-rw-r--r-- 1 500 500 44099 2006-03-04 Doxyfile
-rw-r--r-- 1 500 500 44154 2006-02-07 Doxyfile.in
-rw-r--r-- 1 500 500 759 2004-01-28 error.c
-rw-r--r-- 1 500 500 716 2004-01-28 error.h
-rw-r--r-- 1 500 500 2043 2006-03-04 INSTALL.libusb
-rw-r--r-- 1 500 500 2063 2004-01-28 INSTALL.libusb.in
-rwxr-xr-x 1 500 500 9208 2004-03-12 install-sh
-rw-r--r-- 1 500 500 1267 2004-01-28 libusb-config.in
-rw-r--r-- 1 500 500 196 2005-02-15 libusb.pc.in
-rw-r--r-- 1 500 500 1290 2006-03-04 libusb.spec
-rw-r--r-- 1 500 500 1293 2006-03-04 libusb.spec.in
-rw-r--r-- 1 500 500 2248 2004-01-28 LICENSE
-rw-r--r-- 1 500 500 19148 2006-03-04 linux.c
-rw-r--r-- 1 500 500 3146 2005-02-03 linux.h
-rw-r--r-- 1 500 500 183730 2004-04-12 ltmain.sh
-rw-r--r-- 1 500 500 2220 2006-03-04 Makefile.am
-rw-r--r-- 1 500 500 34139 2006-03-04 Makefile.in
-rwxr-xr-x 1 500 500 10678 2004-03-12 missing
-rw-r--r-- 1 500 500 8 2004-01-28 NEWS
-rw-r--r-- 1 500 500 2546 2006-03-04 README
-rw-r--r-- 1 500 500 2556 2006-03-04 README.in
drwxrwxrwx 2 500 500 4096 2006-03-04 tests
-rw-r--r-- 1 500 500 6443 2006-03-04 usb.c
-rw-r--r-- 1 500 500 8367 2006-03-04 usb.h.in
-rw-r--r-- 1 500 500 1771 2006-03-04 usbi.h
-rw-r--r-- 1 500 500 13511 2006-03-04 usbpp.cpp
-rw-r--r-- 1 500 500 24428 2005-02-10 usbpp.h
可以從usb.c, usb.h.in入手來研究。

5. 利用adb命令打開usb調試

打開android手機的USB調試對於使用豌豆夾、調試程序等來說很重要。下面說說如何用代碼自動打開USB調試。先分析USB調試的相關源代碼。

在 packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java 找到關於 USB Debug Enable 的代碼:

[java]view plain

6. 如何使用stm32進行usb應用開發

主要是分析官方的Custom_HID 常式,強烈建議大家結合USB2.0協議去分析源代碼。特別不錯,分析完之後就可以修改移植了。另外,有個叫源享科技的出了一套80集的關於STM32的整套視頻,對USB等高級外設講的非常透徹,結合原子的開發板學習,效果也很好的。那視頻在源享科技官網上挺貴的,哈哈,最後我在淘寶上發現那些新開的店最便宜的才10塊錢。老闆是個挺厲害的研究生,在學USB的時候幫了我不少。。廢話不說了,關於修改官方常式的步驟::附件USB程序

一、usb_desc.c文件
根據你程序使用的通信方式修改。usb_desc.h文件中定義要根據usb_desc.c文件中的數組的大小;ConfigDescriptor[SIZ_CONFIG_DESC]下添加需要處理的端點;根據需要添加或刪除報告描述符(主要用於HID)和CDC介面描述符(主要用於實現USB轉串口)等。具體方法可以下載個「電腦圈圈」使用D12編寫的例子。
二、Usb_conf.h文件:
1、修改需要處理那些中斷
CNTR_CTRM
處理數據正確傳輸後控制,比如說響應主機
CNTR_DOVRM
/* DMA OVeR/underrun Mask */
CNTR_ERRM

/* ERRor Mask */
CNTR_WKUPM 0
/* WaKe UP Mask */
CNTR_SUSPM

/* SUSPend Mask */
CNTR_RESETM

主要處理USB復位後進行一些初始化任務
CNTR_SOFM

/* Start Of Frame Mask */
CNTR_ESOFM

/* Expected Start Of Frame Mask */
如:
usb_conf.h中的#define IMR_MSK (CNTR_CTRM | CNTR_SOFM | CNTR_RESETM )是決定USB_CNTR寄存器中的那個USB相關中斷啟動還是屏蔽。

2、根據需要增加端點緩存地址,要根據緩存區的地址修改,防止數據重疊
如下為根據每個緩沖區的大小為64位元組修改:
#define ENDP1_TXADDR
(0xC0)
#define ENDP1_RXADDR
(0xD0)
#define ENDP2_TXADDR
(0x100)
#define ENDP2_RXADDR
(0x140)
#define ENDP3_TXADDR
(0x180)
#define ENDP3_RXADDR
(0x1C0)

3、修改/* CTR service routines */下的EPX_IN_Callback和EPX_OUT_Callback。注釋掉需要處理的函數。NOP_Process表示不處理。

三usb_prop.c文件
1、修改void XX_Reset(void)(如:void Joystick_Reset(void))
一般/* Initialize Endpoint 0 */的不用修改,如下為舉例說明端點1的初始化,其他埠原理一樣。
SetEPType(ENDP1, EP_INTERRUPT);//設置端點1類型
/*EP_BULK
批量端點
EP_CONTROL 控制端點
EP_ISOCHRNOUS 同步端點
EP_INTERRUPT 中斷端點*/
SetEPTxAddr(ENDP1, ENDP1_TXADDR); //設置端點1緩沖區基地址
SetEPTxCount(ENDP1, 64);// 配置Tx 緩沖計數器
SetEPRxStatus(ENDP1, EP_RX_DIS);// //設置端點接收關閉
SetEPTxStatus(ENDP1, EP_TX_NAK);// //設置端點1發送不應答
/*
#define EP_RX_DIS
(0x0000) // EndPoint RX DISabled 端點接收關閉
#define EP_RX_STALL
(0x1000) // EndPoint RX STALLed 端點接收延遲
#define EP_RX_NAK
(0x2000) // EndPoint RX NAKed 端點接收不應答
#define EP_RX_VALID
(0x3000) // EndPoint RX VALID端點接收有效
#define EP_TX_DIS
(0x0000) //EndPoint TX DISabled
#define EP_TX_STALL
(0x0010) // EndPoint TX STALLed
#define EP_TX_NAK
(0x0020) // EndPoint TX NAKed
#define EP_TX_VALID
(0x0030) // EndPoint TX VALID */

2、刪除不相乾的描述符等。
如自定義的USB設備就不需要以下結構體初始化:
ONE_DESCRIPTOR Joystick_Report_Descriptor
ONE_DESCRIPTOR Mouse_Hid_Descriptor

3、修改RESULT XX_Data_Setup(u8 RequestNo)的數據類請求處理。
如Custom_HID常式修改為「自定義USB設備」常式時可以將以下代碼刪除
if ((RequestNo == GET_DESCRIPTOR)

&& (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))

&& (pInformation->USBwIndex0 == 0))

{

if (pInformation->USBwValue1 == REPORT_DESCRIPTOR)
{
CopyRoutine = Joystick_GetReportDescriptor;
}
else if (pInformation->USBwValue1 == HID_DESCRIPTOR_TYPE)

{
CopyRoutine = Joystick_GetHIDDescriptor;

4、刪除不相乾的獲得描述符返回函數
如自定義的USB設備就不需要以下函數:
Joystick_GetReportDescriptor
Joystick_GetHIDDescriptor

四、usb_endp.c文件
1、增加之前定義的中斷數據處理函數
如:
void EP1_OUT_Callback(void)
{

這些寫接收代碼
五、數據發送和接收,舉例說明
1、數據接收
u8 DataLen;

DataLen = GetEPRxCount(ENDP1);

PMAToUserBufferCopy(TX1_buffer, ENDP1_RXADDR, DataLen);

SetEPRxValid(ENDP1);

USART1_Send(DataLen);

count_out = 1;
2、數據發送
UserToPMABufferCopy(InBuffer, GetEPTxAddr(ENDP1), 64);
SetEPTxCount(ENDP1, 64);
SetEPTxValid(ENDP1);

如果你發送數據較為頻繁,每次發送前應使用GetEPTxStatus(ENDP1)檢測上次發送是否完成。如果端點狀態處於EP_TX_VALID,說明發送未結束,如果端點狀態處於EP_TX_NAK,說明發送結束。

7. C# USB讀寫速度測試源碼

USB介面的通訊原理
1、USB設備的接入
USB介面中的+5V電源不但可以為外接設置提供小電流供應,並且還起著檢測功能。當USB設置插入USB介面後,主機的+5V電源就會通過USB邊線與USB設備相通。USB外設的控制晶元會通過兩只10K的電阻來檢查USB設備是否接入了主機的USB埠。如果這兩個引腳一個為高電平,一個為低電平時就表示USB外設已經正常確連入USB介面,這時外設的控制晶元開始工作,並通過DATA+,DATA-向外送出數據。這時主機接收數據後,就會提示發現新硬體,並開始安裝新硬體驅動。
2、USB設備的識別
在USB外設向外送出數據時,其中就包括設備自身的設備名及型號等相關參數,主機就是根據這些信息在顯示器上顯示出所發現的新硬體的名稱型號的。
多說一點:如果現在快閃記憶體的價格降得更低時,我們就可以把掃描儀,列印機,數碼相機的驅動程序存在設備內部。當主機需要驅動程序時,直接從設備內部讀取就可以了,也就不再需要驅動光碟和安裝驅動等繁瑣手續了。

8. linux下usb驅動程序開發有哪些背景及其意義

在Linux kernel源碼目錄中driver/usb/usb-skeleton.c為我們提供了一個最基礎的USB驅動程序。我們稱為USB骨架。通過它我們僅需要修改極少的部分,就可以完成一個USB設備的驅動。我們的USB驅動開發也是從她開始的。
那些linux下不支持的USB設備幾乎都是生產廠商特定的產品。如果生產廠商在他們的產品中使用自己定義的協議,他們就需要為此設備創建特定的驅動程序。當然我們知道,有些生產廠商公開他們的USB協議,並幫助Linux驅動程序的開發,然而有些生產廠商卻根本不公開他們的USB協議。因為每一個不同的協議都會產生一個新的驅動程序,所以就有了這個通用的USB驅動骨架程序, 它是以pci 骨架為模板的。
如果你准備寫一個linux驅動程序,首先要熟悉USB協議規范。USB主頁上有它的幫助。一些比較典型的驅動可以在上面發現,同時還介紹了USB urbs的概念,而這個是usb驅動程序中最基本的。
Linux USB 驅動程序需要做的第一件事情就是在Linux USB 子系統里注冊,並提供一些相關信息,例如這個驅動程序支持哪種設備,當被支持的設備從系統插入或拔出時,會有哪些動作。所有這些信息都傳送到USB 子系統中。
樓主如果想學習如何使用Linux系統,可以網路《Linux就該這么學》,裡面有詳細的介紹。

9. 初涉USB,初學者USB入門總結USB上位機讀寫開發,請高手指點下!!!

固件的程序和驅動編寫好了後,把設備插入就可以正確識別到,接下來的工作就是如何用上位機讀寫設備了。其實讀寫操作跟讀寫串口一致的,就是用file進行操作。關鍵是打開設備,下面是我用到的程序,這里都貼出來吧,我都是用這個的,供大家參考,呵呵,如果剛開始弄的話,估計得弄上個一個星期才行,用這個程序修改一下,兩分鍾搞定。
其中GUID ClassGuid 是你在驅動中生成的一個號,它必須跟你的驅動對應起來,這個號的位置在驅動程序的XXXDeviceInterface.h中的#define XXXDevice_CLASS_GUID \....(XXX表示你起的工程名字)。把這個號替換之後用FpOpenDevice打開設備,得到一個讀句柄,一個寫句柄,然後在自己的程序中用readfile和writefile讀寫設備就可以了,注意,不管是讀還是寫,都是主機發出的,設備不能主動發發數據。比如上位機中運行readfile,就會發送一個IN指令,設備接到IN指令後,會把緩沖區的內容發出。
這一方面,想簡單可以簡單,想復雜可以負責的,,
上位機包括驅動和應用兩層。一般為了使自己的程序更通用並且適合做
再加工,,都是在驅動和界面程序中間加個dll什麼的,,作為中間層。
簡單說的話,你可以下載公版驅動,和針對於該驅動的dll,,
開發者直接調用dll export出來的介面函數,完成開發,,跟一般的
軟體開發差不多,,只有你會調用dll。。當然這里還有一個問題就是,
你還要和下位機軟體開發的人一起制定一個協議什麼的,,來具體完成
一些數據狀態的交換。。。。
如果要寫驅動,,相對教難些,,不過可以上網上下載些類似的源碼,,
參考修改,,完成驅動。。。
推薦你去csdn,這個網站上有很多資源,注冊都可以下載的

10. java如何實現usb口插拔事件的監測,最好有源代碼

java 要訪問 usb 設備,通常要自己寫c/c++代碼,然後再用 java 訪問這些組件,以達到控制usb設備的目的。但現在有一個開源組件 libusb 幫我們做好了訪問usb設備的封裝(包括windows、linux等平台)。我們用 java 訪問usb 設備時,可以通過訪問 libusb 組件提供的介面即可。要了解這個組件的 java 部分的 Demo、API等,可以訪問這里:http://libusbjava.sourceforge.net/

使用這個組件最重要的意義在於:
首先,你不再需要在 win、linux 等平台上寫 c/c++ 等 native 組件,甚至,你不需要知道 jni 怎麼寫;
其次,使用這個組件,你可以訪問所有的 usb 設備,當然,前提條件是你必須知道 usb 設備的相關指令(我當前就用這個組件,直接發usb能接受的命令,去控制我的指紋儀來工作)
最後,如果你的 usb 設備沒有驅動程序,比如,你的 usb 設備是自己研製出來的,還沒來得及為各種平台寫驅動程序,你可以用這個組件提供驅動程序

從:http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/ 下載 libusb-win32-bin-1.2.2.0.zip
從 http://sourceforge.net/projects/libusbjava/files/libusbjava-snapshots/20090517/ 下載 ch.ntb.usb-0.5.9.jar 和 LibusbJava_dll_0.2.4.0.zip
安裝 libusb-win32:
1)、解壓 libusb-win32-bin-1.2.2.0.zip;
2)、把目錄:\bin\x86 下的 libusb0_x86.dll 復制到 windows/system32 目錄下,並改名為:libusb0.dll;
3)、把目錄:\bin\x86 下的 libusb0.sys 復制到 windows/system32/drivers 目錄下
4)、運行 install-filter-win.exe ,從中選擇安裝你要訪問的 usb 設備
5)、運行 testlibusb-win.exe,有正確的提示信息。如下圖:

注意:如果你運行第4)步時,出現無法安裝libusb0服務、無法找到文件等錯誤,或者運行第5)步時,界面中「Driver version:」後面的版本號是,-1.-1 -1 ...這些情況,說明你的安裝不正常。原因可能是因為你的usb設備是新安裝的,且你沒有重啟計算機。你重啟一下計算機,再進行上述步驟,應該就可以了。
把 LibusbJava.dll 復制到 windows/system32 目錄下
這時,到達 ch.ntb.usb-0.5.9.jar 所在的目錄,運行: java -jar ch.ntb.usb-0.5.9.jar,這樣就會出來一個java swing做的窗口,如下圖。
當右鍵點擊倒數第二級的節點的時候,又會彈出新的窗口,在這個彈出窗口裡,你可以直接發送一些16進制的代碼給 usb 設備。但值得注意的是,這個窗口的代碼寫得有問題,其對16進制的代碼轉換為真正要發送的代碼時,轉換的是錯誤的代碼。這個錯誤可以自己下載源碼,更正即可。錯誤的類及方法是:
TestApp.java 中的方法:byte[] parseByteArray(String s);更正的代碼可以參考如下代碼:

Java代碼
重新編譯後,替換掉這個類,即可。
byte[] parseByteArray(String s) {
String[] hexs = s.split(" ");
byte[] bytes = new byte[hexs.length];
if(hexs.length > 0){
int i = 0;
for(String hex : hexs){
String s1 = hex.substring(2);
bytes[i] = (byte)(Integer.parseInt(s1, 16));
i++;
}
}
return bytes;
}

閱讀全文

與usb源碼分析相關的資料

熱點內容
linux關閉系統 瀏覽:633
安卓怎麼收納app 瀏覽:214
window壓縮命令 瀏覽:996
免費時間伺服器地址 瀏覽:61
蘋果怎麼清理數據不刪除app 瀏覽:443
linux硬解碼 瀏覽:123
賽文命令 瀏覽:412
java軟體編程教程 瀏覽:856
android判斷gps 瀏覽:480
安卓如何打開高清通話 瀏覽:336
炒股編程的書 瀏覽:67
鉚單片機 瀏覽:424
pdf圖片列印 瀏覽:719
樂刻app如何查看關注的教練 瀏覽:646
如何開發製作應用app 瀏覽:503
pg編譯安裝設置不區分大小寫 瀏覽:41
php工程師任職要求 瀏覽:693
zip解壓縮失敗 瀏覽:713
php寫入圖片文件 瀏覽:899
TG文件夾列表 瀏覽:695