一種希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別涉及一種希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法。
【背景技術(shù)】
[0002] 隨著硬盤(pán)的發(fā)展,硬盤(pán)所需的固件內(nèi)容越來(lái)越龐大,硬盤(pán)固件的管理越來(lái)越復(fù)雜。 老舊的固件管理方式只能描述最多40多個(gè)固件模塊左右,已經(jīng)不能滿足大容量硬盤(pán)的固 件變化和管理了。隨之產(chǎn)生了一種新的固件管理方式一一系統(tǒng)文件方式。
[0003]目前還沒(méi)有能完整的、系統(tǒng)化的針對(duì)硬盤(pán)固件系統(tǒng)文件進(jìn)行讀寫(xiě)的方法。
[0004] 本發(fā)明涉及到的部分專(zhuān)業(yè)術(shù)語(yǔ):
[0005] 固件區(qū)地圖信息:是指希捷硬盤(pán)尋址固件的索引參數(shù)。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明針對(duì)現(xiàn)有技術(shù)的缺陷,提供了一種希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法,能有效 的解決上述現(xiàn)有技術(shù)存在的問(wèn)題。
[0007] 為了實(shí)現(xiàn)以上發(fā)明目的,本發(fā)明采取的技術(shù)方案如下:
[0008] -種希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法,包括12代以上希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方 法和12代以下希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法;
[0009] 所述12代以上硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法包括以下步驟:
[0010] SlOl :獲取12代以上希捷硬盤(pán)固件區(qū)地圖信息,在T級(jí)模式下輸入y指令,接收指 令回顯信息;
[0011] S102 :解析12代以上硬盤(pán)希捷硬盤(pán)固件區(qū)地圖信息內(nèi)容,具體為將接收到的指令 回顯信息,按照卷號(hào)、文件ID、文件描述、大小、邏輯UBA地址、copy數(shù),選擇0卷參數(shù)和3卷 參數(shù)以及第4卷大小為1200字節(jié)的特殊值,組成硬盤(pán)固件區(qū)地圖信息;
[0012] S103 :對(duì)解析的12代以上硬盤(pán)希捷硬盤(pán)固件區(qū)內(nèi)容進(jìn)行讀寫(xiě)操作。
[0013] 作為優(yōu)選,所述12代以下硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法包括以下步驟:
[0014] S201 :12代以下的硬盤(pán)需在1級(jí)模式下,從緩存信息的起始地址"6000000"作為 開(kāi)始,提取該數(shù)據(jù);再向后依次偏移"0x800",偏移次數(shù)為1024次,偏移一次提取一次對(duì)應(yīng) 位置的數(shù)據(jù);
[0015] S202 :從S201獲取的數(shù)據(jù)中以12字節(jié)為一組搜索特征為"000000FC"的0卷文件 描述符;
[0016] S203 :搜索到0卷文件描述符后,以12字節(jié)為一組向后檢索,并取出每組頭部4字 節(jié)進(jìn)行判斷,判斷是否為連續(xù)且邏輯增大的文件描述符頭部特征;如果沒(méi)有連續(xù),則拋棄該 組數(shù)據(jù),繼續(xù)向下搜索直至找到三個(gè)連續(xù)的0卷文件描述符特征,并作為有效值提??;
[0017] S204 :以S203中有效值為基準(zhǔn)向后檢索卷3文件描述符特征;
[0018] S205 :搜索到3卷文件描述符后,以12字節(jié)為一組向后檢索,并取出每組頭部4字 節(jié)進(jìn)行判斷,判斷是否為連續(xù)且邏輯增大的文件描述符頭部特征;如果沒(méi)有連續(xù),則拋棄該 組數(shù)據(jù),繼續(xù)向下搜索直至找到三個(gè)連續(xù)的O卷文件描述符特征,并作為有效值提取;
[0019] S206 :以S205中有效值為基準(zhǔn)向后檢索卷4文件描述符特征;搜索大小為0x1200 字節(jié)的4卷文件描述符,并作為有效值提??;。
[0020] S207 :將S203、S205、S206所提取的數(shù)據(jù)組成硬盤(pán)固件區(qū)地圖信息;
[0021] S208 :對(duì)解析的12代以下硬盤(pán)希捷硬盤(pán)固件區(qū)內(nèi)容進(jìn)行讀寫(xiě)操作。
[0022] 作為優(yōu)選,所述S103和S208中讀取的具體步驟如下:
[0023] S301 :找到Default Diag Rd Buf字段對(duì)應(yīng)的DBA后面的讀緩存地址;
[0024] S302 :選擇ASCII模式輸出;
[0025] S303 :輸入要讀取的系統(tǒng)文件的UBA地址,以及需要讀取的系統(tǒng)文件的大小,以扇 區(qū)為單位;
[0026] S304 :回到T級(jí)模式,選擇原始二進(jìn)制模式輸出;
[0027] S305 :進(jìn)入1級(jí)模式;
[0028] S306 :輸入第S301獲取的讀緩存地址,并獲取一個(gè)扇區(qū)的數(shù)據(jù)以字節(jié)為單位;
[0029] S307 :返回到上位機(jī),完成。
[0030] 作為優(yōu)選,所述S103和S208中寫(xiě)入的具體步驟如下:
[0031] S401 :進(jìn)入T級(jí)模式,選擇以ASCII模式輸出;
[0032] S402 :找到Default Diag Wrt Buf字段對(duì)應(yīng)的DBA后面的寫(xiě)緩存地址;
[0033] S403 :再次以ASCII模式輸出;
[0034] S404 :指定下載文件字節(jié)為"0x200",同時(shí)獲取一個(gè)下載文件的地址。找到 DownFile字段對(duì)應(yīng)的DBA后面的緩存地址;
[0035] S405 :進(jìn)入2級(jí)模式;
[0036] S406 :將下載文件拷貝到寫(xiě)緩存的地址;
[0037] S407:進(jìn)入 A 級(jí);
[0038] S408 :將緩存中的數(shù)據(jù)寫(xiě)入到指定UBA地址中。
[0039] 作為優(yōu)選,若上述系統(tǒng)文件讀寫(xiě)方式不能完成特殊系統(tǒng)文件的讀寫(xiě),則執(zhí)行以下 讀寫(xiě)方式。
[0040] 讀取的具體步驟如下:
[0041] S501:轉(zhuǎn)到T級(jí)模式;
[0042] S502 :以系統(tǒng)文件ID,系統(tǒng)文件所在卷,系統(tǒng)文件的COPY數(shù)作為讀取
[0043] 參數(shù),對(duì)系統(tǒng)文件進(jìn)行讀??;
[0044] S503 :獲取緩存信息;
[0045] S504 :連續(xù)獲取保存。
[0046] 作為優(yōu)選,所述寫(xiě)入的具體步驟如下:
[0047] S601 :按照系統(tǒng)文件ID,系統(tǒng)文件所在卷,系統(tǒng)文件的COPY數(shù)對(duì)系統(tǒng)文件進(jìn)行回 寫(xiě)操作;
[0048] S602 :對(duì)寫(xiě)入硬盤(pán)的系統(tǒng)文件字節(jié)進(jìn)行CRC16校驗(yàn)。
[0049] 與現(xiàn)有技術(shù)相比本發(fā)明的優(yōu)點(diǎn)在于:可以兼容12代以上和以下的希捷硬盤(pán)進(jìn)行 固件地圖信息獲取,通過(guò)兩種不同的方式進(jìn)行讀取和寫(xiě)入操作,增加了成功率。可描述更多 的固件模塊,并且可清楚的指出卷號(hào)、文件ID、文件描述、大小、邏輯UBA地址、copy數(shù)。
【具體實(shí)施方式】
[0050] 為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下舉實(shí)施例,對(duì)本發(fā)明做進(jìn) 一步詳細(xì)說(shuō)明。
[0051] -種希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法,包括12代以上希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方 法和12代以下希捷硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法;
[0052] 所述12代以上硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法包括以下步驟:
[0053] SlOl :獲取12代以上希捷硬盤(pán)固件區(qū)地圖信息,在T級(jí)模式下輸入y指令,接收指 令回顯信息;
[0054] 調(diào)用函數(shù):
[0055] UARTO_Sendchar(OxlA);
[0056] UART0_SendBuf("y");
[0057] S102 :解析12代以上硬盤(pán)希捷硬盤(pán)固件區(qū)地圖信息內(nèi)容,具體為將接收到的指令 回顯信息,按照卷號(hào)、文件ID、文件描述、大小、邏輯UBA地址、copy數(shù),選擇0卷參數(shù)和3卷 參數(shù)以及第4卷大小為1200字節(jié)的特殊值,組成硬盤(pán)固件區(qū)地圖信息;
[0058] S103 :對(duì)解析的12代以上硬盤(pán)希捷硬盤(pán)固件區(qū)內(nèi)容進(jìn)行讀寫(xiě)操作。
[0059] 作為優(yōu)選,所述12代以下硬盤(pán)系統(tǒng)文件的讀寫(xiě)方法包括以下步驟:
[0060] S201 :12代以下的硬盤(pán)需在1級(jí)模式下,從緩存信息的起始地址"6000000"作為 開(kāi)始,提取該數(shù)據(jù);再向后依次偏移"0x800",偏移次數(shù)為1024次,偏移一次提取一次對(duì)應(yīng) 位置的數(shù)據(jù);
[0061] S202 :從S201獲取的數(shù)據(jù)中以12字節(jié)為一組搜索特征為"000000FC"的0卷文件 描述符;
[0062] S203 :搜索到0卷文件描述符后,以12字節(jié)為一組向后檢索,并取出每組頭部4字 節(jié)進(jìn)行判斷,判斷是否為連續(xù)且邏輯增大的文件描述符頭部特征;如果沒(méi)有連續(xù),則拋棄該 組數(shù)據(jù),繼續(xù)向下搜索直至找到三個(gè)連續(xù)的〇卷文件描述符特征,并作為有效值提?。?br>[0063] 具體的如果找到0卷文件描述符特征,則與FEF007FF進(jìn)行"與操作",得到一個(gè) 值;
[0064] 例如:
[0065] FC001203and FEF007FF = FC000203 ;
[0066] FC002204and FEF007FF = FC000204 ;
[0067] FC003205and FEF007FF = FC000205 ;
[0068] 上述為連續(xù)的0卷文件描述符特征,文件描述符,必須是邏輯遞增的,作為有效值 提取。
[0069] S204 :以S203中有效值為基準(zhǔn)向后檢索卷3文件描述符特征;
[0070] S205 :和S203方法相同,搜索到3卷文件描述符后,以12字節(jié)為一組向后檢索,并 取出每組頭部4字節(jié)進(jìn)行判斷,判斷是否為連續(xù)且邏輯增大的文件描述符頭部特征;如果 沒(méi)有連續(xù),則拋棄該組數(shù)據(jù),繼續(xù)向下搜索直至找到三個(gè)連續(xù)的0卷文件描述符特征,并作 為有效值提取;
[0071] S206 :以S205中有效值為基準(zhǔn)向后檢索卷4文件描述符特征;搜索大小為0x1200 字節(jié)的4卷文件描述符,并作為有效值提??;。
[0072] S207 :將S203、S205、S206所提取的數(shù)據(jù)組成硬盤(pán)固件區(qū)地圖信息;
[0073] S208 :對(duì)解析的12代以下硬盤(pán)希捷硬盤(pán)固件區(qū)內(nèi)容進(jìn)行讀寫(xiě)操作。
[0074] 作為優(yōu)選,所述S103和S208中讀取的具體步驟如下:
[0075] S301 :找到Default Diag Rd Buf字段對(duì)應(yīng)的DBA后面的讀緩存地址;
[0076] 調(diào)用函數(shù):
[0077] UART0_SendBuf("/2");
[0078] UART0_SendBuf("A0");
[0079] UART0_SendBuf (" ?");
[0080] S302 :選擇ASCII模式輸出;
[0081] 調(diào)用函數(shù):
[0082] UARTO_Sendchar(OxlA);
[0083] UART0_SendBuf("03");
[0084] S303 :輸入要讀取的系統(tǒng)文件的UBA地址,以及需要讀取的系統(tǒng)文件的大小,以扇 區(qū)為單位;
[0085] 調(diào)用函數(shù):
[0086] UART0_SendBuf ("/A");
[0087] UART0_SendBuf (〃R(UBA 地址),(系統(tǒng)文件大?。?,,2〇");
[0088] S304 :回到T級(jí)模式,選擇原始二進(jìn)制模式輸出;
[0089] 調(diào)用函數(shù):
[0090] UART0_SendBuf("01");
[0091] S305:進(jìn)入1級(jí)模式;
[0092] 調(diào)用函數(shù):
[0093] UARTO_SendBuf("/r);
[0094] S306 :輸入第S301獲取的讀緩存地址,并獲取一個(gè)扇區(qū)的數(shù)據(jù)以字節(jié)為單位;
[0095] 調(diào)用函數(shù):
[0096] UART0_SendBuf (〃D(讀緩存地址),,,(讀取緩存內(nèi)容的大?。?,Γ);
[0097] S307 :返回到上位機(jī),完成。
[0098] 作為優(yōu)選,所述S103和S208中寫(xiě)入的具體步驟如下:
[0099] S401 :進(jìn)入T級(jí)模式,選擇以ASCII模式輸出;
[0100] 調(diào)用函數(shù):
[0101] UARTO_Sendchar (OxlA);
[0102] UART0_SendBuf("03");
[0103] S402 :找到Default Diag Wrt Buf字段對(duì)應(yīng)的DBA后面的寫(xiě)緩存地址;
[0104] 調(diào)用函數(shù):
[0105] UART0_SendBuf("/2");
[0106] UART0_SendBuf("A0");
[0107] UART0_SendBuf (" ?");
[0108] S403 :再次以ASCII模式輸出;
[0109] 調(diào)用函數(shù):
[0110] UARTO_Sendchar (OxlA);
[0111] UART0_SendBuf("03");
[0112] S404 :