0

我正在创建一个转储路由器闪存的应用程序(类似于 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 库来连接串口。

谢谢你,安德鲁·博格

4

1 回答 1

0

我不确定我的问题是否正确,但我会试试看。

如果您要求特定长度/大小的数据(读取计数(菜单选项)),那么当您的程序停止获取字节流时,您只需计算程序获得的字节数,并将其与您询问的字节数进行比较再次为您的阅读计数。

希望对我有帮助,如果我都错了,请告诉我!;)

于 2014-02-10T08:49:04.813 回答