Linux不直接支持NTFS文件系統,如果U盤是NTFS文件系統就無法直接掛載使用。
首先用lsblk列出所有塊設備:
lsblk
sd表示SCSI磁碟,後面跟a,b,c之類的字母表示第幾個磁碟,字母之後再跟數字表示這個磁碟的第幾個分區。大部分人只有一個硬碟,此時再接一個U盤,這個U盤就是sdb,U盤上的分區就是sdb1。除此以外,還可以根據顯示的容量判斷U盤設備名是sdb還是sdc。其他情況以此類推。
然後可以在用戶目錄創建一個usb目錄:(也可以根據喜好設置在其他地方,下面的掛載地址跟著改變即可)
mkdir~/usb1
最後把U盤分區掛載到這個目錄即可:(可能會提示輸入密碼,輸入密碼後回車即可)
sudomount/dev/sdb1~/usb1
然後就可以通過訪問 ~/usb1目錄來訪問U盤:
cd~/usb1
ls
最後要拔出U盤以前,要卸載U盤:(卸載時要退出usb1目錄,不然無法卸載)(可能會提示輸入密碼,輸入密碼後回車即可)
sudoumount/dev/sdb1
❷ linux 中USB 來傳輸數據
USB設備規范中兩個HOST直接連會有問題, 你需要中間接一個轉換控制器。
然後就看你用什麼協議傳數據了。
————
學硬體的, 知道usb host的電路直接連是不成的, 但怎麼寫driver就不懂了。 host to host控制器可以在市場上買到的, 貌似。說不定還附了driver.
PC端可以把這個USB介面虛擬成串口, 然後通過串口訪問來進行實時數據傳輸。
就像現在的很多手機一樣。
__
PC是host, PDA是device, 應該能找到可以把USB口虛擬成串口的驅動,這樣程序會好寫一些。我的手機就是這樣的,它可以和電腦實時通信。
❸ linux 怎麼通過usb通信
USB驅動程序基礎 在動手寫USB驅動程序這前,讓我們先看看寫的USB驅動程序在內核中的結構,如下圖: USB驅動程序存在於不同的內核子系統和USB硬體控制器之間,USB核心為USB驅動程序提供了一個用於訪問和控制USB硬體的介面,而不必考慮系統當前存在的各種不同類型的USB硬體控制器。USB是一個非常復雜的設備,linux內核為我們提供了一個稱為USB的核心的子系統來處理大部分的復雜性,USB設備包括配置(configuration)、介面(interface)和端點(endpoint),USB設備綁定到介面上,而不是整個USB設備。如下圖所示: USB通信最基本的形式是通過端點(USB端點分中斷、批量、等時、控制四種,每種用途不同),USB端點只能往一個方向傳送數據,從主機到設備或者從設備到主機,端點可以看作是單向的管道(pipe)。所以我們可以這樣認為:設備通常具有一個或者更多的配置,配置經常具有一個或者更多的介面,介面通常具有一個或者更多的設置,介面沒有或具有一個以上的端點。驅動程序把驅動程序對象注冊到USB子系統中,稍後再使用製造商和設備標識來判斷是否已經安裝了硬體。USB核心使用一個列表(是一個包含製造商ID和設備號ID的一個結構體)來判斷對於一個設備該使用哪一個驅動程序,熱插撥腳本使用它來確定當一個特定的設備插入到系統時該自動裝載哪一個驅動程序。 上面我們簡要說明了驅動程序的基本理論,在寫一個設備驅動程序之前,我們還要了解以下兩個概念:模塊和設備文件。 模塊:是在內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作為內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序。Linux下對於一個硬體的驅動,可以有兩種方式:直接載入到內核代碼中,啟動內核時就會驅動此硬體設備。另一種就是以模塊方式,編譯生成一個.ko文件(在2.4以下內核中是用.o作模塊文件,我們以2.6的內核為准,以下同)。當應用程序需要時再載入到內核空間運行。所以我們所說的一個硬體的驅動程序,通常指的就是一個驅動模塊。 設備文件:對於一個設備,它可以在/dev下面存在一個對應的邏輯設備節點,這個節點以文件的形式存在,但它不是普通意義上的文件,它是設備文件,更確切的說,它是設備節點。這個節點是通過mknod命令建立的,其中指定了主設備號和次設備號。主設備號表明了某一類設備,一般對應著確定的驅動程序;次設備號一般是區分不同屬性,例如不同的使用方法,不同的位置,不同的操作。這個設備號是從/proc/devices文件中獲得的,所以一般是先有驅動程序在內核中,才有設備節點在目錄中。這個設備號(特指主設備號)的主要作用,就是聲明設備所使用的驅動程序。驅動程序和設備號是一一對應的,當你打開一個設備文件時,操作系統就已經知道這個設備所對應的驅動程序。對於一個硬體,Linux是這樣來進行驅動的:首先,我們必須提供一個.ko的驅動模塊文件。我們要使用這個驅動程序,首先要載入它,我們可以用insmod xxx.ko,這樣驅動就會根據自己的類型(字元設備類型或塊設備類型,例如滑鼠就是字元設備而硬碟就是塊設備)向系統注冊,注冊成功系統會反饋一個主設備號,這個主設備號就是系統對它的唯一標識。驅動就是根據此主設備號來創建一個一般放置在/dev目錄下的設備文件。在我們要訪問此硬體時,就可以對設備文件通過open、read、write、close等命令進行。而驅動就會接收到相應的read、write操作而根據自己的模塊中的相應函數進行操作了。 USB驅動程序實踐 了解了上述理論後,我們就可以動手寫驅動程序,如果你基本功好,而且寫過linux下的硬體驅動,USB的硬體驅動和pci_driver很類似,那麼寫USB的驅動就比較簡單了,如果你只是大體了解了linux的硬體驅動,那也不要緊,因為在linux的內核源碼中有一個框架程序可以拿來借用一下,這個框架程序在/usr/src/~(你的內核版本,以下同)/drivers/usb下,文件名為usb-skeleton.c。寫一個USB的驅動程序最基本的要做四件事:驅動程序要支持的設備、注冊USB驅動程序、探測和斷開、提交和控制urb(USB請求塊)(當然也可以不用urb來傳輸數據,下文我們會說到)。 驅動程序支持的設備:有一個結構體struct usb_device_id,這個結構體提供了一列不同類型的該驅動程序支持的USB設備,對於一個只控制一個特定的USB設備的驅動程序來說,struct usb_device_id表被定義為: /* 驅動程序支持的設備列表 */ static struct usb_device_id skel_table [] = { { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) }, { } /* 終止入口 */ }; MODULE_DEVICE_TABLE (usb, skel_table); 對於PC驅動程序,MODULE_DEVICE_TABLE是必需的,而且usb必需為該宏的第一個值,而USB_SKEL_VENDOR_ID和USB_SKEL_PRODUCT_ID就是這個特殊設備的製造商和產品的ID了,我們在程序中把定義的值改為我們這款USB的,如: /* 定義製造商和產品的ID號 */ #define USB_SKEL_VENDOR_ID 0x1234 #define USB_SKEL_PRODUCT_ID 0x2345 這兩個值可以通過命令lsusb,當然你得先把USB設備先插到主機上了。或者查看廠商的USB設備的手冊也能得到,在我機器上運行lsusb是這樣的結果: Bus 004 Device 001: ID 0000:0000 Bus 003 Device 002: ID 1234:2345 Abc Corp. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 得到這兩個值後把它定義到程序里就可以了。 注冊USB驅動程序:所有的USB驅動程序都必須創建的結構體是struct usb_driver。這個結構體必須由USB驅動程序來填寫,包括許多回調函數和變數,它們向USB核心代碼描述USB驅動程序。創建一個有效的struct usb_driver結構體,只須要初始化五個欄位就可以了,在框架程序中是這樣的: static struct usb_driver skel_driver = { .owner = THIS_MODULE, .name = "skeleton", .probe = skel_probe, .disconnect = skel_disconnect, .id_table = skel_table, };
❹ Linux 應用層怎麼對USB設備發送URB請求
usbhid和usbmouse.c都在/usr/src/linux/drivers/hid/usbhid目錄下
USB 匯流排引出兩個重要的鏈表!
一個 USB 匯流排引出兩個重要的鏈表,一個為
USB 設備鏈表,一個為 USB 驅動鏈表。設備鏈表包含各種系統中的USB 設備以及這些設備的所有介面,驅動鏈表包含 USB 設備驅動程序(usb
device driver)和 USB 驅動程序(usb driver)。
USB 設備驅動程序(usb device driver)和 USB 驅動程序(usb driver)的區別是什麼?
USB 設備驅動程序包含 USB 設備的一些通用特性,將與所有 USB 設備相匹配。在 USB core 定義了:struct usb_device_driver usb_generic_driver。usb_generic_driver 是 USB 子系統中唯一的一個設備驅動程序對象。而 USB 驅動程序則是與介面相匹配,介面是一個完成特定功能的端點的集合。
設備是如何添加到設備鏈表上去的?
在設備插入 USB 控制器之後,USB core 即會將設備在系統中注冊,添加到 USB 設備鏈表上去。
USB 設備驅動程序(usb device driver)是如何添加到驅動鏈表上去的?
在系統啟動注冊 USB core 時,USB 設備驅動程序即將被注冊,也就添加到驅動鏈表上去了。
介面是如何添加到設備鏈表上去的?
在 USB 設備驅動程序和 USB 設備的匹配之後,USB core 會對設備進行配置,分析設備的結構之後會將設備所有介面都添加到設備鏈表上去。比如滑鼠設備中有一個介面,USB core 對滑鼠設備配置後,會將這個介面添加到設備鏈表上去。
USB 驅動程序(usb driver)是如何添加到驅動鏈表上去的?
在每個 USB 驅動程序的被注冊時,USB 驅動程序即會添加到驅動鏈表上去。
比如滑鼠驅動程序,usb_mouse_init 函數將通過 usb_register(&usb_mouse_driver)
將滑鼠驅動程序注冊到 USB core 中,然後就添加到驅動鏈表中去了。其中 usb_mouse_driver 是描述滑鼠驅動程序的結構體。
已配置狀態(configured status)之後話
當滑鼠的設備、介面都添加到設備鏈表,並且滑鼠驅動程序也添加到驅動鏈表上去了,
系統就進入一種叫做已配置(configured)的狀態。
要達到已配置狀態,將經歷復雜的過程,USB core 為 USB
設備奉獻著無怨無悔。在這個過程中,系統將會建立起該設備的的設備、配置、介面、設置、端點的描述信息,它們分別被
usb_device、usb_configuration、usb_interface、usb_host_interface、
usb_host_endpoint 結構體描述。
設備達到已配置狀態後,首先當然就要進行 USB 驅動程序和相應介面的配對,對於滑鼠設備來說則是滑鼠驅動程序和滑鼠中的介面的配對。USB core 會調用usb_bus 匯流排的usb_device_match
函數,通過比較設備中的介面信息和 USB 驅動程序中的 id_table,來初步決定該 USB 驅動程序是不是跟相應介面相匹配。通過這一道關卡後,USB core 會認為這個設備應該由這個驅動程序負責。
然而,僅僅這一步是不夠的,接著,將會調用 USB 驅動程序中的 probe 函數對相應介面進行進一步檢查。如果該驅動程序確實適合設備介面,對設備做一些初始化工作,分配 urb 准備數據傳輸。
當 滑鼠設備在用戶空間打開時,
將提交 probe 函數構建的 urb 請求塊,urb 將開始為傳送數據而忙碌了。urb 請求塊就像一個裝東西的「袋子」,USB
驅動程序把「空袋子」提交給 USB core,然後再交給主控制器,主控制器把數據放入這個「袋子」後再將裝滿數據的「袋子」通過 USB core
交還給
USB 驅動程序,這樣一次數據傳輸就完成了。