Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 50185|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-11 13:20:01 | 显示全部楼层 |阅读模式

    问题现象:

    [    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

     

    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

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 12:54 , Processed in 0.061074 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表