Linuxで自己起動可能なSDまたはMMCカードを作成できます。
このチュートリアルでは、SD / MMCカードから起動する完全なLinuxシステム(ブートローダー+ Linuxカーネル+ルートファイルシステム)を作成する方法について説明します。
これは、SD / MMCカードに自己完結型できるいくつかのLinuxイメージをデモンストレーションする意思のある人々にとって非常に便利です。
SDカードからLinuxを起動するには、最初に行うことは、ブートローダーをカードにプログラムすることです。これを行うには、以下のリンクをクリックしてください。
また、任意のLinuxシステムでddを使用してredbootをロードすることもできます。
$ sudo dd if=./Desktop/mx35_3stack_redboot_mmc.bin of=/dev/sdd bs=512 skip=2 seek=2
Linux ブータブル MMC/SD カードの作成。
LTIBを実行します。
$ ./ltib-c
カーネルの設定を選択します。
[*]カーネルの設定
イメージ生成を NFS に変更します。
ターゲットイメージの生成
オプション--->
(X) NFSのみ
MMC/SD と ext3 への組み込みサポートを持つ Linux カーネルをコンパイルします。
次の順序に従います。
デバイスドライバー--->
<*> MMC/SDカード対応--->
<*> Freescale MMC/SDIO用UniFi SDIO接着剤
<*> フリースケール i.MX セキュア・デジタル・ホスト・コントローラ・インタフェースのサポート
ファイル・システム--->
<*> Ext3 ジャーナリング・ファイル・システムのサポート
コンパイル後、ファイル ~/ltib/rootfs/boot/zImage を tftpboot ディレクトリにコピーします。
$ cp ~/ltib/rootfs/boot/zImage /tftpboot
RedBootパーティションを作成し、Linuxカーネルをそれにコピーします。
MMC をアクティブにします。
RedBoot> factive MMC
フラッシュパーティションを初期化します。
RedBoot> fis init
RedBoot> FIS一覧
...0x07ee0000-0x07eff000 at 0x00060000: から読みます。
名前:FLASH addr Mem addr Length エントリポイント
RedBoot 0x00000000 0x00000000 0x00040000 0x00000000
FIS ディレクトリ0x00060000 0x00060000 0x0001F000 0x00000000
RedBoot構成0x0007F000 0x0007F000 0x00001000 0x00000000
カーネルをRAMにロードします。
RedBoot> load -r -b 0x100000 /tftpboot/zImage
デフォルトプロトコル(TFTP)の使用
RAWファイルは0x00100000-0x002c31b7でロードされ、0x00100000でエントリーが想定されます
カーネルイメージの内容をRAMにロードしたカーネルパーティションを作成します。
RedBoot> fはカーネル0x200000を作成します
RedBoot> FIS一覧
...0x07ee0000-0x07eff000 at 0x00060000: から読みます。
名前:FLASH addr Mem addr Length エントリポイント
RedBoot 0x00000000 0x00000000 0x00040000 0x00000000
FIS ディレクトリ0x00060000 0x00060000 0x0001F000 0x00000000
RedBoot構成0x0007F000 0x0007F000 0x00001000 0x00000000
kernel 0x00200000 0x00100000 0x001E0000 0x00100000
ボードをリセットする場合は、次の情報を確認する必要があります。
[SDカード、CSDバージョン1.0]からの起動
代わりに 、次のメッセージ が表示された場合:
[不明なバージョンのカード]から起動しています
これは、お使いのカードがサポートされていないことを意味しますので、他のカードと交換してください。
カーネルイメージをSDカードに保存した後、ターゲットボードからカードを取り外し、コンピューター(Linuxを実行)に挿入します。
この例では、Linux は SD カードを /dev/sdb として検出しました。
次に、2つのパーティションを作成する必要があります。最初のパーティションは使用されず、これは RedBoot とカーネルに予約されているだけです。2 番目のパーティションは、Linux ルート ファイル システムの格納に使用されます。
# fdisk /dev/sdb
デバイスに有効な DOS パーティションテーブルも、Sun、SGI、OSF ディスクラベルも含まれていない
ディスク識別子 0x526c22da を持つ新しい DOS ディスクラベルの構築。
変更は、書き込むことを決定するまで、メモリにのみ残ります。
その後、当然のことながら、以前のコンテンツは復元できません。
警告: パーティション テーブル 4 の無効なフラグ 0x0000 は w(rite) によって修正されます
コマンド(ヘルプのm):p
Disk /dev/sdb: 1023 MB, 1023934464 bytes
32ヘッド、62セクタ/トラック、1008気筒
単位 = 1984 のシリンダ * 512 = 1015808 バイト
Disk identifier: 0x526c22da
デバイスブート開始終了ブロックIDシステム
最初のパーティションを 8 MB で作成します。以前に保存したように、すでにRedBootとカーネルが含まれています。
コマンド (m はヘルプ): n
コマンドアクション
E拡張
p プライマリ パーティション (1-4)
P
パーティション番号(1-4):1
最初のシリンダー (1-1008、デフォルト 1):
デフォルト値 1 を使用
最後のシリンダー、+シリンダー、または +サイズ{K,M,G} (1-1008、デフォルト 1008): +8M
次に、SDカードの残りのスペースをすべて使用して2番目のパーティションを作成します。
コマンド (m はヘルプ): n
コマンドアクション
E拡張
p プライマリ パーティション (1-4)
P
パーティション番号(1-4):2
最初のシリンダー (10-1008、デフォルト 10):
デフォルト値 10 を使用
最後のシリンダー、+シリンダー、または +size{K,M,G} (10-1008、デフォルト 1008):
デフォルト値 1008 を使用
コマンド(ヘルプのm):p
Disk /dev/sdb: 1023 MB, 1023934464 bytes
32ヘッド、62セクタ/トラック、1008気筒
単位 = 1984 のシリンダ * 512 = 1015808 バイト
Disk identifier: 0x526c22da
デバイスブート開始終了ブロックIDシステム
/dev/sdb1 1 9 8897 83 Linux
/dev/sdb2 10 1008 991008 83 Linux
コマンド(ヘルプのm):w
次に、2番目のパーティションをEXT3としてフォーマットします。
# mkfs.ext3 /dev/sdb2
SDカードをコンピュータから取り外し、再度挿入します。おそらく、Linuxディストリビューションがそれをデテクトし、自動的にマウントします。
Ubuntu 8.10では、/dev/mediaにマウントされました。
#マウント
...
/media/disk 上の /dev/sdb2 タイプ ext3 (rw,nosuid,nodev,uhelper=hal)
Linuxがマウントしなかった場合、手動でマウントできます。
# mkdir -p /media/disk
# /dev/sdb2 -t ext3 /media/disk をマウント
LTIBディレクトリに入力し、rootfsの内容をSDカードにコピーします。
# cd /home/alan/ltib-imx35/rootfs/
# cp -a * /media/disk/
正しくコピーされたかどうかを確認します。
# ls -l /media/disk/
合計 80
DRWXR-XR-X 2 ルート ルート 4096 2009-03-12 09:55 ビン
drwxr-xr-x 2 root root 4096 2009-03-12 09:53 ブート
drwxr-xr-x 2 root root 4096 2009-03-12 09:55 dev
drwxr-xr-x 6 root root 4096 2009-03-12 14:41 など
drwxr-xr-x 3 root root 4096 2009-03-12 09:53 ホーム
drwxr-xr-x 4 root root 4096 2009-03-12 09:55 lib
lrwxrwxrwx 1 root root 11 2009-03-12 14:47 linuxrc -> bin/busybox
drwx------ 2 root root 16384 2009-03-12 14:37 lost+found
drwxr-xr-x 7 root root 4096 2009-03-12 09:53 mnt
drwxr-xr-x 2 ルート ルート 4096 2009-03-12 09:53 OPT
drwxr-xr-x 2 root root 4096 2009-03-12 09:53 proc
drwxr-xr-x 2 root root 4096 2009-03-12 10:10 root
drwxr-xr-x 2 ルート ルート 4096 2009-03-12 09:55 sbin
drwxr-xr-x 2 root root 4096 2009-03-12 09:53 sys
drwxrwxrwt 3 root root 4096 2009-03-12 09:53 tmp
drwxr-xr-x 2 root root 4096 2009-03-12 09:55 unit_tests
drwxr-xr-x 9 root root 4096 2009-03-12 09:55 usr
DRWXR-XR-X 11 ルート ルート 4096 2009-03-12 09:55 var
root@urubu:~/ltib-imx25/rootfs#
次に、SDカードをアンマウントします。
# umount /media/disk
SDカードをコンピュータから取り外し、ボードに再度配置します。
RedBoot が SD/MMC カードからカーネルをロードするように設定し、カーネルコマンドパラメータ "root" を設定して 2 番目の SD/MMC カードパーティション (/dev/mmcblk0p2) からルートファイルシステムをロードするように設定します。
RedBoot> fc
起動時にスクリプトを実行: true
ブートスクリプト:
スクリプトを入力し、空行で終了します
>> fis load kernel
>> exec -b 0x100000 -l 0x200000 -c "noinitrd console=ttymxc0,115200 root=/dev/mmcblk0p2 init=/linuxrc ip=none"
>>
ブートスクリプトのタイムアウト(1000msの解像度):1
ネットワーク設定にBOOTPを使用:false
ゲートウェイ IP アドレス: 10.29.244.254
ローカル IP アドレス: 10.29.244.135
ローカル IP アドレス マスク: 255.255.0.0
デフォルトのサーバーIPアドレス:10.29.240.182
ボードの詳細:0
コンソールのボーレート:115200
eth0ネットワークハードウェアアドレスの設定[MAC]:false
FECネットワークハードウェアアドレスの設定[MAC]:false
GDB接続ポート:9000
特別なデバッグ メッセージの強制コンソール: false
ブート時のネットワークデバッグ:false
デフォルトのネットワークデバイス:lan92xx_eth0
RedBootの不揮発性構成を更新します-続行(y / n)?y
...0x07ee0000-0x07eff000 at 0x00060000: から読みます。
...0x00060000-0x00080000から消去: .
...0x00060000での0x07ee0000-0x07f00000からのプログラム:。
ボードをリセットするだけで、SD / MMCカードから直接起動します。