我正在創建轉儲路由器閃存的應用程序(類似於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庫來連接串口。
謝謝 安德魯·博格
我遇到的問題是應用程序在路由器發送所有字節之前重新發送獲取內存字節序列。 – Andrew
再次嗨。 你可以上傳你所有的源代碼到pastebin或其他類似的網站嗎?我/我們處理您的問題會更容易。 – MrSykkox