當前位置:首頁 » 操作系統 » linux讀寫usb

linux讀寫usb

發布時間: 2023-03-31 12:53:22

linux usb讀寫速度問題

那要看你修改了什麼,是不是你修改的地方影響了讀取的效率。
還要考慮會不會是外圍設備影響了讀取的速度

❷ linux中怎麼測試單個口 USB 的讀寫速度的問題

第一,你把方向搞反了
第二,測試的/dev/null文件也是錯的

先了解以下概念:
(1)首先null文件時一個黑洞文件,你把它理解為垃圾桶就行,什麼廢舊不需要的文件只需往裡扔,進入它的內容都會永遠丟失
(2)zero文件當你讀它的時候,它會提供無限的空字元(NULL, ASCII NUL, 0x00),最長用的做法就是想你這樣生產一個特定大小的空白文件。
(3)if是讀出來 of是寫進去。

所以應該是這樣
你還得把你的U盤設置一個掛載點,掛載到一個位置上,然後再往裡寫入,如

mount /dev/sda1 /mnt

應該如下:
1、測試寫入應該這樣:
dd if=/dev/zero of=/mnt/test.txt bs=100M count=1
2、測試讀取是這樣:
dd if=/mnt/test.txt of=/dev/null bs=100M count=1

純手打,採取吧。。。。

❸ linux操作系統怎麼識別USB介面設備

linux系統會自動識別USB介面為串口磁碟sda(通常為sda1,可通過fdisk
-l命令查詢),掛載就可用。
例:新建掛載目錄mkdir
/mnt/usb,掛載mount
/dev/sda1
/mnt/usb,用完卸載掛起點unmount
/dev/sda1
/mnt/usb。

❹ linux怎麼讀取usb口的輸入

Linux不直接支持NTFS文件系統,如果U盤是NTFS文件系統就無法直接掛載使用。首先用lsblk列出所有塊設備:
1
lsblk
sd表示SCSI磁碟,後面跟a,b,c之類的字母表示第幾個磁碟,字母之後再跟數字表示這個磁碟的第幾個分區。大部分人只有一個硬碟,此時再接一個U盤,這個U盤就是sdb,U盤上的分區就是sdb1。除此以外,還可以根據顯示的容量判斷U盤設備名是sdb還是sdc。其他情況以此類推。
然後可以在用戶目錄創建一個usb目錄:(也可以根據喜好設置在其他地方,下面的掛載地址跟著改變即可)
1
mkdir ~/usb1
最後把U盤分區掛載到這個目錄即可:(可能會提示輸入密碼,輸入密碼後回車即可)
1
sudo mount /dev/sdb1 ~/usb1
然後就可以通過訪問 ~/usb1目錄來訪問U盤:
1
2
cd ~/usb1
ls

最後要拔出U盤以前,要卸載U盤:(卸載時要退出usb1目錄,不然無法卸載)(可能會提示輸入密碼,輸入密碼後回車即可)

❺ Linux系統寫入U盤方法教程

之前我們介紹過怎麼把Windows系統放進U盤備份,那麼對於Linux系統方法也一樣嗎?有一些地方不同的,需要注意,所以下面我們就來教大家如何在U盤中安裝Linux系統,把Linux系統寫入U盤。

操作步驟

第一步:首先插入u盤到電腦主機usb介面處(建議插入到主機箱後置的usb介面),然後打開UltraISO軟體,再打開選擇需要寫入u盤的Ubuntu 10.04或者其他版本的Linux系統的iso鏡像包

3 第二步:點擊“啟動光碟”,然後滑鼠移動選擇到“寫入硬碟映像”並點擊滑鼠左鍵

彈出一個寫入硬碟映像的窗口,值得注意的是:硬碟驅動器那裡我們要看清楚,是我們剛才插入usb介面的那個u盤,也就是我們需要寫入的u盤,千萬別搞錯了。

寫入方式我們默認即可,然後點擊“便捷啟動”,選擇到“寫入新的驅動器引導區”,再滑鼠右移選擇到“Syslinux”項,點擊滑鼠!

u啟動溫馨提示:“Syslinux”這一項選擇很重要,網路上流傳的很多關於此類的教程由於都忽略了這一步,導致最終製作失敗。

點擊“是(Y)”繼續

接下來會彈出一個“寫入引導扇區成功”的提示窗口

第三步:也就是繼續上一步的操作,我們點擊“寫入”繼續,意思是把整個iso鏡像包寫入到我們的u盤裡面

點擊了“寫入”按鈕以後將會彈出一個確定窗口,其表達的意思是讓您進一步確認是否將iso鏡像包寫入到該u盤裡面,我們只要點擊“是(Y)”按鈕即可,如下圖:

現在開始寫入Linux系統的iso鏡像包到u盤

在寫入u盤的時候我們要注意的是:盡量不要去做其他操作,建議耐心等待其寫入成功!

OK,大功告成,u盤寫入Ubuntu Linux系統就完成了,我們接下來可以做的就是利用這個製作好引導的u盤來安裝Ubuntu系統了。

補充:系統常用維護技巧

1,在 “開始” 菜單中選擇 “控制面板” 選項,打開 “控制面板” 窗口,單擊 “管理工具” 鏈接

2,在打開的 “管理工具” 窗口中雙擊 “事件查看器” 圖標

3, 接著會打開 “事件查看器” 窗口

4,在右側窗格中的樹狀目錄中選擇需要查看的日誌類型,如 “事件查看器本地--Win日誌--系統日誌,在接著在中間的 “系統” 列表中即查看到關於系統的事件日誌

5,雙擊日誌名稱,可以打開 “事件屬性” 對話框,切換到 “常規” 選項卡,可以查看該日誌的常規描述信息

6,切換到 “詳細信息” 選項卡,可以查看該日誌的詳細信息

7,打開 “控制面板” 窗口,單擊 “操作中心” 鏈接,打開 “操作中心” 窗口,展開 “維護” 區域

8,單擊 “查看可靠性歷史記錄” 鏈接,打開 “可靠性監視程序” 主界面,如圖所示, 用戶可以選擇按天或者按周為時間單位來查看系統的穩定性曲線表,如果系統近日沒出過什麼狀況, 那麼按周來查看會比較合適。觀察圖中的曲線可以發現,在某段時間內,系統遇到些問題,可靠性指數曲線呈下降的趨勢,並且在這段時間系統遇到了三次問題和一次警告,在下方的列表中可以查看詳細的問題信息。

相關閱讀:系統故障導致死機怎麼解決

1、病毒原因造成電腦頻繁死機

由於此類原因造成該故障的現象比較常見,當計算機感染病毒後,主要表現在以下幾個方面:

①系統啟動時間延長;

②系統啟動時自動啟動一些不必要的程序;

③無故死機

④屏幕上出現一些亂碼。

其表現形式層出不窮,由於篇幅原因就介紹到此,在此需要一並提出的是,倘若因為病毒損壞了一些系統文件,導致系統工作不穩定,我們可以在安全模式下用系統文件檢查器對系統文件予以修復。

2、由於某些元件熱穩定性不良造成此類故障(具體表現在CPU、電源、內存條、主板)

對此,我們可以讓電腦運行一段時間,待其死機後,再用手觸摸以上各部件,倘若溫度太高則說明該部件可能存在問題,我們可用替換法來診斷。值得注意的是在安裝CPU風扇時最好能塗一些散熱硅脂,但我在某些組裝的電腦上卻是很難見其蹤影,實踐證明,硅脂能降低溫度5—10度左右,特別是P Ⅲ 的電腦上,倘若不塗散熱硅脂,計算機根本就不能正常工作,曾遇到過一次此類現象。該機主要配置如下:磐英815EP主板、PⅢ733CPU、133外頻的128M內存條,當該機組裝完後,頻繁死機,連Windows系統都不能正常安裝,但是更換賽揚533的CPU後,故障排除,懷疑主板或CPU有問題,但更換同型號的主板、CPU後該故障也不能解決。後來由於發現其溫度太高,在CPU上塗了一些散熱硅脂,故障完全解決。實踐證明在賽揚533以上的CPU上必須要塗散熱硅脂,否則極有可能引起死機故障。

3、由於各部件接觸不良導致計算機頻繁死機

此類現象比較常見,特別是在購買一段時間的電腦上。由於各部件大多是靠金手指與主板接觸,經過一段時間後其金手指部位會出現氧化現象,在拔下各卡後會發現金手指部位已經泛黃,此時,我們可用橡皮擦來回擦拭其泛黃處來予以清潔。

4、由於硬體之間不兼容造成電腦頻繁死機

此類現象常見於顯卡與其它部件不兼容或內存條與主板不兼容,例如SIS的顯卡,當然其它設備也有可能發生不兼容現象,對此可以將其它不必要的設備如Modem、音效卡等設備拆下後予以判斷。

5、軟體沖突或損壞引起死機

此類故障,一般都會發生在同一點,對此可將該軟體卸掉來予以解決。

❻ Linux怎麼測試USB口讀寫速度

1、先熟悉兩個特殊的設備:
(1)/dev/null:回收站、無底洞。
(2)/dev/zero:產生字元。
2、測試磁碟寫能力
代碼如下:
time dd if=/dev/zero of=/testw.dbf bs=4k count=100000
因為/dev//zero是一個偽設備,它只產生空字元流,對它不會產生IO,所以,IO都會集中在of文件中,of文件只用於寫,所以這個命令相當於測試磁碟的寫能力。命令結尾添加oflag=direct將跳過內存緩存,添加oflag=sync將跳過hdd緩存。
3、測試磁碟讀能力
代碼如下:
time dd if=/dev/sdb of=/dev/null bs=4k
因為/dev/sdb是一個物理分區,對它的讀取會產生IO,/dev/null是偽設備,相當於黑洞,of到該設備不會產生IO,所以,這個命令的IO只發生在/dev/sdb上,也相當於測試磁碟的讀能力。(Ctrl+c終止測試)
4、測試同時讀寫能力
代碼如下:
time dd if=/dev/sdb of=/testrw.dbf bs=4k
在這個命令下,一個是物理分區,一個是實際的文件,對它們的讀寫都會產生IO(對/dev/sdb是讀,對/testrw.dbf是寫),假設它們都在一個磁碟中,這個命令就相當於測試磁碟的同時讀寫能力。

❼ 怎樣寫linux下的USB設備驅動程序

寫一個USB的驅動程序最 基本的要做四件事:驅動程序要支持的設備、注冊USB驅動程序、探測和斷開、提交和控制urb(USB請求塊)
驅動程序支持的設備:有一個結構體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,
};
探測和斷開:當 一個設備被安裝而USB核心認為該驅動程序應該處理時,探測函數被調用,探測函數檢查傳遞給它的設備信息,確定驅動程序是否真的適合該設備。當驅動程序因 為某種原因不應該控制設備時,斷開函數被調用,它可以做一些清理工作。探測回調函數中,USB驅動程序初始化任何可能用於控制USB設備的局部結構體,它 還把所需的任何設備相關信息保存到一個局部結構體中,
提交和控制urb:當驅動程序有數據要發送到USB設備時(大多數情況是在驅動程序的寫函數中),要分配一個urb來把數據傳輸給設備:
/* 創建一個urb,並且給它分配一個緩存*/
urb = usb_alloc_urb(0, GFP_KERNEL);
if (!urb) {
retval = -ENOMEM;
goto error;
}
當urb被成功分配後,還要創建一個DMA緩沖區來以高效的方式發送數據到設備,傳遞給驅動程序的數據要復制到這塊緩沖中去:
buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma);
if (!buf) {
retval = -ENOMEM;
goto error;
}

if (_from_user(buf, user_buffer, count)) {
retval = -EFAULT;
goto error;
}
當數據從用戶空間正確復制到局部緩沖區後,urb必須在可以被提交給USB核心之前被正確初始化:
/* 初始化urb */
usb_fill_bulk_urb(urb, dev->udev,
usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
buf, count, skel_write_bulk_callback, dev);
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
然後urb就可以被提交給USB核心以傳輸到設備了:
/* 把數據從批量OUT埠發出 */
retval = usb_submit_urb(urb, GFP_KERNEL);
if (retval) {
err("%s - failed submitting write urb, error %d", __FUNCTION__, retval);
goto error;
}
當urb被成功傳輸到USB設備之後,urb回調函數將被USB核心調用,在我們的例子中,我們初始化urb,使它指向skel_write_bulk_callback函數,以下就是該函數:
static void skel_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_skel *dev;

dev = (struct usb_skel *)urb->context;

if (urb->status &&
!(urb->status == -ENOENT ||
urb->status == -ECONNRESET ||
urb->status == -ESHUTDOWN)) {
dbg("%s - nonzero write bulk status received: %d",
__FUNCTION__, urb->status);
}

/* 釋放已分配的緩沖區 */
usb_buffer_free(urb->dev, urb->transfer_buffer_length,
urb->transfer_buffer, urb->transfer_dma);
}
有時候USB驅動程序只是要發送或者接收一些簡單的數據,驅動程序也可以不用urb來進行數據的傳輸,這是里涉及到兩個簡單的介面函數:usb_bulk_msg和usb_control_msg ,在這個USB框架程序里讀操作就是這樣的一個應用:
/* 進行阻塞的批量讀以從設備獲取數據 */
retval = usb_bulk_msg(dev->udev,
usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
dev->bulk_in_buffer,
min(dev->bulk_in_size, count),
&count, HZ*10);

/*如果讀成功,復制到用戶空間 */
if (!retval) {
if (_to_user(buffer, dev->bulk_in_buffer, count))
retval = -EFAULT;
else
retval = count;
}
usb_bulk_msg介面函數的定義如下:
int usb_bulk_msg(struct usb_device *usb_dev,unsigned int pipe,
void *data,int len,int *actual_length,int timeout);
其參數為:
struct usb_device *usb_dev:指向批量消息所發送的目標USB設備指針。
unsigned int pipe:批量消息所發送目標USB設備的特定端點,此值是調用usb_sndbulkpipe或者usb_rcvbulkpipe來創建的。
void *data:如果是一個OUT端點,它是指向即將發送到設備的數據的指針。如果是IN端點,它是指向從設備讀取的數據應該存放的位置的指針。
int len:data參數所指緩沖區的大小。
int *actual_length:指向保存實際傳輸位元組數的位置的指針,至於是傳輸到設備還是從設備接收取決於端點的方向。
int timeout:以Jiffies為單位的等待的超時時間,如果該值為0,該函數一直等待消息的結束。
如果該介面函數調用成功,返回值為0,否則返回一個負的錯誤值。
usb_control_msg介面函數定義如下:
int usb_control_msg(struct usb_device *dev,unsigned int pipe,__u8 request,__u8requesttype,__u16 value,__u16 index,void *data,__u16 size,int timeout)
除了允許驅動程序發送和接收USB控制消息之外,usb_control_msg函數的運作和usb_bulk_msg函數類似,其參數和usb_bulk_msg的參數有幾個重要區別:
struct usb_device *dev:指向控制消息所發送的目標USB設備的指針。
unsigned int pipe:控制消息所發送的目標USB設備的特定端點,該值是調用usb_sndctrlpipe或usb_rcvctrlpipe來創建的。
__u8 request:控制消息的USB請求值。
__u8 requesttype:控制消息的USB請求類型值。
__u16 value:控制消息的USB消息值。
__u16 index:控制消息的USB消息索引值。
void *data:如果是一個OUT端點,它是指身即將發送到設備的數據的指針。如果是一個IN端點,它是指向從設備讀取的數據應該存放的位置的指針。
__u16 size:data參數所指緩沖區的大小。
int timeout:以Jiffies為單位的應該等待的超時時間,如果為0,該函數將一直等待消息結束。
如果該介面函數調用成功,返回傳輸到設備或者從設備讀取的位元組數;如果不成功它返回一個負的錯誤值。
這兩個介面函數都不能在一個中斷上下文中或者持有自旋鎖的情況下調用,同樣,該函數也不能被任何其它函數取消,使用時要謹慎。
我們要給未知的USB設備寫驅動程序,只需要把這個框架程序稍做修改就可以用了,前面我們已經說過要修改製造商和產品的ID號,把0xfff0這兩個值改為未知USB的ID號。
#define USB_SKEL_VENDOR_ID 0xfff0
#define USB_SKEL_PRODUCT_ID 0xfff0
還 有就是在探測函數中把需要探測的介面端點類型寫好,在這個框架程序中只探測了批量(USB_ENDPOINT_XFER_BULK)IN和OUT端點,可 以在此處使用掩碼(USB_ENDPOINT_XFERTYPE_MASK)讓其探測其它的端點類型,驅動程序會對USB設備的每一個介面進行一次探測, 當探測成功後,驅動程序就被綁定到這個介面上。再有就是urb的初始化問題,如果你只寫簡單的USB驅動,這塊不用多加考慮,框架程序里的東西已經夠用 了,這里我們簡單介紹三個初始化urb的輔助函數:
usb_fill_int_urb :它的函數原型是這樣的:
void usb_fill_int_urb(struct urb *urb,struct usb_device *dev,
unsigned int pipe,void *transfer_buff,
int buffer_length,usb_complete_t complete,
void *context,int interval);
這個函數用來正確的初始化即將被發送到USB設備的中斷端點的urb。
usb_fill_bulk_urb :它的函數原型是這樣的:
void usb_fill_bulk_urb(struct urb *urb,struct usb_device *dev,
unsigned int pipe,void *transfer_buffer,
int buffer_length,usb_complete_t complete)
這個函數是用來正確的初始化批量urb端點的。
usb_fill_control_urb :它的函數原型是這樣的:
void usb_fill_control_urb(struct urb *urb,struct usb_device *dev,unsigned int pipe,unsigned char *setup_packet,void *transfer_buffer,int buffer_length,usb_complete_t complete,void *context);
這個函數是用來正確初始化控制urb端點的。
還有一個初始化等時urb的,它現在還沒有初始化函數,所以它們在被提交到USB核心前,必須在驅動程序中手工地進行初始化,可以參考內核源代碼樹下的/usr/src/~/drivers/usb/media下的konicawc.c文件。

❽ Linux 系統下可以用U盤嗎

可以,需要掛載。

插好usb之後
先用disk -l命令看一下你的usb設備在linux下名稱是什麼,命令列出的表格裡面有fat格式的就是你的usb設備名字,可能是sda1,或者sda2什麼的
假設是sda1的話


mount -t vfat /dev/sda1(注意這里是你usb在linux設備名) /mnt/

就可以了。

然後進入mnt目錄就是你usb內容了。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:379
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:613
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372