Linuxブート可能 NANDフラッシュ書込み手法

Linuxブート可能
NANDフラッシュ書込み手法
株式会社東陽テクニカ 汎用計測営業部
May 21, 2011 – June 29,2011 MK ver1.1
NANDからのLinuxブート手順
① カスタムHWサポートによる、ブートローダーを
起動するためのNAND/DRAMドライバを含む
HWブートプログラム
② HWブートプログラムにてU‐BootのDRAMへの
ロードと起動
③ U‐bootによるシステム初期化、Linuxカーネルの
ロード、カーネルの起動
④ カーネルは、ファイルシステム(YAFFS等)の起動
を行い、アプリケーションや必要なファイルを
ロード後、タスクを起動
①HWブート
NAND イメージ
システムメモリイメージ
NAND image
Sector 0: HWブート
P0: HWブート
Sector 1‐L: U‐boot
Processor
reset
HWブートプログラ
ム起動のためのカ
スタムHWサポート。
Bad Block
Sector L‐M: Linux Kernel, ドライバ
Bad Block
ファイルシステム
Bad Block
Sector M‐N:
ファイルシステム
‐> アプリケーショ
ン, データファイル
HW reset
Bad Block
Sector End: バッド
ブロックテーブル
② U‐Bootのロード、実行
NAND イメージ
システムメモリイメージ
NAND image
P0: HWブート
Sector 0: HWブート
L1: U‐boot
Sector 1‐L: U‐boot
HWブートによりU‐
Bootをロードし起動
Bad Block
Sector L‐M: Linux Kernel, ドライバ
Bad Block
ファイルシステム
* ロード中、バッドブロックのス
キップが必要。オプションでバッ
ドブロックテーブル管理を行う。
Bad Block
Sector M‐N:
ファイルシステム
‐> アプリケーショ
ン, データファイル
Bad Block
Sector End: バッド
ブロックテーブル
③ カーネルのロードと起動
NAND イメージ
システムメモリイメージ
NAND image
P0: HWブート
Sector 0: HWブート
L1: U‐boot
Sector 1‐L: U‐boot
Bad Block
L2: Linux Kernel
U‐bootがLinux Kernelのロードを
行った後カーネル
に実行を移す
Sector L‐M: Linux Kernel, ドライバ
Bad Block
ファイルシステム
Bad Block
Sector M‐N:
* ロード中、バッドブロックのス
キップが必要。オプションでバッ
ドブロックテーブル管理を行う。
ファイルシステム
‐> アプリケーショ
ン, データファイル
Bad Block
Sector End: バッド
ブロックテーブル
④ アプリケーションとデータのロード
NAND イメージ
システムメモリイメージ
NAND image
P0: HWブート
Sector 0: HWブート
L1: U‐boot
Sector 1‐L: U‐boot
L2: Linux Kernel
* ロード中、バッドブロックのス
キップが必要。オプションでバッ
ドブロックテーブル管理を行う。
Bad Block
Sector L‐M: Linux Kernel, ドライバ
Bad Block
ファイルシステム
L3: アプリケーション、
データ、FATミラー用
ヒープ
カーネルは、YAFFS等の
ファイルシステムをマウ
ントし、その後、カーネル
は、動的ドライバ、アプリ
ケーション、データファイ
ルを読み込み、実行
Bad Block
Sector M‐N:
ファイルシステム
‐> アプリケーショ
ン, データファイル
Bad Block
空き
FATテーブルは、DRAM
にミラー化される
Sector End: バッド
ブロックテーブル
NANDイメージのビルド ‐ 1
• HWブート: – リセットアドレスで実行するHWブートイメージをビ
ルド
– 次にU‐BootがロードできるためのNANDドライバ、
DRAMドライバなどをサポート
NANDイメージのビルド ‐ 2
• U‐boot: – LinuxのブートローダであるU‐bootイメージをビル
ド
– HWブートは、U‐BootをDRAMにロードし、制御を
U‐Bootに移す
NANDイメージのビルド ‐ 3
• Linux Kernel: – Linux kernelイメージのビルド
– U‐Bootは、Linux Kernelをロードし、制御をカーネルに
移す
NANDイメージのビルド ‐ 4
• アプリケーション, 動的ドライバ, データファイ
ル: – 各ファイルをファイルシステムの管理バウンダリ
に合わせて重ならないアドレスに配置、管理テー
ブルデータと結合し一つのバイナリファイルを生
成する
How to build NAND image ‐ 5
書込みファイルイメージ
個別ファイルイメージ
NAND イメージ
NAND image
Sector 0: HWブート
p0: HWブート
Adr p0: HWブート
Adr p1‐pL: U‐boot
Adr p1‐pL: Kernel
Adr pL‐pM: Linux Kernel, static driver
Adr pM‐pN: Apps.,
dynamic driver, Data files
Data Mapper
Software Bad Block
Sector L‐M: Linux Kernel, ドライバ
Adr pL‐pM: Linux Kernel, static driver
Adr pM‐pN: Apps.,
dynamic driver, Data files
Adr pM: file#1
Adr pM+1: file#2
Adr pN: file#N
Adr pEnd: バッドブ
ロックテーブル初期値
Sector 1‐L: U‐boot
Adr pEnd: BBT
書き込み用に一つのバイナリイメージファイルを
ビルドします。個々の物理アドレスは、重ならない
領域にとる必要があります。
Bad Block
ファイルシステム
Bad Block
Sector M‐N:
ファイルシステム
‐> アプリケーショ
ン, データファイル
Bad Block
Sector End: バッド
ブロックテーブル