Linux 中如何检测/解析 MTD 分区布局?

Linux 中如何检测/解析 MTD 分区布局?

我正在开发一个嵌入式 Linux 系统,它使用 kernel-5.10.24。
系统中有一块NAND FLASH作为存储,有4个分区。当内核启动时,会显示4个分区,如下所示:

[    0.499555] Creating 4 MTD partitions on "spi_nand":
[    0.499564] 0x000000000000-0x000000080000 : "uboot"
[    0.501099] 0x000000080000-0x000000900000 : "kernel"
[    0.510556] 0x000000900000-0x000007000000 : "filesys"
[    0.580413] 0x000007000000-0x000008000000 : "app"

内核如何知道NAND FLASH的MTD分区?

我的主要目的是通过删除 MTD 分区扫描来加速内核启动。

我发现设备树中有NAND分区定义,但布局与真实系统不同。

    nandflash@0 {
        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            /* spi nand flash partition */
            partition@0 {
                label = "uboot";
                reg = <0x0000000 0xE0000>;
                /*read-only;*/
            };

            partition@E0000 {
                label = "kernel";
                reg = <0xE0000 0x900000>;
            };

            partition@900000 {
                label = "filesys";
                reg = <0x900000 0x8000000>;
            };
        };
    };

是否可以要求内核从设备树中解析/获取分区信息?如果是这样,该怎么做?
是否可以通过使用设备树中的硬编码分区信息来加速内核启动?

答案1

通过阅读通过设备树解析NAND分区的代码,我发现这是供应商代码中进行分区探测和解析的一个错误。通过修复错误,它按预期工作。

相关内容