2014-02-10 48 views
0

我正在創建轉儲路由器閃存的應用程序(類似於brn-tool)。路由器的閃存可以從它已經可以通過串行電纜訪問的引導裝載程序中卸載。使用C從路由器中轉儲閃存使用C

到目前爲止創建的應用程序可以抓取10000個字節(引導加載程序在一次掃描中返回的最大字節數)。

我無法獲取其餘的閃存字節。

如前所述,可以通過選擇相應的選項並輸入要讀取的字節量,從引導加載程序菜單中讀取字節。代碼如下。

int ReturnByte(int FileDescriptor, char * StartAddress) 
{ 

// Create the Variable to hold the Start Address in Hexadecimal Notation 

char ModdedStartAddress[10]; 

// Convert the Decimal Input to Hexadecimal 

sprintf(ModdedStartAddress,"%X", (unsigned int)strtol(StartAddress, NULL, 10)); 

// Append a \r to simulate an Enter Press 

ModdedStartAddress[strlen(ModdedStartAddress)] = '\r'; 

// Go inside the Read Menu 

char Character = 'R'; 

write(FileDescriptor, &Character, 1); 

// Input the Starting Read Address 

write(FileDescriptor,ModdedStartAddress, sizeof(ModdedStartAddress) - 1); 

// Set the Data Length to 1 Byte 

Character = '3'; 

write(FileDescriptor, &Character, 1); 

// Set the Read Count to 10000 

write(FileDescriptor, "10000\r", sizeof("10000")); 

return 10000; 


} 

當運行一次,該方法正常工作,並正確輸出10000字節。

但是,爲了創建完整的Flash轉儲,上面的方法必須用不同的起始地址多次運行。當該方法運行多次時,菜單等的順序不會在提示中執行,而是在設備返回內存數據時運行。

的菜單是如何工作的概述如下:

Read Menu (Option R) 
    Start Address to Read 
    Data Length (Set to 3 for 1 Byte) 
    Read Count (Set to a maximum of 10000) 
     *The Router starts outputting a hex dump* 
Back to Menu 

我試圖找出天氣有一種方法來檢查所有的數據已經從串口發送,以便重新 - 運行該方法。

我正在使用termios庫來連接串口。

謝謝 安德魯·博格

回答

0

林不知道即時得到你的問題是正確的,但我會嘗試給它一個去。

如果您要求特定長度/大小的數據(讀取計數(菜單選項)),那麼當程序停止獲取字節流時,只需計算您編程的字節數,並將其與數字進行比較的字節你再次要求你的讀取計數。

希望我幫忙,如果我都錯了,請讓我知道! ;)

+0

我遇到的問題是應用程序在路由器發送所有字節之前重新發送獲取內存字節序列。 – Andrew

+0

再次嗨。 你可以上傳你所有的源代碼到pastebin或其他類似的網站嗎?我/我們處理您的問題會更容易。 – MrSykkox