继续第六周-Tip中提到的nand flash上文件系统在断电重启时挂掉的问题。
这一周都在解决这个问题,各种硬件尝试和系统修改
硬件上做了很多尝试,两个思路。
(1)将CPU的核电1.2V和3.3V之间的断电延时增加,让核电先断电,3.3V后断电,核电是CPU的核心工作电压,3.3是CPU的外围器件工作电压,nand的读写就是3.3V。
主要是通过增加电容的值,让其断电的时候放电时间更长,延缓断电时间。需要注意的是,使用示波器量断电时差的时候,量的是核电和3.3V掉电到最小正常工作电压的时间,最小正常工作电压是在CPU和nand的芯片资料上查到的。
能对某些硬件有明显效果,但是不是所有硬件。
(2)nand flash上有一个保护管脚,但是没有连到CPU或CPLD上,尝试修改利用上保护管脚。
飞线使保护管脚在电压下降到3.0V时生效。
能对某些硬件有效果,但是不是所有硬件。
硬件上的尝试能起到一些作用,但是只是降低了概率,没有根本解决问题,不能使用,对我来说,硬件的验证过程有几个体会。
(1)硬件真的是非常非常重要,嵌入式软件工程师一定要好好利用每一个和硬件工程师打交道的机会。
(2)我的硬件知识真的是菜,通过电阻,电容调节的小方法本来只是一些模电,数电的小知识的实际使用,但是每次都是硬件工程师拿去焊,软件工程师根本不知道修改背后的含义,说到底是自己没有想去弄懂。
(3)这次示波器的使用又熟练了一些。
系统上将文件系统,应用程序所在的分区改成了只读,参数分区要保存参数,不能改,还是读写,但是为了安全,增加一个参数备份分区。
(1)关于系统由读写改为只读,修改和验证花了我将近一周的时间,修改为只读很简单,主要是对系统上服务的影响和应用程序的影响。
(2)系统改为只读,一个是在uboot的环境变量中的修改,文件系统启动后会使用这个参数进行首次挂载,这个我没有修改,因为需要根文件系统先挂载为读写,进行一些操作;另外一个是在inittab里面,将根文件系统系统remount成只读;第三个地方是在fatab里面挂载。
(3)对系统服务的影响是因为ftp,ssh,networkmanager等服务的配置文件存储在etc和var等目录下,运行过程中可能会修改配置,变成只读后无法修改就会影响到这些系统服务的功能,解决的方法就是将etc和var目录下需要的文件和目录软链接到虚拟文件系统run目录下。
(4)对应用程序的影响是有些进程将配置保存在进程文件目录下,变成只读后也是不能保存的,需要修改目录。
总结:
这次问题很有意义,提升了我的硬件和系统启动时的处理知识,今后产品的开发中在开始的时候就要考虑到系统的可靠性,其中重要一环就是断电重启。下一步需要验证一下emmc上的系统稳定性,虽然对于硬件原理上来说,nand比emmc更可靠,但是nand的读写时序我们可能处理的没那么好,导致性能可能比不上emmc。
11-01
11-01
11-01