前言
此处做一个记录,记录自己犯下的致命错误,加上内核对TF的检举,一度导致设备基本成为白砖。
问题
部分设备出现应用无法启动问题, 串口发现用户态基本无法和内核态的交互,而且TF卡也出现了一些异常,具体表现为:
1,TF卡原先分的区减少了,丢失了
2,fdisk重新格式化,发现一直阻塞shell上,dmesg确认异常。
问题报备
1)一致认为是TF卡分的区太小,读写超过了次数,形成了坏区导致。导致。
P.S 64G的TF卡,分了2个区,分别是写日志,另外一个是离线保存图片,当网络正常将保存的图片等关联数据上传到服务。
2)TF卡做了一个循环覆盖,即写入超过了90%就将最旧的数据清除10%。认为分区太小,读写超过寿命。
3)使用一些工具分析TF,发现有坏区。
出货设备修复
1.格式化分区
#!/bin/sh
MAJOR_PATH=/dev/mmcblk1
echo "卸载LOG PIC"
umount -l /home/ubuntu/log /home/ubuntu/pic
echo "确认是否卸载完成"
df
fdisk $MAJOR_PATH <<EOF
p
d
1
p
d
2
w
EOF
echo -e "\033[1;32mDone\033[0m"
echo -e "\033[1;32m将fdisk.sh复制到/home/ubuntu/app/下,自动分区脚本复制"
cp fdisk.sh /home/ubuntu/app
rm fdisk.sh
sync
2.自动分区:
#!/bin/sh
DEVICE_FRIST_BOOT_FLAGE=/home/ubuntu/work/device_frist_flage.txt
MAJOR_PATH=/dev/mmcblk1
LOG_MOUNT_PATH=/dev/mmcblk1p1
PIC_MOUNT_PATH=/dev/mmcblk1p2
if [ ! -e $DEVICE_FRIST_BOOT_FLAGE ]; then
if [ -e $MAJOR_PATH ];then
fdisk $MAJOR_PATH <<EOF
p
d
1
p
d
2
w
EOF
sleep 1;
touch $DEVICE_FRIST_BOOT_FLAGE
fi
fi
if [ ! -e $LOG_MOUNT_PATH ] && [ ! -e $PIC_MOUNT_PATH ];then
fdisk $MAJOR_PATH <<EOF
n
p
1
103946239
n
p
2
w
EOF
fi
软件上
1)日志模块上位机可设置保存级别和关闭, 比如只打印错误信息,或打印所有的等级, 支持关闭日志。
思考
1)同一批次的设备, 部分设备出货3个月出现该问题, 部分设备出货2年依然没有该问题, 确认是
写的寿命到了吗?