2013年4月18日木曜日

Debian 7 (wheezy)ベースのOpenBlocks Aファミリ用 β版ファームウェア公開 (4/26 A6版追記, 5/23 ファームウェア更新)

こんにちは。OpenBlocksファミリの開発・技術担当の木村です。

2013/04/26:A6版の手順を追記しました
2013/05/23: 正式公開されたDebian7をベースとしてファームウェアファイル(rc1)を公開しました (更新内容は本記事の末尾を参照下さい)

現在のOpenBlocks Aファミリは、標準OSとしてDebian 6 (squeeze)のarmelアーキテクチャを搭載していますが、リリースから2年が経過し新しいバージョンのDebian 7 (wheezy)の準備がDebian Projectによって進められています(2013/05/23追記: 2013/05/04に正式リリースされました)。

OpenBlocks Aファミリでも、新しくリリースされるバージョンを利用出来るように準備を進めており、Debian 7のプレリリース版をベースとしたOpenBlocks Aファミリ用ファームウェアのβ版をリリースします。

お試しいただけた場合には、ご意見・不具合等のフィードバックをいただければ幸いです。

注意事項
  • β版としての公開のため、仕様は変更の可能性があります。
  • β版の利用によって生じたいかなる不利益も、当社は一切の責任を負いません。
  • お問い合わせ・フィードバックは、本記事のコメント欄に投稿願います。

OpenBlocks Aファミリ用 Debian 7 ファームウェアによって変わること


  • [AX3のみ]armhfアーキテクチャの採用によるパフォーマンスの向上
    armhfにより、ユーザーランドの各バイナリが、ハードウェアFPU、ARMv7命令セット等が有効になり性能向上が見込める。特にハードウェアFPUは、画像処理やスクリプト言語の利用で効果が現れる。A6はハードウェアFPU非搭載のため、armelアーキテクチャのままとなる。
  • [AX3のみ]パワーマネジメント動作の向上
    アイドル時に従来よりも深いレベルでCPUが休むことで、筐体温度や消費電力の低下が見込める。
  • [AX3のみ]パワーマネジメント動作モードの変更に対応 (反映は再起動後)
    「flashcfg -p idle」等で変更できる。デフォルトは idle となっており、wfi、idle、snoozeが指定出来る。アイドル状態の深度は、wfi > idle > snoozeとなる。Debian 6のOpenBlocks AX3用ファームウェアで採用していた3.0.6カーネルでは、wfi動作となっている。
  • [AX3のみ]異常温度に達した場合の1コア停止に加え、指定温度まで下がったときのコア復帰に対応
    デフォルトでは、CPU温度が105℃を超えると1コアを停止、その後75℃まで低下したら復帰する。
  • カーネルバージョンの変更
    AX3・A6共に、3.2.36となる。
  • UnionFSのために採用する実装を、Linux UnionfsからAuFSに変更http://unionfs.filesystems.org/ → http://aufs.sourceforge.net/
  • /のRAMディスクサイズをAX3: 128MB→160MB、A6: 128MB→144MBに変更
  • /etc/default/openblocksの編集対応
    unionfsの対象ディレクトリ、RAMディスクモードにおける/.rwのサイズを変更できる。AX3の場合は、加えてCPUの1コア停止及び復帰の温度が変更できる。
  • その他Debian7の仕様に合わせた変更や軽微な改善多数

主な変更点の解説


パフォーマンス向上について (AX3のみ)

AX3では、Debian 6 のarmelアーキテクチャを搭載していましたが、この状態はハードウェア性能をフルに活かした状態ではありませんでした。x86アーキテクチャのCPUでは、古くからハードウェアFPUがCPUに統合さえていたため、普段は意識することはあまり無いかと思いますが、ARMアーキテクチャのCPUにハードウェアFPUが搭載されるようになったのは、スマートフォンやタブレットに採用が増えた最近のことです。そのためOS側でも徐々にハードウェアFPUへの対応が検討され、Debianにおいてはバージョン7からarmhfというアーキテクチャを新設し対応することになったようです。

実際の性能向上がどの程度かになるかは、実行するソフトウェアによっても異なりますが、個人的な印象としては「apt-get update」や「apt-get install hoge」など日常的な処理が早くなっているような体感があります。昨年夏頃の測定ですが、UnixBenchを利用したベンチマーク結果のデータがありますので、以下に掲載します。赤文字にしたDhystoneが整数演算、Whetstoneが倍精度浮動小数点演算の性能を表しています。Debian sid/armhfがDebian 7.0のarmhfアーキテクチャに相当します。

 Debian 6.0/armelDebian sid/armhf
Dhrystone 2 using register variables279.00323.40
Double-Precision Whetstone11.70111.60
Execl Throughput160.30163.70
File Copy 1024 bufsize 2000 maxblocks154.50130.60
File Copy 256 bufsize 500 maxblocks100.2084.80
File Copy 4096 bufsize 8000 maxblocks322.60269.90
Pipe Throughput133.00132.30
Pipe-based Context Switching102.50105.10
Process Creation191.40200.90
Shell Scripts(1concurrent)431.40376.80
Shell Scripts(8concurrent)543.10498.80
System Call Overhead316.60309.00


(当社執筆のSoftware Design 2012年9月号(2012年8月18日発売)掲載記事から表5を引用。また雑誌掲載時の誤記「Debian 6.0/armhf」を「Debian sid/armhf」に訂正。記事はこちらでも参照可能。)

パワーマネジメントについて (AX3のみ)

Debian 6では、採用していた3.0.6カーネル(CPU開発元のLSPをベースにしたもの)にパワーマネジメントの機能は搭載されていましたが、安定性に欠けていたため、最小限の省電力動作であるWFIモードを採用しています。

Debian 7では、3.2.36カーネル(CPU開発元のLSPをベースにしたもの)に変わり、このバージョンからはCPU開発元でもパワーマネジメントの正規サポートが謳われるようになり、WFI以外の各モードの採用が可能となりました。

パワーマネジメントの動作モードには、WFI、DEEP IDLE、SNOOZEの3種があり、WFIから順に深いアイドル状態を意味します。β版ではDEEP IDLEをデフォルトとして今後の評価・検証で最終的な動作を決定します。

パワーマネジメント動作の変更は、次のように実行します。設定変更の反映は再起動後になされます。

# flashcfg -p snooze

WFIは wfi、DEEP IDLEは idle、SNOOZEは snooze と指定します。現在のモード表示は、now を指定します。

ファームウェアの変更方法 (AX3用)


操作の概要としては、Debian 6で使っていた環境は全て消去し設定し直しとなります。

 ファームウェアファイルのダウンロード (beta1 MD5 / rc1 MD5)


 ファームウェアファイルの書き込み

# flashcfg -f uImage.initrd.obsax3

 ユーザーエリアを消去し、ストレージ併用モードを解除する

# flashcfg -e
# e2label /dev/sda1 "" ※ストレージ併用モード利用時のみ。デバイス名は適宜読み替えください。

ストレージ併用モードで、既存の環境を残しておきたい場合は、ストレージの初期化をしないようにして下さい。Debian 7でストレージ併用モードを利用する際は、ストレージを交換するかUSBやeSATAポートに接続したストレージにDEBIANラベルを設定することで既存のストレージはそのままに、Debian 7を試すことが出来ます。元の環境に戻す場合は、Debian 6のファームウェアを書き戻すだけでOKです。

 再起動

# reboot

 完了
 次のようにログインプロンプトが表示されれば変更完了です。
 user: root / pass: root でログインして下さい。

Debian GNU/Linux 7.0 obsax3 ttyS0

obsax3 login:


# uname -a
Linux obsax3 3.2.36 #1 SMP Fri Apr 12 17:40:04 JST 2013 armv7l GNU/Linux

2013/05/23更新
# uname -a
Linux obsax3 3.2.36 #1 SMP Thu May 23 12:37:55 JST 2013 armv7l GNU/Linux

Debian 6に戻す場合の注意

基本的には使用するファームウェアファイルをDebian 6ベースのものに変更するだけですが、パワーマネジメントの動作モードを変更している場合は、ファームウェアを戻す前に次のコマンドでDebian 6環境の動作モードに戻して下さい。

# flashcfg -p wfi

ファームウェアの変更方法 (A6用)


A6では、Debian 7になりカーネルバージョンが変わったことで、ファームウェアサイズが大きくなり、既存の割り当てでは収まらないサイズになったため、A6でDebian 7を利用するにはブートローダ(U-Boot)の変更が必要となります。変更用のU-Bootは準備・テストを進めており、追って本ブログで手順を公開します。 以下に追記

A6でDebian 7ベースのファームウェアを利用するには、事前にブートローダーのU-Bootを更新する必要があります。

OpenBlocksでは、本体基板上のFlashROM上にLinuxカーネルと最小限のユーザーランドを結合したファームウェアファイルが書き込まれており、電源ONするとこれを読み出して実行します。予め用途別にいくつかのパーティションに分割していますが、Debian7になったことに加えカーネルのバージョン変更も伴ったことで、想定していたファームウェアサイズの最大を超えてしまいました。この対策として、ファームウェア領域のサイズを拡張したU-Bootの新バージョンを用意しました。なおファームウェア領域拡張のかわりに、ユーザーエリア(flashcfg -s/-Sでの保存先)が縮小されています。

A6は出荷時期により2種類のU-Bootバージョンが存在し、電源ON直後にシリアルコンソールに表示される内容から判断することが出来ます。FlashROMのパーティション割り当ては、Linux上の/proc/mtdファイルを参照することで確認することが出来ます。以下に各バージョンのパーティション割り当てを記載します。

出荷済みバージョンのバリエーション

U-Boot 1.1.4 (Jul 30 2012 - 19:54:19)
Plat'Home version: 1.0.2 (Base: Marvell version: 3.5.9)
root@obsa6:~# grep '^mtd' /proc/mtd  | while read line;do echo -ne "$line\t=>\t"; printf "%d KiB\n" 0x$(echo $line|awk '{print $2}'); done
mtd0: 00090000 00004000 "uboot" =>      589824 KiB     ※ U-Boot本体
mtd1: 00044000 00004000 "env"   =>      278528 KiB     ※ U-Boot環境変数
mtd2: 00020000 00004000 "test"  =>      131072 KiB     ※ 生産用テストプログラム
mtd3: 00400000 00004000 "conf"  =>      4194304 KiB     ※ flashcfg -sでの保存先
mtd4: 01d20000 00004000 "linux" =>      30539776 KiB     ※ ファームウェア(カーネル+ユーザーランド)
mtd5: 01dec000 00004000 "user"  =>      31375360 KiB     ※ flashcfg -Sでの保存先

U-Boot 1.1.4 (Oct 17 2012 - 15:25:27)
Plat'Home version: 1.1.0 (Base: Marvell version: 3.5.9)
root@obsa6:~# grep '^mtd' /proc/mtd  | while read line;do echo -ne "$line\t=>\t"; printf "%d KiB\n" 0x$(echo $line|awk '{print $2}'); done
mtd0: 00080000 00004000 "uboot" =>      524288 KiB
mtd1: 00040000 00004000 "env"   =>      262144 KiB
mtd2: 00020000 00004000 "test"  =>      131072 KiB
mtd3: 00400000 00004000 "conf"  =>      4194304 KiB
mtd4: 01c5c000 00004000 "linux" =>      29736960 KiB
mtd5: 01dc4000 00004000 "user"  =>      31211520 KiB

Debian7用の対策適用済みのバージョン
U-Boot 1.1.4 (Apr 22 2013 - 18:19:33)
Plat'Home version: 1.2.3 (Base: Marvell version: 3.5.9)
root@obsa6:~# grep '^mtd' /proc/mtd  | while read line;do echo -ne "$line\t=>\t"; printf "%d KiB\n" 0x$(echo $line|awk '{print $2}'); done
mtd0: 00080000 00004000 "uboot" =>      524288 KiB
mtd1: 00040000 00004000 "env"   =>      262144 KiB
mtd2: 00020000 00004000 "test"  =>      131072 KiB
mtd3: 00400000 00004000 "conf"  =>      4194304 KiB
mtd4: 02000000 00004000 "linux" =>      33554432 KiB
mtd5: 01a20000 00004000 "user"  =>      27394048 KiB

1.1.0のパーティション割り当てと比較すると、ファームウェア領域が3MiB増加、flashcfg -Sでの保存先が3MiB減少されています。


アップデート手順

注意: 本操作によって、U-Bootの更新の他、FlashROMの全領域に対して書き換え又は消去を行います。そのため、RAMディスクモードで利用していた場合の保存内容は全て消去されます。消去されては困るデータがある場合は、事前にバックアップを実施願います。またU-Bootの書き換えが何らかの理由により失敗した場合、U-Bootが起動出来なくなり、それに伴いLinuxの起動も出来なくなります。仮に失敗してしまったような場合は、サポート窓口までお問い合わせ下さい。

現在のU-Bootバージョンの確認

シリアルコンソールを接続し、電源ONして下さい。起動直後にバージョン情報が表示されますので、1.0.2又は1.1.0であることを確認し、この情報を必ず控えておいて下さい。

実行に必要なパッケージの追加

# apt-get update
# apt-get install mtd-utils

A6用U-Boot 1.2.3へのアップグレードキットをダウンロード (注意:md5sumの結果が一致していることを確認)

# wget ftp://ftp.plathome.co.jp/pub/OBSA6/wheezy/3.2.36-0beta1/a6_uboot_upgrade123_kit.tar.gz
# md5sum a6_uboot_upgrade123_kit.tar.gz
0547a6702b40363427916c8711295aea a6_uboot_upgrade123_kit.tar.gz

展開と実行

# tar xvzf a6_uboot_upgrade123_kit.tar.gz
# cd a6_uboot_upgrade123_kit
# ./update_a6_uboot.sh
Update u-boot to 1.2.3. (previous version checksum: d5)
erase u-boot area...done.
erase u-boot env area...done.
erase test program area...done.
erase linux conf area...done.
erase linux firmware area...done.
erase linux user area...done.
update u-boot...done.
update test program...done.
rewrite linux firmware...done.

Please reboot the openblocks and install debian7 firmware.
バージョンの自動判定を行い、U-Boot及びテストプログラムの書き換え、環境変数やflashcfgの保存先を消去、Debian6ベースファームウェアの再書き込み(U-Boot 1.0.2の場合のみ)を実施します。

FlashROMでBadBlockが発生している場合、unknown u-boot version と表示される場合があります。この時は、次のように現在のバージョンを指定して実行します。

# ./update_a6_uboot.sh -u 1.1.0 ※ unknown u-boot versionと表示された場合のみ。バージョンは適宜変更。

実行が完了したら、再起動を実施します。
# reboot

Debian 7への変更
ファームウェアファイルのダウンロード (beta1 MD5 / rc1 MD5)


 ファームウェアファイルの書き込み

# flashcfg -f uImage.initrd.obsa6

ストレージ併用モードを解除する

# e2label /dev/sda1 "" ※ストレージ併用モード利用時のみ。デバイス名は適宜読み替えください。

ストレージ併用モードで、既存の環境を残しておきたい場合は、ストレージの初期化をしないようにして下さい。Debian 7でストレージ併用モードを利用する際は、ストレージを交換するかUSBやeSATAポートに接続したストレージにDEBIANラベルを設定することで既存のストレージはそのままに、Debian 7を試すことが出来ます。元の環境に戻す場合は、Debian 6のファームウェアを書き戻すだけでOKです。

 再起動

# reboot

 完了
 次のようにログインプロンプトが表示されれば変更完了です。
 user: root / pass: root でログインして下さい。

Debian GNU/Linux 7.0 obsa6 ttyS0

obsa6 login:


# uname -a
Linux obsa6 3.2.36 #1 Fri Apr 12 19:00:59 JST 2013 armv5tel GNU/Linux

2013/05/23更新
# uname -a
Linux obsa6 3.2.36 #2 Thu May 23 12:43:23 JST 2013 armv5tel GNU/Linux


最後に


Debian 7のRelease critical bugsの2013/04/18 00:00:00 (UTC)時点で残り33個となっており、これが0になるとリリースになるとのことです。リリースが発表された後、OpenBlocks用ファームウェアも改めて、リリース版を元にしたものを公開いたします。不具合等ある場合は、反映したいと考えておりますので、運用に使用されていない実機をお持ちのユーザー様は、是非お試しいただければ幸いです。

2013/04/26追記:その後、順調にRelease critical bugsが減ってきており、2013/05/05のリリースで日取りが確定したようです。(タイムゾーンはどこなんでしょう?)

2013/05/23追記: 無事に2013/05/04に公開されております。開発者の皆様のご尽力により、我々もこうして当社製品用のファームウェアの提供が出来ております。この場を借りて心から御礼申し上げます。



ファームウェア更新内容

2013/05/23: rc1
  • 正式公開された Debian 7.0.0 をベースにして再構築
  • ストレージ併用モードを利用した場合に、シャットダウン時に/.rwのumountがfailとなり、次回起動時にinode不整合の修正処理が入ってしまう現象を修正
  • カーネルコンフィグレーションの見直し
    • cgroup機能の追加 (LXC利用のため)
    • IPv6機能の組み込み化 (/etc/sysctl.d/ipv6-off.confファイルでIPv6の無効化するため)
    • その他、細かな機能の見直し
  • カーネルのセキュリティホール(CVE-2013-2094)の対応
  • その他軽微な修正

0 件のコメント:

コメントを投稿