在远程升级文件系统的时候碰到一个比较头疼的问题,希望高人解答一下:
硬件配置:DM368,IPNC3.0,内存128M(48M给ARM使用),flash32M;
升级环境:通过网页升级。大概升级原理:通过web将待升级的文件系统缓存到设备,然后执行/tmp/flash_eraseal清除flash,再执行/tmp/nandwrite,最后执行命令 /mnt/nand/shutdown -r now
碰到问题:(假定有两个版本,版本A和版本B)
1)版本A升级到版本A;或者版本B升级到版本B都没有问题;
2)版本A升级到版本B,升级“失败”;
3)版本B升级到版本A,升级“失败”;
PS:失败之所以打引号,是因为,版本还是升级成功了,只是系统没有重启,看到的版本号还是原来的版本;
失败现象:假定A版本大小小于B版本
1)A升级到B(小到大)
在升级的最后,也就是执行shutdown后,提示:
[ 130.530000] SQUASHFS error: Unknown inode type 15 in squashfs_iget!
INIT: Switching[ 130.550000] SQUASHFS error: zlib_fs returned unexpected result 0xfffffffd
[ 130.560000] SQUASHFS error: Unable to read cache block [ec7a8b:40]
[ 130.560000] SQUASHFS error: Unable to read inode [ebbb80:1baa]
2)B升级到A(大到小)
[ 339.460000] SQUASHFS error: zlib_fs returned unexpected result 0xfffffffd
INIT: Switching[ 339.470000] SQUASHFS error: Unable to read cache block [ec1798:1177]
to runlevel: 6
[ 339.480000] SQUASHFS error: Unable to read inode [ec1798:1177]
Shujie Liu:
⊙﹏⊙b汗,没有人知道吗?
我猜想是squashfs的问题……
两份同样的代码,只是编译时间不一样,它们生成的*.squashfs大小一样,但Inode table size 和Directory table size不一样。
这样的两份文件系统都不能交替升级……
de wang:
回复 Shujie Liu:
扯哦,你都擦过flash了,应该没什么问题的。 要注意 flash_eraseall /dev/mtdX,擦出的是字符设备,不要搞成/dev/mtdblockX这样的块设备去了;nand write一样。看看我这个是cramfs的
flash_eraseall /dev/mtd2 && nandwrite -q -p /dev/mtd2 /mnt/nand_mtdblock5/uImage && flash_eraseall /dev/mtd3 && nandwrite -q -p /dev/mtd3 /mnt/nand_mtdblock5/cramfs
先在shell中使用交互式命令实验,成功后可把这些步骤编程为全自动化的。