![LinuxでMTDパーティションのレイアウトを検出/解析するには?](https://linux33.com/image/219646/Linux%E3%81%A7MTD%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%82%92%E6%A4%9C%E5%87%BA%2F%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F.png)
私はkernel-5.10.24を使用する組み込みLinuxシステムを開発しています。
システムにはストレージとして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パーティションを解析するコードを読み、これがベンダーのパーティション検索と解析コードのバグであることがわかりました。バグを修正すると、期待どおりに動作します。