我正在创建一个转储路由器闪存的应用程序(类似于 brn-tool)。路由器的闪存可以从它的引导加载程序中转储,我已经可以通过串行电缆访问它。
到目前为止,创建的应用程序可以抓取 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 Dump,上述方法必须以不同的起始地址多次运行。多次运行该方法时,在提示符内不执行菜单等的序列,而是在设备返回内存数据时运行。
菜单如何工作的概述如下:
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 库来连接串口。
谢谢你,安德鲁·博格