本次记录了我在一个项目中使用NUC980,存储使用SPI NAND flash,文件系统使用yaffs2这个方案过程中出现文件丢失等一些问题的探索记录和解决过程。
一、出现的现象
linux内核启动后,文件出现以下几种情况:
1.自己编译后要使用的文件使用"ls"命令找不到,断电重启后文件又出现;
2.重启后部分文件里面内容被改变,且无法复原;
3.重启后某些文件名被改变,且无法复原;
以上出现问题的文件都是自己编译后复制到linux文件系统中使用的。
二、解决的过程
2.1 尝试更换过文件系统
通过搜索资料,重新编译文件系统为UBIFS文件系统,文件系统成功替换原本的yaffs2文件系统,但是最终的测试效果仍会出现文件系统丢失的情况,所以这种方法最后以失败告终。下边是我参考的重新编译UBIFS文件系统的资料,感兴趣的小伙伴可以了解一下:
2.2 后来在查找资料的过程中发现了一个论坛,里面也有人讨论遇到的相似的问题,在里面发现了一个新的解决方案:把原来使用SPI NAND flash存储更改为并口的NAND Flash存储。
我理解的这两种Flash的区别:SPI NAND flash硬件驱动以SPI 方式,6根线;并口的NAND flash需要用专门的接口来驱动,NUC980单片机上有对应的接口,传输数据线8根,并口的NAND flash使用的是铠侠(原东芝),大小为1Gbit。
方案更换过后,经过验证没有出现过文件丢失的情况,但是也有一些缺点:1.并口的NAND FLASH需要使用专有的接口,且占用的引脚比较多,有十几个引脚,远比使用SPI NAND flash 占用的多;2.使用的那些引脚正好占用要使用SD卡功能的引脚,导致后续没有办法使用SD卡功能。
下面是我参考的论坛,感兴趣的小伙伴可以了解一下:
求助nuc980+spi nand,断电,系统里面的文件会损坏或者丢失。 (amobbs.com 阿莫电子技术论坛)
三、最终确定的方案
后来断断续续和新唐厂商的FAE沟通,也历时比较久,最终确定了原本最初的方案使用SPI NAND Flsh文件系统丢失的具体原因:内核版本较低,里面的驱动并不完善。最开始使用的内核版本为"linux 4.4.115";后边找到新的内核,版本为"4.4.289",在新的内核上编译后烧录,最终测试使用SPI NAND flash方案文件系统没有再出现过问题。
下边是我编译使用的内核:
链接:https://pan.baidu.com/s/1HMC8on8ecs2WF83GNDuJSg
提取码:70wa