[Armadillo:03252] SDカードから起動したい

Makoto Endo email@hidden
2008年 8月 12日 (火) 12:10:23 JST


遠藤と申します。
Armadillo-500を使用してます。

SDカードからLinuxを起動したいため、以下の手順で
SDカードのシステムを構築したのですが、Linuxカー
ネルがFlash(フラッシュメモリ)からロードされて
しまいます。
ブートローダがカーネルイメージを見つける
ことができずにFlashからロードしているのでしょうか?
ご教授お願いいたします。


*手順については、以下のHPを参考にさせて頂きました。
http://armadillo.atmark-techno.com/articles/sd-a500-embedded-course-ch7-1

*使用しているSDカードは以下の物です
SanDisk: ExtremeIII 2GB

*手順

1.fdiskコマンドでSDカードに以下のパーティションを作成。

Device Boot    Start       End    Blocks   Id  System
/dev/mmcblk0p1               1         978       31288   83  Linux
/dev/mmcblk0p2             979       61264     1929152   83  Linux

2.ファイルシステムの作成
以下の設定で作成します。

パーティション | サイズ | ファイル| システム用途 
---------------+--------+---------+-------------
      1           32M     ext2      カーネルイメージ用
      2          1.9G     ext3      ルートファイルシステム用
---------------+--------+---------+-------------

2.1 カーネルイメージ用ファイルシステムの作成

#mke2fs -O none /dev/mmcblk0p1

2.2 ルートファイルシステム用ファイルシステムの作成

#mke2fs -j /dev/mmcblk0p2 



3.ルートファイルシステムの構築

#mount /dev/mmcblk0p2 /mnt
#mkdir /mnt/work

(/mnt/work にユーザランドイメージを転送)

#gzip -dc romfs.img.gz > romfs.img
# mkdir romfs
# mount -t ext2 -o loop romfs.img romfs
# (cd romfs; tar cf - *) | (cd /mnt; tar xf -)
# sync
# umount romfs
# cd
# umount /mnt


4.カーネルイメージの配置

#mount /dev/mmcblk0p1 /mnt
#mkdir /mnt/boot

(/mnt/work にカーネルイメージを転送)

# cd /mnt/boot
# mv linux.bin.gz Image.gz
# cd
# umount /mnt


5.起動と設定

5.1 hermitのリコンパイル
hermitの"setbootdevice"コマンドで、mmcblk0p1を指定できるように、
以下のようにソースを変更しコンパイル。その後hermitで"bootloader"に
書き込む。

//hermit-at-1.1.9/src/target/armadillo5x0/board.c
------------------------------------------------------------
static int
setbootdevice_cmdfunc(int argc, char **argv)
{
        /* initialize parameter: bootdevice, using default flash */
        if (!check_param("@bootdevice")) {
                char *c_argv[2] = {argv[0], "flash"};
                sethermit_param(2, c_argv, "@bootdevice");
        }

        if (argc > 1)
                if (strcmp(argv[1], "flash") != 0 &&
                    strcmp(argv[1], "hda1") != 0 &&
                    strcmp(argv[1], "hda2") != 0 &&
                    strcmp(argv[1], "hda3") != 0 &&
                    strcmp(argv[1], "hda4") != 0 &&
                    strcmp(argv[1], "hda") != 0  &&
                    strcmp(argv[1], "mmcblk0p1") != 0 )
                        return -H_EINVAL;

        return sethermit_param(argc, argv, "@bootdevice");
}
----------------------------------------------------------------

5.2 オプション設定

hermit> setbootdevice mmcblk0p1
hermit> setenv console=ttymxc0 noinitrd root=/dev/mmcblk0p2 rootdelay=2

以上です。






armadillo メーリングリストの案内