BeagleBone BlackにDebianをインストール


BeagleBone Blackにはデフォルトで[Ångstrom Linux](http://www.angstrom-distribution.org "Ångstrom Linux")がeMMCにインストール済みですが、eMMCは寿命があるのでmicroSDカードから別のOSを起動するように設定します。
今回はDebianを選択しました。
※ Ubuntu, ArchLinuxでも同じ方針でインストールできます。

## インストール

この手順ではU-Bootとルートファイルシステムをそれぞれ書き込む方法でインストールします。
（ArchLinuxをこの手順でインストールした事があるため）
※ イメージファイルを書き込む手順は下記ダウンロードページ他、色んなページで紹介されています。

### 使用させていただくファイル
今回は[ARM HF Linux](http://www.armhf.com "ARM HF Linux")で公開されているイメージを利用させていただきました。（Debian/Ubuntuの場合）
[ダウンロードページ](http://www.armhf.com/index.php/download/ "Downloads")
※ 後でwgetで取得する手順なのでココでダウンロードしておく必要はありません。

- Debian Wheezy 7.2
 - [uboot](http://s3.armhf.com/boards/bbb/uboot-bone.tar.xz)
 - [rootfs](http://s3.armhf.com/debian/wheezy/bone/debian-wheezy-7.2-armhf-rootfs-3.8.13-bone30.tar.xz)

- Ubuntu 13.10
 - [uboot](http://s3.armhf.com/boards/bbb/uboot-bone.tar.xz)
 - [rootfs](http://s3.armhf.com/debian/saucy/bone/ubuntu-saucy-13.10-armhf-rootfs-3.8.13-bone30.tar.xz)

- ArchLinux
 - [uboot](http://archlinuxarm.org/os/omap/BeagleBone-bootloader.tar.gz)
 - [rootfs](http://archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz)



### 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://archlinuxarm.org/platforms/armv7/ti/beaglebone-black)に書いてある通りに作成しました。
下記ページに日本語でほぼ同様の記載があります。
http://www.voip-info.jp/index.php/BeagleBone_Black_Asterisk

一応、入力を羅列しておきます。
※ 説明は間違っているかもしれません。

1. o (既存のパーティションクリア)
2. p (パーティションの確認)
3. n (新規パーティション作成: uboot用)
4. p (プライマリパーティションを選択)
5. 1 (パーティション番号: 1)
6. \[enter\] (パーティション開始位置 → デフォルト)
7. +64M (パーティション終了位置 → 64MB確保)
8. t (パーティションタイプ変更)
9. e (W95 FAT16を選択)
10. a (ブート可能に設定)
11. n (新規パーティション作成: rootfs用)
12. p (プライマリパーティションを選択)
13. 2 (パーティション番号: 2)
14. \[enter\] (パーティション開始位置 → デフォルト(1の直後))
15. \[enter\] (パーティション終了位置 → デフォルト(最大))
16. p (パーティションの確認)
17. w (書き込み)


#### フォーマット
```
~$ sudo mkfs.vfat -F 16 /dev/sdb1
~$ sudo mkfs.ext4 /dev/sdb2
```


#### 書き込み

※ ArchKinuxの場合はファイル名、tarコマンドのオプションが異なります。
cf. [ArchLinuxのインストール手順](http://archlinuxarm.org/platforms/armv7/ti/beaglebone-black)

```
~$ 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
```


```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が起動します。

めでたしめでたし。