存儲介質的數據讀取方法和設備的制造方法
【專利說明】存儲介質的數據讀取方法和設備
[0001]本發明申請是申請日為2012年7月10日、申請號為201210237930.X、發明名稱為"存儲介質的數據讀取方法和設備"的發明申請的分案申請。
技術領域
[0002]本發明涉及數據存儲領域,尤其涉及一種存儲介質的數據讀取方法和設備。
【背景技術】
[0003]作為一個開源代碼并且免費的操作系統,Linux系統已經廣泛應用在各種嵌入式領域。通用串行總線(Univeral Serial Bus,USB)由于其高速的傳輸速度以及在行業內的通用性,已經成為嵌入式設備與其他設備通信的極為重要的方法。
[0004]比如,使用Linux操作系統的手持設備(例如手機)通過USB與上位機(比如PC機)連接后,可以高速的傳遞數據,又可以用來充電等,使手持設備可以發揮存儲設備,無線網卡以及調試等多種功能。
[0005]目前,手持設備通過USB與PC機連接后,向PC機傳遞數據的流程大致如下:
[0006]步驟一:PC機向手持設備發送數據讀取指令;
[0007]步驟二:手持設備接收到數據讀取指令后,對該數據讀取指令進行解析,得到用來存儲數據的存儲介質(例如TF卡)的地址信息等;
[0008]步驟三:手持設備調用fat文件系統,由于fat文件系統管理有手持設備內各存儲介質的信息,因此fat文件系統可以根據解析得到的地址信息找到對應的存儲介質,并通過執行讀操作讀取存儲介質中的數據,將讀取到的數據送到USB ;USB將數據傳遞給PC機;
[0009]步驟四:PC機接收到USB傳遞過來的數據后,執行對該數據的顯示操作等。
[0010]將使用Linux操作系統的手持設備中能夠通過USB向PC機傳遞數據的存儲介質,稱為Linux下的USB掛載介質。對Linux下的USB掛載介質的要求是,能透過fat文件系統對該介質進行訪問,這就對存儲介質本身增加了限制,對于通常用于嵌入式設備的其他存儲介質來說,比如nand flash,由于其存儲結構等的限制,無法加載fat文件系統,因而無法將該存儲介質作為USB掛載介質與PC機進行通信。
【發明內容】
[0011]本發明實施例提供一種存儲介質的數據讀取方法和設備,用于解決手持設備中的存儲介質由于無法加載fat文件系統而無法作為USB掛載介質與上位機進行通信的問題。
[0012]本發明實施例提供了一種存儲介質的數據讀取方法,包括:
[0013]手持設備通過通用串行總線USB與上位機相連,在接收到所述上位機的查詢命令后,將存儲有預制內容的塊的信息、以及存儲介質頁的信息發送給所述上位機;
[0014]所述手持設備接收到所述上位機的讀取命令,根據所述塊的信息讀取存儲的預制內容,并將所述預制內容通過USB發送給上位機;
[0015]所述手持設備確定傳輸給所述上位機的數據量達到根據所述頁的信息生成的需要讀取的數據量,向所述上位機發送讀操作完成命令。
[0016]由于本發明實施例的手持設備在通過USB與上位機連接后,在接收到上位機的查詢命令后,將該塊的信息、頁的信息上報給上位機,在接收到上位機的讀取命令后,能夠根據塊的信息,讀取該塊中存儲的預制內容,并將讀取的預制內容通過USB傳輸給上位機。因此,本發明實施例中實現了上位機對手持設備中的存儲介質的讀取操作,并且該過程中不需要加載fat文件系統,從而解決了手持設備中的存儲介質由于無法加載fat文件系統而無法作為USB掛載介質與上位機進行通信的問題。
[0017]可選的,將所述預制內容通過USB通過USB發送給上位機之后,還包括:
[0018]所述手持設備確定傳輸給所述上位機的數據量未達到根據所述頁的信息生成的需要讀取的數據量,繼續執行根據所述塊的信息讀取存儲的預制內容的步驟。
[0019]可選的,所述手持設備通過通用串行總線USB與上位機相連之后,在接收到所述上位機的查詢命令之前,還包括:
[0020]所述手持設備的內核層向用戶層上報USB插入事件,用戶層接收到該USB插入事件后,從維護的mtd分區列表中讀取存儲有預制內容的mtd分區的地址,并將讀取到的mtd分區的地址發送給內核層;
[0021]所述手持設備的內核層接收用戶層發送的所述mtd分區的地址,執行對該地址對應的mtd分區的讀操作,得到所述mtd分區中存儲有所述預制內容的塊的信息。
[0022]可選的,所述手持設備根據所述塊的信息讀取存儲的預制內容,具體包括:
[0023]所述手持設備根據所述塊的信息生成邏輯塊地址LBA,并將所述LBA轉換成存儲介質上的地址偏移量,確定所述地址偏移量所指向的所述mtd分區中的塊,讀取確定的塊中存儲的預制內容。
[0024]可選的,所述手持設備通過USB與上位機連接之前,還包括:
[0025]所述手持設備獲取該手持設備中存儲介質中存儲有預制內容的mtd分區的地址,通過mtd設備的壞塊管理函數對該地址對應的分區進行掃描,確定mtd分區中的壞塊,并將壞塊的信息記錄在靜態數組中;
[0026]所述手持設備在確定地址偏移量所指向的所述mtd分區中的塊之后,讀取確定的塊中存儲的預制內容之前,還包括:
[0027]所述手持設備根據記錄的壞塊的信息,確定所述地址偏移量所指向的塊不為壞塊。
[0028]可選的,若所述手持設備確定所述地址偏移量所指向的塊為壞塊,則所述手持設備在確定所述地址偏移量所指向的塊為壞塊之后,還包括:
[0029]所述手持設備將當前的地址偏移量更新為當前塊的下一個好塊的地址偏移量后,讀取更新后的地址偏移量所指向的塊中一個頁大小的預制內容,并將讀取的預制內容通過USB傳輸給上位機。
[0030]本發明實施例提供了一種手持設備,包括:
[0031]信息上報單元,用于通過通用串行總線USB與上位機相連,在接收到所述上位機的查詢命令后,將存儲有預制內容的塊的信息、以及存儲介質頁的信息發送給所述上位機;
[0032]數據讀取上報單元,用于接收到所述上位機的讀取命令,根據所述塊的信息讀取存儲的預制內容,并將所述預制內容通過USB發送給上位機;以及在確定傳輸給所述上位機的數據量達到根據所述頁的信息生成的需要讀取的數據量后,向所述上位機發送讀操作完成命令。
[0033]可選的,所述數據讀取上報單元,還用于:
[0034]將所述預制內容通過USB通過USB發送給上位機之后,確定傳輸給所述上位機的數據量未達到根據所述頁的信息生成的需要讀取的數據量,繼續執行根據所述塊的信息讀取存儲的預制內容的步驟。
[0035]可選的,還包括:
[0036]內核層單元,用于通過通用串行總線USB與上位機相連之后,在接收到所述上位機的查詢命令之前,在該手持設備通過通用串行總線USB與上位機連接后,向用戶層單元上報USB插入事件;接收用戶層單元發來的mtd分區的地址,執行對該地址對應的mtd分區的讀操作,得到所述mtd分區中存儲有所述預制內容的塊的信息;
[0037]用戶層單元,用于接收到所述USB插入事件后,從維護的mtd分區列表中讀取存儲有預制內容的mtd分區的地址,并將讀取到的mtd分區的地址發送給內核層單元。
[0038]可選的,所述數據讀取上報單元還用于:
[0039]所述手持設備根據所述塊的信息生成邏輯塊地址LBA,并將所述LBA轉換成存儲介質上的地址偏移量,確