请教xtang,QNX系统反复重启问题

我使用的QNX是6.3.0版,硬件平台是x86,IDE接口电子盘,存储芯片采用的nand flash型。
产品经过一段时间运行后,发生的现象是:启动到引导界面启动后显示Hit Esc for .altboot… 然后就重启动了,且反复发生。将.boot文件拷贝至其他电子盘时,也发生相同现象。
因此怀疑是电子盘中的.boot文件损坏,导致系统复位。但是用dcheck扫描电子盘无发现坏块。

请问xtang,
重启是否是因为加载内核时出现错误,系统处于保护,自动发生的重启呢?
.boot被改写的原因是什么?产品使用过程中,还发现电子盘出现多处坏块,请问坏块发生的原因有哪些呢?
正着急,谢谢!

请高手指点!

看上去象是.boot被破坏了,如果.boot被破坏会造成随机重启。

至于原因,就比较难说。你的系统里有没有直接写Flash的地方?会不会写出错。Flash不是很适合频烦地读写,这个可能与你盘上会产生坏块也有关系。

应用程序里有一处向flash里写文件,该文件记录了设定的初始值,如果运行过程中,修改该值的话,就将新值记录到文件中,下次使用该值的话会读到新的值。除了这个地方,没有对flash进行写的操作了。这个文件很小,只有几bit。并且在实际应用过程中,这个功能不会很频繁用到。
请问:如果文件存储到flash上,在flash的地址应该是固定的吧,如果修改值的话,应该是在原地址进行数据更新吧。
我们使用的电子盘是工业级的,但现在确实发现有坏块的情况。
.boot文件为何会损坏呢?
代码如下:
inline int ReadCfgFile(char *FileName)
{
FILE *pFile;
pFile = fopen(FileName, “rb+”);
if (pFile==NULL)
return -1;
if( fread( &tSoundAndLightStruct, sizeof(tSoundAndLightStruct), 1,pFile )==-1)
return -2;
if(fclose(pFile)==-1)
return -3;
return 0;
}
inline int WriteCfgFile(char *FileName)
{
FILE *pFile;
pFile = fopen(FileName, “wb+”);
if (pFile==NULL)
return -1;
if( fwrite(&tSoundAndLightStruct, sizeof( tSoundAndLightStruct), 1,pFile )==-1)
return -2;
if(fclose(pFile)==-1)
return -3;
return 0;
}
inline void ReadCfgFileSetupSound()
{
ReadCfgFile(“Globle.CFG”);
SetupSoundValue(tSoundAndLightStruct.nSoundVar);
nNewSoundValue=1000/(g_nMaxSOUNDVAR-g_nMINSOUNDVAR)*tSoundAndLightStruct.nSoundVar;
}

像这样仅只是通过标准函数进行文件操作的话,应该不会破坏.boot
通常要么是应用程序强行写盘;或者是硬件有问题;否则不会破坏到.boot文件。

为了确信,你可以在正常的时候做个 cksum /.boot,把值记下来;然后出错时再做这个,看cksum值有没有变化。

你的电子盘,只在QNX上使用吗?还是说你可能会把它接到别的机器上进行操作?

谢谢xtang,我会按您说的cksum检查一下。
电子盘是只在QNX上使用,实际运行过程不会将它拔下接到别的机器上操作的。我怀疑是否是NAND flash发生位翻转造成.boot文件改变,引起反复重启的呢?