組み込みAndroid

開発奮闘記

4.BeagleBoardでUbuntuを起動させる

BeagleBoardをSDカードからbootしてみることに。
そのためには"MLO","u-boot.bin","uImage","ルートファイルシステム(RFS)"が必要となる。

まずは起動に使用するSDカードの準備をします。当方が行った具体的な操作は以下になります。

SDカード(/dev/sdbがSDカードとする)からのブートに対応した第1パーテーションの作成

$ sudo fdisk /dev/sdb
command (m for help): p //←パーテーション状態を確認

デバイスBootStartEndBlocksIdSystem
/dev/sdb1195415689728cW95 FAT32 (LBA)

command (m for help): d //←新品にデフォルトで作成されているFATパーテーションの削除
selected partition 1

command (m for help): x //←fdiskをエキスパートモードに切り替える
expert command (m for help): h //←ヘッド数を設定
number of heads (1-256, default 82): 255 //←255ヘッドに
expert command (m for help): s //←セクタ/トラックを設定
number of sectors (1-63, default 17): 63 //←63セクタ/トラックに
warning: setting sector offset for DOS compatiblity
expert command (m for help): c //←シリンダを設定
number of cylinders (1-1048576, default 486): 15 //←15シリンダに
expert command (m for help): r //←エキスパートモードから抜ける

command (m for help): n //←新規パーテーション作成
command action
 e extended
 p primary partition (1-4)
p //←primaryを選択
partition number (1-4): 1 //←第1パーテーション
first cylinder (1-15 default 1): 1 //←先頭から
using default value 1
last cylinder or +size or +sizeM or +sizeK (1-15 default 15): 15
using default value 15
command (m for help): t //←パーテーションタイプの変更
selected partition 1
hex code (type L to list codes): c //←FAT32に切り替え
changed system type of partition 1 to c (W95 FAT32 (LBA))
command (m for help): a //←ブートフラグ設定
partition number (1-4): 1 //←第1パーテーションにブートフラグ設定
command (m for help): p //←最終確認としてパーテーション状態を確認

デバイスBootStartEndBlocksIdSystem
/dev/sdb*115120487cW95 FAT32 (LBA)

command (m for help): w //←書き込んで終了

次にSDカード上にファイル・システムを作成します

この作業には「gparted」というGUIのツールを使います。
・インストール(インストールしていない場合)
 $ sudo apt-get install gparted

・起動
 $ sudo gparted
 1.メニューから[GParted]-[デバイス]と選んで、デバイスを/dev/sdb(/dev/sdbがSDカードとする)に切り替えます。
 2.第1パーテーションを選択して右クリック-[フォーマット]と選んで、FAT32を選びます。
   ※もし、右クリックで[フォーマット]が非表示の場合は、[パーティション]-[アンマウント]を実行してください。
 3.未アロケートを選択して右クリック-[新規]を選んでください。
 4.[新規パーテーションの作成]ウィンドウのファイルシステムを[ext3]に変更して[追加]を押す。
 5.最後にメニューの[編集]から[全ての操作を適用]を選んで終了となります。

ここまででSDカードの下準備は終了です。

さて、今回はUbuntuをSDカードから起動しようとしているわけですが、
本来の目的は・・・BeagleBoardでAndroidを起動することなので
日経Linux2009年7月号(またもや?!)の付録のメディアを利用して簡単に済ませる事にしました。

最初にSDカードの第1パーテーションに"MLO"と"カーネル(uImage)"を転送する。
"MLO"は第1パーテーションの先頭に配置しなければなりませんので、第1パーテーションを初期化した直後に転送する必要があります。
※ここでもSDカードは/dev/sdbとする
・MLOの転送
 $ sudo mount /dev/sdb1 /mnt //←第1パーテーションをマウントする
 $ sudo cp /media/cdrom/article/toku3/MLO_revc_v3 /mnt/MLO //←転送する

続いて第1パーテーションに"カーネル(uImage)"を転送する。
・カーネル(uImage)の転送
 $ sudo cp /media/cdrom/article/toku3/uImage /mnt //←転送する
 $ sudo umount /mnt //←第1パーテーションをアンマウントする

さらに第2パーテーションに"ルートファイルシステム(RFS)"を転送する。
・ルートファイルシステム(RFS)の転送
 $ sudo mount /dev/sdb2 /mnt //←第2パーテーションをマウントする
 $ sudo tar xvzpf /media/cdrom/article/toku3/armel-rootfs-lxde-200905161138.tar -C /mnt/ //転送する

ここまで終了したら、シリアルコンソールにログインをするためのツールが起動するように
/mnt/etc/event.d/に"ttyS2"というテキストファイルを作成する。
内容は
 start on runlevel 2
 start on runlevel 3

 stop on runlevel 0
 stop on runlevel 1
 stop on runlevel 4
 stop on runlevel 5
 stop on runlevel 6

 respawn
 exec /sbin/getty -L 115200 ttyS2
とする。
なお、最終行のttyS2はシリアルUSB変換を使用する場合にはttyusb0とする必要がある。

USBイーサネットアダプタを使う場合には、起動直後にLANが利用できるように
/mnt/etc/network/interfacesに次の4行を追加すること。
 auto eth0
 iface eth0 inet dhcp
 auto eth1
 iface eth1 inet dhcp

次に、/tmpにtmpfsがマウントされるように
/mnt/etc/fstabに以下の1行を追加する。
tmpfs /tmp tmpfs defaults 0 0

そして最後に付録のメディアからカーネル・ドライバ・モジュールを転送します。
・カーネルドライバモジュールの転送
 $ sudo tar xvzpf /media/cdrom/article/toku3/omap3_modules.tar.gz -C /mnt/ //転送する
 $ sudo umount /mnt //←第2パーテーションをアンマウントする

ここまで終わってやっと起動確認です。
BeagleBoardにSDカードを挿入してボードの電源ONしてください。
起動する際に、RS232Cで接続されているPCの通信ソフトを起動しておくとログが出てきます。
途中でカウントダウンがありますが、それが0になる前に"enter"キーを押下して以下のコマンドを送信してください。
# setenv bootcmd 'mmcinit; fatload mmc 0:1 0x80300000 uImage; bootm 0x80300000'
# setenv bootargs 'console=ttyS2,115200n8 console=tty0 root=/dev/mmcblk0p2 rootdelay=2 rootfstype=ext3 ro omap-dss.def_disp=lcd omapfb.video_mode=1280x720MR-16@60'
# saveenv
# boot

これで起動すると思います。

 5.BeagleBoardでAndroidを起動させる