方法
改Makefile
修改drivers/mtd/ubi/Makefile,添加如下两行
ccflags-y += -DDEBUG
subdir-ccflags-y += -DDEBUG
mount失败的调试
fs/ubifs/super.c:
把c->probing = !!(c->vfs_sb->s_flags & MS_SILENT);改为c->probing = 0;
此时,通过ubifs_errc打印的就可以打印出来了。ubifs_errc在fs/ubifs/ubifs.h:1795
用工具打印出来
nanddump、mtd_debug
打开ubi检测选项
在ubiattach之后,执行如下命令,再ubimkvol等
mount -t debugfs none /mnt; echo 1 > /mnt/ubi/ubi1/chk_io
注意:
相关函数为:drivers/mtd/ubi/build.c=> ubi_attach_mtd_dev=> ubi_debugfs_init_dev(ubi);
这里会创建debugfs的ubi/ubiN/下边的一些节点,如chk_io。很多Linux版本不会自动挂载debugfs,所以需要手动挂载。
drivers/mtd/ubi/io.c=>ubi_io_write函数中,会判断debugfs的ubi/ubiN/chk_io是否非0,只有非0才会进行校验,校验如下:
在写入之前判断是否都是0xff;写入之后再读出来,判断是否一样;判断整个块的剩余部分是否都是0xff。