どのようにカーネルにrootfsカーネルとルートファイルシステムは、NAND型フラッシュに対応したアドレスにマッピングされます

[誰かが質問  ローカルファイルシステムにフラッシュ・デバイスのマッピングを完了するために、どのように、起動時にカーネルを? ]

私は0x10140000で、プログラミングのフラッシュで、ramdisk.image.gzを使用して
、私はこの中国/ディレクトリとすべてのサブディレクトリにブートファイル中にカーネルをマッピングする方法を理解していませんか?
場所にramdisk.image.gzフラッシュが変更された場合、どのようにカーネルああを変更するには?

[回答]
ramdisk.image.gzは、カーネルイメージ圧縮する必要があり、正しく理解していませんでした。

あなたの質問は、二つの側面に分けて、あなたが説明します。

1. /ディレクトリにこのマッピング・ファイルとすべてのサブディレクトリ
の代わりに、ルートディレクトリとすべてのサブディレクトリにファイルをマッピングは、
しかし、ルートファイルシステムに対応し、rootfsの(ルートファイルシステム)と呼ば
/ルートに対応しますそのサブディレクトリとファイル。

、全体のプロセスは単純明快、システムの起動する必要があります説明することが見つかりました:
[はじめに]システム起動
の初期化コードがメモリに読み込まuboot、そして、行くuboot ubootの実装にジャンプし
、必要なハードウェアを初期化uboot一部のドライバをロードし、 NANDフラッシュ・ドライブを含め、
その後、内部コマンドのセットに従って、あなたのubootを起動します。

NANDは0x30007FC0 0X100000 0x200000番地読み、bootm 0x30007FC0の
0x30007FC0でメモリに意味、0X100000から始まり、NANDフラッシュを読んで行く、データの0x200000番地の長さを、
そして0x30007FC0メモリから実行を示すbootm。
それはあなたのカーネルミラーリングを実行することです。
ここにあなたのramdisk.image.gzです。
そして、あなたのアドレス0x10140000ので、上記のstartコマンド、少なくとも0X100000は、あなたのアドレス0x10140000を変更します。
その後、カーネル自体を解凍し、その後、実行、
ハードウェアを初期化し、
モジュールをロードし、
そして最後にrootfsのをマウントし、
これはubootで定義されているファイルシステムのどのような形式である:
の#define CONFIG_BOOTARGS「ルート=は/ dev / mtdblock2 RWのinit = / linuxrcのコンソール= ttyS0,115200 MEM = 16M rootfstype = yafffs2 "

(ubootは、変数の変更とストレージsaveenvをサポートしている場合、それは、ほとんどの現在の変数の対象となる)
とubootからオフカーネルにカーネルに渡されたとき、実行し、される
ので、カーネルにrootfsをロードするとき、あなたがしたいものを知っていますこのような上記yaffs2フォーマットとしてフォーマットは、
このファイルシステムをロードします。
このファイルシステムは、あなたはまた、適切なファイルシステムの作成ツール、生産と自分自身を実現して、対応する位置にプログラムされました。
ルート=は/ dev / mtdblock2の上に、彼はロードするために、それは、あなたの最初の3つのMTDパーティションでは、/ dev / mtdblock2に行くことを言いました。
ここでMTD NANDフラッシュに対応する最初の3つの特定のパーティションのアドレスが、
あなたは通常、パーティションのNANDフラッシュはの独自の定義をcore.c、カーネルです。
Ubootは、第二のコアがカーネルであり、一般的に最初のパーティションであり、そして第三のパーティション、即ち/ DEV / mtdblock2 rootfsのです。
どのようなあなたは、パーティションにオンライン誰かを見つける:
静的構造体mtd_partitionのrm9200_partitions [3] =
{
        {/ * 256K * uboot /
                .nameの= "uboot"、
                .size =に0x40000、
                .offset = 0
        }、
        {/ *カーネル1.768M * /
                .nameの= "カーネル"、
                .size = 0x1C0000、
                .offset =に0x40000
        }、
        {/ * rootfsの2M * /
                .nameの= "rootfsの"、
                .size = 0x200000番地、
                .offset = 0x200000番地
        }
}。

開始/ DEVアドレス/ mtdblock2 0x200000番地= 2Mの上記定義に従ってパーティションが位置され、そして場合
、カーネルブートがrootfsのマウント場合、uboot yaffs2パラメータ形式上の上方から通過することである
NAND型フラッシュに2Mの読み取りおよびロードrootfsのためのアドレス、ロードが完了した後、内部の対応するように、あなたがルートディレクトリを言うと、すべてのファイル、フォルダ、あなたを特定することができます。
そして、読み、最後の初期化コンソールコンソールに関連した事柄する初期化スクリプトを実行します、そして、あなたは彼らがシステムと対話することができます前に、一般的な#あなたは、このようLSなどのコマンドを入力することができていることがわかります。

だから、あなたが/ rootディレクトリに場所またはアドレスをマッピングする方法を言って、これは実際にrootfs、対応mtdblock2、である
ように、ここで2Mの場所として、対応するNANDフラッシュ上のアドレス、。カーネルのカーネルではなく、ファイルマッピング。

カーネルカーネル、例えば上記アドレスに0x40000としてmtdblock1、内部のパーティションに対応します。

2.
場所でramdisk.image.gzフラッシュが変更された場合、どのようにカーネルああを変更するには?
アドレスが変更された場合、
uboot定義の起動パラメータ:
NAND読む0x30007FC0 0X100000 0x200000番地; bootm 0x30007FC0
0X100000では、その上にあなたの新しいアドレスに置き換えられます。

おすすめ

転載: www.cnblogs.com/fire909090/p/11698685.html