Linux on Beagleboard

 このページの内容は、Beagleboard-xM RevCを対象としています。文中にBeargleboardと書いているものは、すべてBeagleboard-xMです
また、動作環境は、Windows XP上でVMware Player を起動し、この中のUbuntu 12.04 kernel 3.2.0で行っています。
Beagleboardの詳細情報はここから入手できます。
Beagleboardに乗せるLinuxの開発はeLinux.org上で盛んに行われています。
ここでは、いろいろなディストリビューションのBeagleboardへのインストール方法が紹介されています。
基本的にはx86系パソコンを親機としてダウンロード、展開、スクリプトの実行などの作業を行い、SDカードリーダを介してbeagleboaed用SDカードに書き込みます。
SDカードの準備ができたら、親機とBeaglegoardをシリアルケーブルでつなぎ、親機側でminicomなどのシリアルコンソールを起動しておいて、beagleboardを起動、操作をします。
以下の説明では、親機上の操作Beagleboard上の操作を色分けして説明します。

Ununtu 12.04 プレインストール

Canonical Pre-Installed Images
Ubuntu 12.04最小構成のプレインストールイメージのSDカードが作成できます。
SDカードのフォーマットをすべて削除し、セットアップスクリプトを実行するだけで、ブートローダからカーネルイメージ、Ubuntuのルートファイルシステムまですべてスクリプトで作成してくれます。
スクリプト内で、uboot-mkimage、wget、pv、mkfs、vfat、partprobeがインストール済みかどうかチェックされます。未導入のパッケージがあれば事前にインストールしておきます。
wget http://rcn-ee.net/deb/rootfs/precise/ubuntu-12.04-r1-minimal-armhf.tar.xz
md5sum ubuntu-12.04-r1-minimal-armhf.tar.xz 28a2e3969f3d6dd434d2481fd443e634 ubuntu-12.04-r1-minimal-armhf.tar.xz

tar xJf ubuntu-12.04-r1-minimal-armhf.tar.xz
cd ubuntu-12.04-r1-minimal-armhf
sudo ./setup_sdcard.sh --mmc /dev/sdX --uboot beagle_xm

loginID ubuntu
passwd temppwd

所要時間 約5分
boot 7.9MB
rootfs 556.6MB

他のパッケージでも同じですが、BeagleboardのLANポートはUSB1として認識されるのでネットワークの設定を変更する必要が有ります。
/etc/network/interfaces を開き
auto usb1
iface usb1 inet dhcp
の行を追加します。

固定IPにするなら
auto usb1
iface usb1 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
を追加
/etc/resolv.conf に
nameserver 192.168.1.1
を追加します。(設定するアドレス値はお使いの環境によります)

Debian 6 ネットインストール

Debian NetInstall
Debian6のネットインストール用SDカードが作成できます。
Ubuntu同様、空のSDカードをセットすると、フォーマット、ファイルのダウンロード、コピーまで全てスクリプトが行ってくれます。
出来上がったSDカードをBeagleboardに挿して、シリアルコンソールをつないで起動すると、Debianのキャラクタベースのネットインストールが開始されます。
ところが、インストーラ起動時にBeagleboardのLANコネクタであるUSB1はまだ認識されていないので、このままではネットに接続できません。
eLinuxでは、親機のLinuxマシンのイーサネットをUSB経由でブリッジし、BeagleboardのUSBポートとつないでネットに接続する方法も紹介されていますが、
これにはめったに使わない両端USB Aコネクタのケーブルが必要になると思います。
このケーブルを入手するなら、少し高価でもUSB-LANアダプタを調達した方が便利かもしれません。
例えば、LUA3-U2-ATX のような物
USB-LANアダプタかUSBブリッジのいずれかの方法でネットに接続、パソコンとシリアルケーブルで接続し、シリアルコンソールでモニターした状態で Beagleboardを起動すると、通常のDenianネットインストールが開始されます。
ただ、Beagleboardがいくら早いと言っても、SDカードの読み書きなどのハンディがあるため、相当な時間が掛かります。

git clone git://github.com/RobertCNelson/netinstall-omap.gitcd netinstall-omap
cd netinstall-omap

./mk_mmc.sh --mmc /dev/sdX --uboot beagle --distro squeeze
オプション:
--uboot : beagle, (panda only serial, display not working)
--distro : squeeze
--firmware : installs firmware
--serial-mode : debian-installer uses Serial Port
--usb-rootfs : (uImage on /dev/mmcblkp0 and rootfs on external usb drive /dev/sda1)

ネットインストール中に、USB-LANアダプタがeth0として認識されます。 ロケール、rootパスワード、ユーザー、ユーザーパスワードなどは、ネットインストール中に設定します。(通常のネットインストールと同じですね)

所要時間約7時間
boot 8.1MB
rootfs 3.2GB

Rootstock Ubuntu

Build an Ubuntu root file system with RootStock
Rootstockプロジェクトで開発されている、Ubuntu最小構成のルートファイルシステム、カーネルイメージ、イニシャルラムディスクが作成できます。
こちらは、インストーラではないので、SDカードのフォーマットからブートローダ、ルートファイルシステムのセットアップまですべて手動で行って行きます。
親機としてUbuntu 11.04以上が必要です
ただし、Rootstockプロジェクトは、oneiric以降のリポジトリからはずされたようです。
本家 Launchpad も休止になっているようです。
ですので、古いリポジトリからdebパッケージを入手するしか無いようです。

Rootstockと Bazaarをインストールします。
sudo apt-get install rootstock bzr
bzr branch lp:project-rootstock
cd project-rootstock

Rootstock のコマンドラインは以下のようになっています。
sudo ./rootstock --fqdn --login --password --imagesize \
--seed --dist --serial --kernel-image
オプション --seed にインストールするパッケージを追加指定することができます。
役立つパッケージとして
linux-firware、ntpdate GUIを使う場合 xfce4が紹介されています。

ただし、いつの間にか rmコマンドの dオプションが使えなくっているようなので、rootstockをエディタで開き、555行目の
rm -rfd $KERNELDIR を rm -rf $KERNELDIR に変更します。

Ubuntu 12.04 Beagleboard の最小イメージの場合の実例
sudo ./rootstock --fqdn omap --login ubuntu --password temppwd --imagesize 2G \
--seed wget,nano,linux-firmware,wireless-tools,usbutils \
--dist precise \
--serial ttyO2 \
--components "main universe multiverse" \
--kernel-image http://rcn-ee.net/deb/precise-armel/v3.2.0-x1/linux-image-3.2.0-x1_1.0precise_armel.deb
/project-rootstockディレクトリに
armel-rootfs-.tar
vmlinuz-3.2.0-x1
initrd.img-3.2.0-x1
が作成されます。

SDカードを手動セットアップ
60MB程度をPrimaryパーティションとし割り当て、FAT16かFAT32でフォーマットし、残りを、ext2、ext3、ext4、btrfsでフォーマットします。

sudo parted -s /dev/sdX mklabel msdos
sudo fdisk /dev/sdX << MMC_END
> n        
--新規作成
> p        --プライマリ
> 1        --番号1
> 1        --1シリンダから
> +64M       --64M分
> n        --新規作成
> p        --プライマリ
>         --改行
>         --改行(最後まで)
> t        --タイプ
> 1        --1番を
> e        --FAT16 FAT32ならc
> a        --ブートフラグ作成
> 1        --1番に
> t        --タイプ
> 2        --2番を
> 83        --Linuxタイプ
> p        --プリント
> w        --書込み
> MMC_END

確認
sudo fdisk -l /dev/sdX

Disk /dev/sdb: 3965 MB, 3965190144 bytes
122 heads, 62 sectors/track, 1023 cylinders
Units = cylinders of 7564 * 512 = 3872768 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000aed6

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 18 68045 e W95 FAT16 (LBA)
/dev/sdb2 19 1023 3800910 83 Linux

フォーマット
sudo mkfs.vfat -F 32 /dev/sdX1 -n boot
sudo mkfs.ext3 /dev/sdX2 -L rootfs

SDカードのフォーマットについてSD/MMC format for OMAP3 bootでは ヘッダー数を255に設定するようになってますが、Canonial Pre-installed Imagesや、NetInstallのスクリプトは特別な処理はされておらず、また、 こちらの調査でも、ヘッダー数を特別に設定しなくても問題なくブートしているので、そのままフォーマットしています。

以下は、SDカードを抜き差しして /media/bootと /media/rootfs にマウントされたものとして

MLO と U-Bootを入手
今回は、MLOとu-boot.binはバイナリーイメージを使います。
ここから MLOとU-Bootのバイナリーイメージをダウンロードしコピーします

まず、ダウンロードした"MLO-beagleboard-1.5.0+r24+gitr04b1732220078d47c18a84cbafc52e45db71f13d-r24" を MLO としてブートパーティションにコピーします
wget rcn-ee.net/deb/tools/MLO/MLO-beagleboard-1.5.0+r24+gitr04b1732220078d47c18a84cbafc52e45db71f13d-r24
cp MLO* /media/boot/MLO
次に "u-boot-beagleboard-20XX.XX+r62+gitX-rX.bin" を u-boot.bin としてコピーします
wget rcn-ee.net/deb/tools/UBOOT/u-boot-beagleboard-2011.02+r75+gitrc7977858dcf1f656cbe91ea0dc3cb9139c6a8cc8-r75.bin
cp u-boot* /media/boot/u-boot.bin

U-Boot 用に uImage と uInitrd を作成
Rootstockで作成された、vmlinuz-3.2.0-x1 と initrd.img-3.2.0-x1 から uImage と uInitrd を作成します。
vmlinuz initrd.img はおなじみのx86系の grubなどで使われるイメージ、uImage uInitrd は uboot用のカーネルイメージとイニシャルラムディスクです。
ちなみに、Beagleboard-xMについてくるAngstromはイニシャルラムディスクを使わず直接uImageを起動しているんですね。

mkimageをインストールし、u-Bootイメージに変換します。
sudo atp-get install uboot-mkimage
mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008000 -n "Linux" -d ./vmlinuz-* ./uImage
mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 -n initramfs -d ./initrd.img-* ./uInitrd
出来上がったuImage と uInitrd をブートパーティションにコピーします。
cp uImage /media/boot
cp uInitrd /media/boot

uEnv.txt を作成
echo 'bootenv=boot.scr
> loaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
> mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}' > uEnv.txt
シングルコーテーション間のコマンドをエディタで書いて uEnv.txt として保存してもOK
uEnv.txtをブートパーティションをコピーします。
cp uEnv.txt /media/boot

boot.cmd を作成し、これをU-Bootの実行形式の boot.src に変換し、RootFSパーティションにコピーします。
echo 'setenv dvimode 1280x720MR-16@60
> setenv vram 12MB
> setenv bootcmd 'fatload mmc 0:1 0x80300000 uImage; fatload mmc 0:1 0x81600000 uInitrd; bootm 0x80300000 0x81600000'
> setenv bootargs console=ttyO2,115200n8 console=tty0 root=/dev/mmcblk0p2 rootwait ro vram=${vram} omapfb.mode=dvi:${dvimode} fixrtc
> buddy=${buddy} mpurate=${mpurate}
> boot' > boot.cmd

mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Ubuntu" -d ./boot.cmd ./boot.scr
cp boot.scr /media/boot

Boot パティションは最終的に
ls /media/boot
MLO
boot.scr
u-boot.bin
uEnv.txt
uImage
uInitrd
となります。

さきほどRootstockで作成されたルートファイルシステムを、rootfsパーティションに展開します。
sudo tar xfp armel-rootfs-*.tgz -C /media/rootfs

loginID ubuntu
passwd  temppwd

所要時間約45分 (Rootstockの実行時間)
boot 6.8MB
rootfs 502.8MB
xfce4 をいれると 745.9MB

xfce4はXubuntuに使われている軽量Xサーバーですが、この状態では日本語表示が出来ないので、language-pack-jaをインストールします。
-seed に xfce4,language-pack-ja を追加します。
xfce4の起動は
startxfce4
startx でも可

inserted by FC2 system