设备:NUC972DF61YC
使用的虚拟机环境:官方提供的NUC972DF61YC - Nuvoton
板载NAND FLASH,前期主要学习怎么uboot、ubootspl、uimage、env烧录。官方配置没有使用rootfs在flash中,所以数据会掉电丢失。即文件系统在RAM中。
这里仅仅整理移植时遇到的问题:
问题一:
【VFS: Mounted root (yaffs2 filesystem) readonly on device 31:2.】报错
yaffs: dev is 32505858 name is "mtdblock2" ro
yaffs: passed flags "inband-tags"
VFS: Mounted root (yaffs2 filesystem) readonly on device 31:2.
devtmpfs: error mounting -2
刚刚学习挂载.dtb设备树文件,一直没有更新rootfs所以导致报错,重新编译下载rootfs解决。
问题二:
【VFS: Cannot open root device "mtdblock2" or unknown-block(0,0): error -6】报错
VFS: Cannot open root device "mtdblock2" or unknown-block(0,0): error -6
查找问题的思路:
1、 首先这里是说没法挂载mtdblock2分区,可以先往上看log,有没有下面这种:
3 ofpart partitions found on MTD device nand0
Creating 3 MTD partitions on "nand0":
0x000000000000-0x000000200000 : "u-boot"
0x000000200000-0x000001600000 : "Kernel"
0x000001600000-0x000007a80000 : "user"
fmi-sm: registered successfully! mtdid=nand0
其中三个分区,分别为mtdblock0,mtdblock1,mtdblock2。看一下是不是你要挂载的分区在这个范围内。
2、如果没有上述的log输出,就是说根本没有进行分区,分区失败了。
2.1、分区可以从以下几个地方开始:Kernel->arch->arm->boot->dts中找到板卡的设备树。看一下分区是否正确
partition@0x0 {
label = "u-boot";
reg = <0x00000000 0x0200000>;
};
partition@0x200000 {
label = "Kernel";
reg = <0x0200000 0x1400000>;
};
partition@0x1600000 {
label = "user";
reg = <0x1600000 0x6480000>;
};
2.2、uboot->include->config中找到板卡的.h文件。检查分区。
#define MTDIDS_DEFAULT "nand0=nand0"
#define MTDPARTS_DEFAULT "mtdparts=nand0:0x200000@0x0(u-boot),0x1400000@0x200000(kernel),-(user)"
#define MTD_ACTIVE_PART "nand0,2"
2.3、如果在kernel中开启了mtdparts解析
则要在env.txt文件中配置正确的分区。我之前怎么都不加载,直到取消了这个配置,直接去文件中写死。如果一直挂载不上的同学可以试试把这个功能取消,然后到上面两个方式中去配置。
知识点:如何挂载设备树 可以参考下面这个文章 很好。
Linux设备树语法分析详解教程(三)u-boot设备树的传递 - 知乎 (zhihu.com)