Skip to content

update preinstall Angstrom

kinneko edited this page Oct 28, 2013 · 18 revisions

内蔵eMMCにプリインストールされたAngstromを最新版にアップデートする

 製造時期によって異なると思われますが、A5Cで出荷されたもので確認してみると、とりあえずbeagleboard.orgで配布されている最新版がインストールされています。

参照:シリアル変換ケーブルを使う

 今後、新しいバージョンがリリースされてアップデートした場合や、出荷時設定に戻したい時のために、最新版にアップデートする方法をおさらいしておきます。

プリインストールのAngstrom、最新版はどこにあるの?

 最新版は、http://beagleboard.org/latest-images で提供されています。  2013年10月時点の最新版は6/20版です。4GB SDカードから起動できるイメージと、内蔵のeMMCから起動できるイメージの2種類があります。

 その他、Angstromプロジェクトからリリースされているイメージもあります。配布は、http://downloads.angstrom-distribution.org/demo/beaglebone/ から行われています。2013年10月時点の最新版は10/20版です。

  • Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.09.05.img.xz
  • BBB-eMMC-flasher-2013.09.12.img.xz
  • BBB-eMMC-flasher-v2013.06-2013.10.20.img.xz

 Angstromプロジェクトでは、アレンジの異なるrootfsも配布されています。

  • Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.07.31.rootfs.tar.xz
  • Angstrom-Cloud9-IDE-eglibc-ipk-v2012.12-beaglebone-2013.07.31.rootfs.tar.xz
  • Angstrom-development-GNOME-image-eglibc-ipk-v2012.12-beaglebone-2013.07.31.rootfs.tar.xz
  • Angstrom-systemd-image-eglibc-ipk-v2012.12-beaglebone-2013.09.12.rootfs.tar.xz

最新版のAngstromをeMMCに書き込む

 最新版のイメージファイルを取得します。

 どちらも、LZMA2圧縮アルゴリズムを使ったxzアーカイブで提供されています。unxzコマンドで展開できます。

$ wget https://s3.amazonaws.com/angstrom/demo/beaglebone/BBB-eMMC-flasher-2013.06.20.img.xz

$ unxz BBB-eMMC-flasher-2013.06.20.img.xz

$ ls -hl BBB-eMMC-flasher-2013.06.20.img
-rw-r--r-- 1 kinneko kinneko 3.5G Oct 28 11:15 BBB-eMMC-flasher-2013.06.20.img

$ file BBB-eMMC-flasher-2013.06.20.img
BBB-eMMC-flasher-2013.06.20.img: x86 boot sector; partition 1: ID=0xc, active, starthead 1, startsector 63, 144522 sectors; partition 2: ID=0x83, starthead 0, startsector 144585, 6988275 sectors, code offset 0x0

 パーティション構造を持ったディスクイメージであることがわかります。
 中身を見てみましょう。

$ sudo LANG=C fdisk -l BBB-eMMC-flasher-2013.06.20.img
Disk BBB-eMMC-flasher-2013.06.20.img: 3657 MB, 3657433088 bytes
255 heads, 63 sectors/track, 444 cylinders, total 7143424 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: 0x00000000

                          Device Boot      Start         End      Blocks   Id  System
BBB-eMMC-flasher-2013.06.20.img1   *          63      144584       72261    c  W95 FAT32 (LBA)
BBB-eMMC-flasher-2013.06.20.img2          144585     7132859     3494137+  83  Linux

 2つのパーティションが見えます。さらにマウントして内容を確認してみましょう。

$ sudo mount -o loop,offset=32256 BBB-eMMC-flasher-2013.06.20.img /media/
$ ls /media/
ID.txt  MLO  u-boot.img  uEnv.txt

 最初のパーティションには、起動用のブートローダーやkenrelが書かれています。ID.txtは見慣れないファイルです。中を確認すると、バージョンが書かれていました。

$ cat /media/ID.txt
BeagleBone Black eMMC flasher 2013.06.20

 最初のパーティションをアンマウントしておきます。

$ sudo umount /media

 次のパーティションには、eMMCを書き換えるためのスクリプトと、書き換え用のイメージが入っています。

$ sudo mount -o loop,offset=74027520 BBB-eMMC-flasher-2013.06.20.img /media/
$ ls /media/
bin   build  eeprom.dump  home  lost+found  mnt   run   sys  usr
boot  dev    etc          lib   media       proc  sbin  tmp  var

 書き込む実体とスクリプトはbuildディレクトリに入っています。

$ ls /media/build/
Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone.rootfs.tar.gz
MLO
beaglebg.jpg
connman.settings
mkcard.sh
u-boot.img

 mkcard.shは、MBRを削除、2つのパーティションを作成して、それぞれにファイルシステムを作成しています。これはインストーラーから呼ばれるスクリプトで、インストーラーの実体ではないようです。
 調べてみると、インストーラーの実体は、/usr/bin/emmc.shで、起動時に、/lib/systemd/system/emmc.serviceから、ExecStart=/usr/bin/emmc.shで呼び出されます。

 イメージをmicro SDカードに書き込みます。sd[?]には、sdbなど、お使いの環境でのmicro SDカードのデバイスファイルを書き込みます。micro SDカードの容量は4GB以上のものを用意してください。
 遅いインターフェイスを使って、遅いデバイスに大量に書き込むので、かなり時間がかかります。気長に待ってください。

$ sudo dd if=./BBB-eMMC-flasher-2013.06.20.img of=/dev/sd[?]
7143424+0 レコード入力
7143424+0 レコード出力
3657433088 バイト (3.7 GB) コピーされました、 2088.54 秒、 1.8 MB/秒

書き込まれているか、パーティションを確認してみます。

$ sudo LANG=C fdisk -l /dev/sdc

Disk /dev/sdc: 7822 MB, 7822376960 bytes
255 heads, 63 sectors/track, 951 cylinders, total 15278080 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: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *          63      144584       72261    c  W95 FAT32 (LBA)
/dev/sdc2          144585     7132859     3494137+  83  Linux

 問題なさそうです。

 このイメージは、起動すると自動的にeMMCに書き込むように作られていますので、これをmicro SDカードに書き込んで起動します。 電源を切った状態から、"User Boot"ボタンを押しながら電源を入れます。LEDが順に点灯し、Angstromでの通常のLED点滅状態になったら、ボタンを離してかまいません。

User Bootボタン

 eMMCは全自動で更新されます。USR0-3のLEDが点灯するまでの間は作業中ですので、電源を切ったりmicro SDカードを抜いたりしないでください。
 作業には、40分ほどかかるとのことでしたが、試してみると小一時間かかりました。

 この間、シリアルコンソールには、何も出力されていません。psコマンドで動作プロセスを見ると、書き換えが進行中なのがわかります。ちょっとヒドい作りですね。特にbeaglebone-getting-startedのコピーが長く、作業時間の大半を占めます。その後のパッケージの設定に伴う、GTKのアイコンキャッシュの生成や、gconftool-2の設定と思われる部分の時間も同じくらいかかります。

  263 root      2856 S    {emmc.sh} /bin/bash /usr/bin/emmc.sh
  306 root      2844 S    {mkcard.sh} /bin/sh ./mkcard.sh /dev/mmcblk1
  317 root      1908 D    sfdisk -D -H 255 -S 63 -C 233 /dev/mmcblk1
  346 root      2152 R    tar zxf Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.1...
  347 root      2152 S    tar zxf Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.1...
  352 root      2152 D    cp -r /media/2/usr/share/beaglebone-getting-started/...
  376 root      2184 S    systemd-nspawn -D /media/2 /usr/bin/opkg-cl configur...
  377 root      3940 S    /usr/bin/opkg-cl configure
  378 root         0 SW   [flush-179:0]
  446 root         0 SW   [kworker/0:0]
  515 root      3008 S    {gnome-session.p} /bin/sh //var/lib/opkg/info/gnome-...
  527 root     59284 D    gtk-update-icon-cache -fqt /usr/share/icons/gnome...
  376 root      2184 S    systemd-nspawn -D /media/2 /usr/bin/opkg-cl configur...
  377 root      3940 S    /usr/bin/opkg-cl configure
  378 root         0 SW   [flush-179:0]
  446 root         0 SW   [kworker/0:0]
  639 root      3020 S    {gnome-common-sc} /bin/sh //var/lib/opkg/info/gnome-...
  658 root         0 SW   [kworker/0:2]
  660 root     11356 D    gconftool-2 --makefile-install-rule /etc/gconf/schem...

 LEDがすべて点灯したら、電源を切ってmicro SDカードを抜いてください。