Armadillo-440:PC上で、microSDカードにカーネル、ユーザーランドを構築する方法です。(Linux-2.6.26版)
参考)Armadillo上で、カーネル、ユーザーランドを構築する場合
Armadillo-440:microSDカード上のカーネル、ユーザーランドで起動する(Linux-2.6.26版)
Armadillo-440は、2つのカーネルバージョン(Linux-2.6.26、Linux-3.14)があります。
Armadillo-440のカーネルバージョンは、起動直後のコンソールのログで確認できます。
Linux-2.6.26の例)起動直後のログが「Hermit-At v2」で始まる
Hermit-At v2.5.0 (armadillo4x0) compiled at 06:49:08, Jul 10 2018
Linux-3.14の例)起動直後のログが「Hermit-At v3」で始まる
Hermit-At v3.11.0 (armadillo4x0) compiled at 08:31:07, Mar 30 2018
ここでは、Linux-2.6.26版で説明します。
Linux-3.14版は、 Armadillo-440:PC上で、microSDカードにカーネル、ユーザーランドを構築する(Linux-3.14版)を
参照ください。
1.PC上にATDEを構築する
(既に構築済みの場合は不要です。)
下記を参考に、PC上にATDEを構築します。
Armadillo実践開発ガイド~組み込みLinuxの導入から製品化まで~第1部
6.1. Windows PC上にATDEを構築する
2.ATDEにカーネル、ユーザーランドのイメージファイルを準備
ATDE上にカーネル、ユーザーランドのイメージファイルを準備します。
ここでは、標準のカーネル、ユーザーランドのイメージをダウンロードします。
atmark@atde5:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-440/image/linux-a400-1.20.bin.gz atmark@atde5:~$ wget https://armadillo.atmark-techno.com/files/downloads/armadillo-440/image/romfs-a440-1.13.img.gz
上記の場合、イメージファイル名は下記になります。
カーネル:linux-a400-1.20.bin.gz
ユーザーランド:romfs-a440-1.13.img.gz
以下の手順では、このファイル名で記述します。異なるイメージを使用する場合は、ファイル名を読み替えください。
3. microSDカードのフォーマット
PCにmicroSDカードを接続し、ATDEで認識させます。
参考)
TIPS:ATDEでUSBメモリ/SDカードをマウントする方法
mountコマンドでmicroSDカードのデバイスファイルを確認しておきます。
例)
atmark@atde5:~$ mount | grep "/dev/sd*" /dev/sda1 on /boot type ext2 (rw,relatime,errors=continue) /dev/sdb1 on /media/E414-2F9B type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks) /dev/sdb2 on /media/00fbc669-a0e7-4aa5-936c-f717a7f9fc78 type ext3 (rw,nosuid,nodev,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered,uhelper=udisks)
上記の下2行が、microSDカードが/dev/sdbで認識された状態です。
この例では、2つのパーティションを持つmicroSDカードを使用したため、/dev/sdb1、/dev/sdb2で認識されています。
以下の手順のmicroSDカードのデバイスファイルは、上記例でのファイル名で示します。
異なるデバイスファイル名で認識されている場合は、読み替えてください。
3-1. microSDカードのパーティションの設定
microSDカードをアンマウントします。
上記例の場合、/dev/sdb1、/dev/sdb2
atmark@atde5:~$ sudo umount /dev/sdb1 atmark@atde5:~$ sudo umount /dev/sdb2
補足)上記および以下、sudoで始まるコマンド実行時、パスワードを要求された場合は、atmark と入力。
// fdiskコマンドをmicroSDカード(/dev/sdb)に対して実行します。 aatmark@atde5:~$ sudo fdisk /dev/sdb Command (m for help): d // dを入力(パーティションの削除。複数ある場合はすべて削除。) Partition number (1-4): 1 Command (m for help): d // dを入力(パーティションの削除。複数ある場合はすべて削除。) Selected partition 2 Command (m for help): n // nを入力 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p // pを入力 Partition number (1-4, default 1): 1 // 1を入力 First sector (2048-31116287, default 2048): // そのまま Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-31116287, default 31116287): // そのまま Using default value 31116287 Command (m for help): w // wを入力 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. // 以上で、fdisk内での設定が完了し、プロンプトに戻ります。 atmark@atde5:~$
上記により、microSDカードが1つのパーティション(/dev/sdb1)が作成されています。
atmark@atde5:~$ sudo fdisk -l /dev/sdb Disk /dev/sdb: 15.9 GB, 15931539456 bytes 32 heads, 32 sectors/track, 30387 cylinders, total 31116288 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x38b2051b Device Boot Start End Blocks Id System /dev/sdb1 2048 31116287 15557120 83 Linux
3-2. microSDカードのフォーマット
atmark@atde5:~$ sudo mke2fs -j /dev/sdb1 atmark@atde5:~$ sudo tune2fs -i 0 /dev/sdb1
上記3-1,3-2の手順の詳細は
Armadillo実践開発ガイド第2部「4.1.1. パーティションの作成とフォーマット」を参考。
4. カーネル、ユーザーランドをmicroSDカードに書き込む
手順2で用意したイメージファイルを使って、microSDカード(/dev/sdb1)に
カーネル、ユーザーランドを書き込みます。
4-1. カーネルの書き込み
カーネルイメージ(本例では:linux-a400-1.20.bin.gz)をmicroSDカード(/dev/sdb1)に書き込みます。
atmark@atde5:~$ mkdir sd atmark@atde5:~$ sudo mount -t ext3 /dev/sdb1 sd atmark@atde5:~$ sudo mkdir -p sd/boot atmark@atde5:~$ sudo cp linux-a400-1.20.bin.gz sd/boot/linux.bin.gz
4-2. ユーザーランドの書き込み
手順2で用意したカーネルイメージ(本例では:romfs-a440-1.13.img.gz)をmicroSDカード(/dev/sdb1)に書き込みます。
atmark@atde5:~$ mkdir romfs atmark@atde5:~$ gzip -c -d romfs-a440-1.13.img.gz > romfs.img atmark@atde5:~$ sudo mount -o loop romfs.img romfs atmark@atde5:~$ sudo cp -a romfs/* sd atmark@atde5:~$ sudo umount romfs atmark@atde5:~$ rmdir romfs
4-3. ユーザーランドのfstabファイルの変更
ユーザーランドのfstabファイルの内容を変更します。
変更前のfstabファイルは、下記のようになっています。
atmark@atde5:~$ cat sd/etc/fstab /dev/ram0 / ext2 defaults 0 1 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 sysfs /sys sysfs defaults 0 0
上記(変更前)の1行目のram0をmmcblk0p1に、ext2をext3にします。
エディタ(vi、gedit)でfstabファイルを編集、もしくは、下記コマンドで変更します。
atmark@atde5:~$ sudo sed -i -e 's/ram0/mmcblk0p1/' sd/etc/fstab atmark@atde5:~$ sudo sed -i -e 's/ext2/ext3/' sd/etc/fstab
変更後のfstabファイルは、下記のようになります。
atmark@atde5:~$ cat sd/etc/fstab /dev/mmcblk0p1 / ext3 defaults 0 1 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 sysfs /sys sysfs defaults 0 0
microSDカードをアンマウントします。
atmark@atde5:~$ sudo umount sd atmark@atde5:~$ rmdir sd
以上で、カーネル、ユーザーランドが起動するmicroSDカードの作成は終了です。
Armadillo-440をmicroSDカードのカーネル、ユーザーランドで起動するには、
保守モード(※)で起動して、ブートローダーを設定します。
※)保守モードでの起動方法(SW1を押下したまま起動。または、JP1:オープン、JP2:ショートで起動。)
Armadillo-400 シリーズ
ソフトウェアマニュアル「3.8. ブートモード」
ブートローダーで、下記のように設定します。
hermit> setenv console=ttymxc1 root=/dev/mmcblk0p1 noinitrd rootwait hermit> setbootdevice mmcblk0p1
以降、Armadill-440は、microSDカードのカーネル、ユーザーランドで起動します。
補足1)microSDカードのカーネル、ユーザーランドで起動した場合、終了の際はpoweroffコマンドを実行します。
(microSDカード上のファイルシステムを正常に終了するためにシャットダウンします。)
[root@armadillo440-0 (ttymxc1) ~]# poweroff
補足2)ROMのカーネル、ユーザーランドでの起動に戻すには、保守モードで起動して下記のように設定します。
hermit> clearenv hermit> setbootdevice flash