方法

改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检测选项

debugfs网页: ​​网页1​​​    ​​网页2​

  在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。