BeagleBone BlackにはデフォルトでÅngstrom LinuxがeMMCにインストール済みですが、eMMCは寿命があるのでmicroSDカードから別のOSを起動するように設定します。
今回はDebianを選択しました。
※ Ubuntu, ArchLinuxでも同じ方針でインストールできます。
インストール
この手順ではU-Bootとルートファイルシステムをそれぞれ書き込む方法でインストールします。
(ArchLinuxをこの手順でインストールした事があるため)
※ イメージファイルを書き込む手順は下記ダウンロードページ他、色んなページで紹介されています。
使用させていただくファイル
今回はARM HF Linuxで公開されているイメージを利用させていただきました。(Debian/Ubuntuの場合)
ダウンロードページ
※ 後でwgetで取得する手順なのでココでダウンロードしておく必要はありません。
microSDカードにイメージを書き込む
以下、Mac上のUbuntu@VMWareFusionで作業しています。
※ VirtualBoxとかローカルでも大丈夫です。
microSDカードを確認
単純に接続前後で差分を確認する
接続前
~$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5
接続後
"/dev/sdb" として認識された状態
~$ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb
書き込み先のパーティションを作成
~$ sudo fdisk /dev/sdb
パーティションはArchLinuxのインストール手順に書いてある通りに作成しました。
下記ページに日本語でほぼ同様の記載があります。
http://www.voip-info.jp/index.php/BeagleBone_Black_Asterisk
一応、入力を羅列しておきます。
※ 説明は間違っているかもしれません。
- o (既存のパーティションクリア)
- p (パーティションの確認)
- n (新規パーティション作成: uboot用)
- p (プライマリパーティションを選択)
- 1 (パーティション番号: 1)
- [enter] (パーティション開始位置 → デフォルト)
- +64M (パーティション終了位置 → 64MB確保)
- t (パーティションタイプ変更)
- e (W95 FAT16を選択)
- a (ブート可能に設定)
- n (新規パーティション作成: rootfs用)
- p (プライマリパーティションを選択)
- 2 (パーティション番号: 2)
- [enter] (パーティション開始位置 → デフォルト(1の直後))
- [enter] (パーティション終了位置 → デフォルト(最大))
- p (パーティションの確認)
- w (書き込み)
フォーマット
~$ sudo mkfs.vfat -F 16 /dev/sdb1
~$ sudo mkfs.ext4 /dev/sdb2
書き込み
※ ArchKinuxの場合はファイル名、tarコマンドのオプションが異なります。
cf. ArchLinuxのインストール手順
~$ mkdir boot
~$ sudo mount /dev/sdb1 boot
~$ sudo tar Jxvf uboot-bone.tar.xz -C boot
~$ mkdir root
~$ sudo mount /dev/sdb2 root
~$ sudo tar Jxvf debian-wheezy-7.2-armhf-rootfs-3.8.13-bone30.tar.xz -C root
接続解除
書き込みが終わったのでマウントを解除してmicroSDカードを抜きます。
~$ sudo umount boot root
これでインストール完了です。
起動確認
microSDカードのスロット付近にあるスイッチを押した状態で電源を入れ、押したまましばらくするとLEDが点滅したらボタンから手を離します。(ボタンを離すタイミングは未確認)
これでmicroSDカードからOSが起動するはずです。
インストール後
このままでは本体のスイッチを押しながら電源を入れないと、microSDから起動しません…
(ファームウェアを更新するとmicroSDカードを刺すだけで起動するかもしれません)
microSDカードからOSが起動したら、次のようにuEnv.txtを変更することでmicroSDカードから起動するそうです。
これは下記のページを参考にさせていただきました。
http://tomowatanabe.hatenablog.com/entry/2013/12/15/202806
(bootfileだけ設定していてハマりました…)
※ 以下はmicroSDカードで起動したOS上での操作です。
~$ sudo nano /boot/uboot/uEnv.txt
mmcpart=2
bootfile=zImage # 追加
optargs=fixrtc
uenvcmd=i2c mw 0x24 1 0x3e; kd=0; if test $mmcdev -eq 1; then mmc dev 0; if mmc rescan; then kd=1; fi; mmc dev 1; fi; setenv mmcroot /dev/mmcblk${kd}p${mmcpart} ro
loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${bootdir}/dtbs/${fdtfile}
loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${bootfile}
mmcboot=echo Booting from mmc ...; run mmcargs; bootz ${kloadaddr} - ${fdtaddr} # 追加
これで再起動後はmicroSDカードからOSが起動します。
めでたしめでたし。