VFS: Cannot open root device "mtdblock5" or unknown-block(0,0): error -6解决方法

摘要:
)[2.14000]1f01192mtdblock1(驱动程序?)[2.172000]1f0264mtdblock2(驱动程序?)[2.184000]1f0364mtdblock3(驱动程序?)[2.192000]1f043776mtdblock4(驱动程序?

问题现象:

[    2.120000] VFS: Cannot open root device "mtdblock5" or unknown-block(0,0): error -6
[    2.136000] Please append a correct "root=" boot option; here are the available partitions:
[    2.152000] 1f00            4096 mtdblock0  (driver?)
[    2.164000] 1f01             192 mtdblock1  (driver?)
[    2.172000] 1f02              64 mtdblock2  (driver?)
[    2.184000] 1f03              64 mtdblock3  (driver?)
[    2.192000] 1f04            3776 mtdblock4  (driver?)
[    2.204000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

导致该问题的原因:flash分区不对

第一种情况是根本没有做分区,没有出现下面的启动信息

[    0.460000] Creating 4 MTD partitions on "spi32766.0":
[    0.470000] 0x000000000000-0x000000030000 : "u-boot"
[    0.480000] 0x000000030000-0x000000040000 : "u-boot-env"
[    0.490000] 0x000000040000-0x000000050000 : "factory"
[    0.500000] 0x000000050000-0x000000400000 : "firmware"

像MTK的就需要在dts文件中添加flash分区

target/linux/ramips/dts/MT7621.dts

       palmbus@1E000000 {
                spi@b00 {
                        status = "okay";

                        m25p80@0 {
                                #address-cells = <1>;
                                #size-cells = <1>;
                                compatible = "w25q128";
                                reg = <0 0>;
                                linux,modalias = "m25p80";
                                spi-max-frequency = <10000000>;

                                partition@0 {
                                        label = "u-boot";
                                        reg = <0x0 0x30000>;
                                        read-only;
                                };

                                partition@30000 {
                                        label = "u-boot-env";
                                        reg = <0x30000 0x10000>;
                                        read-only;
                                };

                                factory: partition@40000 {
                                        label = "factory";
                                        reg = <0x40000 0x10000>;
                                        read-only;
                                };

                                partition@50000 {
                                        label = "firmware";
                                        reg = <0x50000 0xfb0000>;
                                };

                        };
                };

第二种情况是dts文件中添加了flash分区,flash大小没配置正常

                                        label = "firmware";
                                       reg = <0x50000 0xfb0000>;   // 16M = 0x50000 + 0xfb0000

  要是板子是4M的,4M = 0x50000 + 0x3b0000,需要调整为reg = <0x50000 0x3b0000>;

第三种情况是分区没有分完整,rootfs分区没出来

[    0.460000] Creating 4 MTD partitions on "spi32766.0":
[    0.470000] 0x000000000000-0x000000030000 : "u-boot"
[    0.480000] 0x000000030000-0x000000040000 : "u-boot-env"
[    0.490000] 0x000000040000-0x000000050000 : "factory"
[    0.500000] 0x000000050000-0x000000400000 : "firmware"

在uboot启动阶段有以下打印

## Booting image at bc030000 ...

此种情况下"firmware"的分区起始地址要放在0x000000030000,即 0x000000030000-0x000000400000 : "firmware"

或者

## Booting image at bc050000 ...

此种情况下"firmware"的分区起始地址要放在0x000000050000,即 0x000000050000-0x000000400000 : "firmware"

配置正确后可出现如下分区信息:

[    1.608000] 2 uimage-fw partitions found on MTD device firmware
[    1.620000] 0x000000030000-0x000000165801 : "kernel"
[    1.632000] mtd: partition "kernel" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[    1.656000] 0x000000165801-0x000000400000 : "rootfs"
[    1.668000] mtd: partition "rootfs" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[    1.696000] 1 squashfs-split partitions found on MTD device rootfs
[    1.708000] 0x000000330000-0x000000400000 : "rootfs_data"

最后,要出现以上分割firmware分区的效果,需要配置kernel

执行make kernel_menuconfig

VFS: Cannot open root device "mtdblock5" or unknown-block(0,0): error -6解决方法第1张

MTK openwrt 3.10.14的SDK,有的flash分区不在dts文件中,需要在源码中调整,譬如以下

vi build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/linux-3.10.14-p112871/drivers/mtd/ralink/ralink_bbu_spi.c

VFS: Cannot open root device "mtdblock5" or unknown-block(0,0): error -6解决方法第2张

免责声明:文章转载自《VFS: Cannot open root device "mtdblock5" or unknown-block(0,0): error -6解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇去掉vue路由中的#号开发者使用JasperReport——带参数查询数据库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS7安装配置telnet-server

CentOS7安装配置telnet-server 1.安装xinetd和telnet-server yum -y install telnet-server xinetd 2.启服务(服务管理方式和CentOS6稍有区别) systemctl enable xinetd.server systemctl enable telnet.socket sy...

Windows10 +Ubuntu 18.04双系统安装详细教程

前言: 由于开发需要,很多用户需要安装Linux环境。如果用虚拟机操作会消耗大量内存,一般的电脑会显得卡顿,从而影响开发效率。这里分享一些安装经验,希望能够帮助大家。 教程: 步骤1:下载镜像文件 从Ubuntu官网 http://releases.ubuntu.com/18.04/下载系统的iso镜像文件 ,下载后不用解压,过程如下: 步骤2:格式化U...

linux mce的一些相关内容和用户态监控的设计方法

之所以想起写一点关于mce的东西,倒不是因为遇到mce的异常了,之前遇到过很多mce的异常,内存居多,但没有好好记录下来,写这个是因为参加2018 clk南京会议的一点想法。 void __init trap_init(void) { 。。。 #ifdef CONFIG_X86_MCE set_intr_gate_ist(X86_TRAP_MC,...

Android Q dynamic partition

from:https://blog.csdn.net/u012932409/article/details/105075851 动态分区 Android 10支持了动态分区,这是一种可以通过无线下载 (OTA) 更新来创建、销毁分区或调整分区大小的用户空间分区系统。系统为设备分配一个 super 分区,其中的子分区可动态地调整大小。单个分区映像不再需要为...

FastDFS安装

FastDFS 安装包 FastDFS安装包 百度网盘 密码 aj4f 下载后把安装包移动到服务器里面 这里我把安装包放在opt/FastDFS FastDFS安装 安装环境 在本地安装就需要安装gcc环境yum -y install cmake make gcc-c++ 在阿里服务器因为帮你配置好了的 解压libfastcommon到指定目录 解压 -C...

Linux在不能使用yum的环境下安装pgsql(公司内网)

@ 目录 前言 一、安装环境 二、开始安装pgsql (按照操作流程来的) 三、问题解决方案 1、两个问题 2、npm的安装过程 后言 前言 本次的情况先说明一下:任务就是在公司的内网服务器中搭建一个pgsql的数据库 无yum下载,只能使用rpm文件搞定相关软件安装 一、安装环境 liunx系统:Centos7pgsql数据库:p...