首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C++从路由器转储闪存

使用C++从路由器转储闪存
EN

Stack Overflow用户
提问于 2014-02-10 15:42:05
回答 1查看 811关注 0票数 0

我正在创建一个转储路由器闪存的应用程序(类似于brn-tool)。路由器的闪存可以从它的引导加载程序中转储,我已经可以通过串行电缆访问它。

到目前为止,创建的应用程序可以抓取10000字节(引导加载程序在一次扫描中返回的最大字节数)。

我在获取闪存的其余字节时遇到了问题。

如前所述,通过选择相应的选项并输入要读取的字节数,可以从引导加载程序菜单中读取字节。代码如下。

代码语言:javascript
复制
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转储,必须使用不同的起始地址多次运行上述方法。当该方法多次运行时,菜单等的序列在提示符内不会执行,而是在设备返回内存数据时运行。

菜单的工作原理概述如下:

代码语言:javascript
复制
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库来连接串行端口。

谢谢,安德鲁·博格

EN

回答 1

Stack Overflow用户

发布于 2014-02-10 16:49:05

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

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

希望我能帮上忙,如果我错了,请让我知道!;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21671508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档