FLASH系列问题案例分析Word文件下载.docx
《FLASH系列问题案例分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《FLASH系列问题案例分析Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
产品在启动1分钟内会写FLASH,如断电会造成部分内容丢失(配置丢失)为产品软件Bug导致;
CPE启动时FLASH写保护未开启。
软件平台:
BRCM
考虑2个问题:
a)CPE为什么会在1分钟内写FLASH
1)CPE的默认配置存在一条静态WAN连接,当CPE连接上DSL线,且同步之后,WAN连接状态从disconnected变成了connected。
2)WAN连接UP后,TR069等业务就会发包出去,在这个软件中TR069发连接请求包出去;
3)在工厂的环境中,TR069的请求连接肯定收不到回应,TR069会根据RetryPolicy不断的发连接报文,并且会将Retry的次数记录起来保存到状态区;
4)在FLASH保存这个参数的时候,操作人员正好测试完成,对CPE断电,结果FLASH正在写的这个块区的配置丢失;
b)为什么在写FLASH的时候断电会丢失配置
1)FLASH在写参数时,必先擦除整个块区(以BLOCK来擦除),然后再写值;
当写FLASH的时候,原来的内容已经擦掉,写的内容又没有写进去,就会丢失配置;
改善措施
a)修正写FLASH的动作;
1)在PPPOE拨号连接不成功时,串口中不断打印e254savingpppsessioninfo(00308810ee2d/0073;
Telefonica版本上做了修改,就是拨上号之后再保存sessionid,不然写FLASH太频繁了;
2)TR069Retry次数记录,在前2次,发请求时间间隔短,5-10;
10-20;
不把retry的次数记录到状态区,从第3次开始记录;
见示例1;
b)状态区与配置区分开;
1)配置区和状态区分在不同的块区保存;
状态区是断电信息就丢失的区域。
防止软件因各个功能模块在写状态时断电,导致整个块区丢失。
因为BRCM在写参数时,先擦除掉整个块区,然后再写。
2)TR069Retry次数在记录到状态区的时候断电,导致配置也丢失的根本原因就是配置区和状态区在同一个块区;
没有分开;
3)以下示例1是状态区的保存的打印信息;
该例子的log信息在平台上抓取的,可以看到状态区和配置的保存的块区不是一个;
示例1:
状态区与配置区分开的LOG打印信息:
-------------------------------------------------------------------------
unprotect_e127protect.69c69c69c69c69c69c69c69c69c4.06L1(buildtimestamp130708_1017)=====
FriOct100:
00:
00UTC2010
tryreadBPSI
tryreadMPSI
1)BPSIwillsyncfromMPSI
文件时,不烧双Image,再次升级的时候,会从另一个区开始升级;
2)升级的时候可以看到第一次升级从e1开始打印信息,第二次升级从e128开始
示例4:
升级软件不从第0块(CFE块区)开始写软件升级的打印信息:
BCM96328BroadbandRouter
Login:
MemTotal:
60112kB
MemFree:
24596kB
Buffers:
4468kB
Cached:
16604kB
SwapCached:
0kB
Active:
6956kB
Inactive:
18040kB
Active(anon):
3924kB
Inactive(anon):
Active(file):
3032kB
Inactive(file):
SwapTotal:
SwapFree:
Dirty:
Writeback:
AnonPages:
3948kB
Mapped:
5456kB
Slab:
7816kB
SReclaimable:
592kB
SUnreclaim:
7224kB
PageTables:
352kB
NFS_Unstable:
Bounce:
WritebackTmp:
CommitLimit:
30056kB
Committed_AS:
7856kB
VmallocTotal:
1032148kB
VmallocUsed:
2132kB
VmallocChunk:
1006504kB
Allocating7039360bytebuffertoholdimage.
Memoryallocated.
Gotimageviahttp,totalimagesize:
7039189
enter
ModemMonitorSocketReceveMsg:
[undialok]
FLASHingrootfilesystemandkernel...
BroadbandRouter
MemTotal:
60332kB
18812kB
5024kB
18136kB
8780kB
17904kB
3524kB
5256kB
3548kB
5128kB
11788kB
612kB
11176kB
392kB
30164kB
8248kB
2620kB
1018244kB
Allocating7104225bytebuffertoholdimage.
7104034
FLASHingCFE...
..
a)配置双备份(在案例1中已经说明)
2013-4,Telplus软件,QA在抽检以上产品时发现2PCS板初始化失败。
原因定位分析过程:
a)初始化失败,CFE无法启动;
b)在这两个站点跟踪,发现复位键过长,在装上外壳的时候,抵到了外壳;
c)操作人员拔掉电源时,碰到了外壳,按到了复位键(客户定义1s复位),导致在恢复出厂的过程中断电,破坏了CFE;
按照一般原理,恢复出厂时没不需要修改CFE块区的任何参数;
d)跟踪软件发现:
恢复出厂默认配置时写nvram;
a)出厂后不允许写nvram
a)软件升级不修改CFE,如以上升级时,打印信息;
b)恢复出厂等行为,不往nvram中写值,nvram和CFE在同一块区;
b)复位键:
全部剪短;
第三部分:
预防措施
所有的BRCM软件都要加FLASH写保护功能;
软件备份,FLASH大的可以做,FLASH小的做大小image;
配置备份,必须支持,并作为系统测试必测项。
第四部分:
测试计划
1、FLASH写保护的验证;
a)开关机测试:
目的:
辅助验证FLASH写保护功能;
上电掉电过程中电压不稳,会形成擦写FLASH的动作;
b)直接的验证方法暂时没有。
2、配置备份测试;
3、软件备份测试;
4、针对NANDFLASH的配置备份测试,待完善;
第五部分:
背景知识
一些FLASH的小知识
我们目前使用的FLASH主要是NORFLASH和NANDFLASH两种;
1.NORFLASH:
有串行和并行两种;
a)串行和并行FLASH如何区别
命名为:
s25是串行FLASH
s29是并行FLASH
b)为什么串行不交换高低位字节
串行FLASH,存储结构是8位,所以不存在交换高低自己的问题。
c)是不是所有的并行FLASH都需要交换高低位字节
并行FLASH分为大端和小端,CPU会对FLASH有大端小端的要求,CPU中有一个硬件控制器设置大端还是小端模式;
大端和小端FLASH的对比说明如下:
并行FLASH大端B
1、大端是:
高位在低地址;
针对字节
eg:
一个数据为:
0X01020304,放入大端FLASH中为:
01020304
CPU16bit数据线读出的数据为:
02010403,和原来的数据不一样了,所以执行的结果也会不一样。
所以大端FLASH要交换高低字节,如果数据线为:
16位,则需交换2字节,32bit数据线要交换4字节.
并行FLASH小端L
1、小端是:
高位在高地址;
0X01020304,放入小端FLASH中为:
04030201
小端存放数据的位置和地址位一致,低位在低字节,在存储器中的存储顺序是一样的。
CPU读取数据和原字节一致。
由此而知,如果数据线是8位的,也不需要交换字节。
d)常用芯片对大小端的要求:
BCM6开头大端;
BCM5开头为小端;
RELTECK:
86XX,为大端;
MINDSPEED:
MARVELL是小端,
e)为什么杂波会造成FLASH丢失资料
杂波可能会形成flash的写指令,如果刚好写配置区,就会丢配置,一般我们写指令只要一个字节
2.NANDFLASH
a)NANDFLASH的烧录文件后缀名.OOB;
并非.w文件;
b)NANDFLASH数据容易损坏,通常除了数据区还有冗余区,linux系统通称为oob;
c)程序从nandflash启动就需要读取相关oob的信息,因此在烧录的时候必须要添加oob信息
d)NANDFLASH烧录器设置,烧录见附件;
第六部分:
疑问解答:
一、CPE为什么会在1分钟内写FLASH
2)CPE的默认配置存在一条静态WAN连接,当CPE连接上DSL线,且同步之后,WAN连接状态从disconnected变成了connected。
3)WAN连接UP后,TR069等业务就会发包出去,在这个软件中TR069发连接请求包出去;
4)在工厂的环境中,TR069的请求连接肯定收不到回应,TR069会根据RetryPolicy不断的发连接报文,并且会将Retry的次数记录起来保存到状态区;
5)在FLASH保存这个参数的时候,操作人员正好测试完成,对CPE断电,结果FLASH正在写的这个块区的配置丢失;
二、为什么在写FLASH的时候断电会丢失配置
6)FLASH在写参数时,必先擦除整个块区(以BLOCK来擦除),然后再写值;
三、FLASH写保护与配置双备份的区别
7)写保护是指使FLASH的block处于保护状态,如果没有经过解保护的手续,对FLASH的擦和写都不会生效,相当于加了一把锁,特别针对于防止硬件杂波或程序混乱形成的擦写操作,保证数据安全。
保护的范围不光是配置,还可以是普通的代码等其他部分。
8)配置备份,是使用两个配置区,当其中一个配置去因为进行写操作时,断电可能会导致损坏掉,这时候可以从另外一个配置区读出正确的配置,并同步到已损坏的配置区中去。
保证cpe在任何时候都能得到正确的配置,保证功能的正常使用。