はじめに
連載最後となる今回は,前回に引き続きオリジナルファームウェアの開発方法を紹介します。前回は開発の手始めとして,基本的な構築方法を紹介しましたが,今回は実際にファームウェアにカスタマイズを加える方法を紹介します。
実践例の注意
本連載の実践例では,SSD/Linuxのソースツリーへのソフトウェアの追加,追加したソフトウェアのファームウェアへの組み込み,初期設定ファイルの変更,カーネルコンフィグレーションの変更を行っていきます。なお本文および図表に現れるファイルパスのうち,相対パスのものは「/usr/src/」以下のファイルを指しています。
ファームウェア作成定義の用意
カスタムのサンプルとして「distrib/powerpcobs600/custom0/」に例を用意しました。仮に,これを試してみる場合は,手を加えてもかまいませんし,custom1のようにコピーを作成しても良いでしょう。
SSD/Linuxへのソフトウェアの追加
公開しているSSD/Linuxのソースツリーには,Linuxディストリビューションを構成する基本的なソフトウェアだけが登録された状態になっています。オリジナルファームウェアを作成してメンテナンスをし続ける場合は,ここに必要なソフトウェアを追加していくと,その後のメンテナンスが楽になります。
今回は,高速なHTTPサーバソフトウェアとして知られる「lighttpd」を例に挙げます。ソフトウェアの追加を行うには,ソースコードの取得/展開の設定を行う「mkdist/」への登録(リスト1)と,ソフトウェアのコンパイルを行う「contrib/」などへの登録(リスト2)が必要になります。
リスト1 mkdistへの登録(mkdist/lighttpd/Makefile)
include "${.CURDIR}/../../share/mk/bsd.own.mk"
.include "${.CURDIR}/../Makefile.inc"
DISTNAME= lighttpd-
DISTVERSION= 1.4.23
DISTRELEASE= 0
EXTRACT_SUFX= tar.bz2
MASTER_SITES= http://www.lighttpd.net/download/
DEPENDENT= usr.sbin/lighttpd
.include "${.CURDIR}/../../share/mk/bsd.mkdist.mk"
リスト2 contribへの追加(contrib/lighttpd/Makefile)
.include <bsd.own.mk>
DISTNAME= lighttpd
DIST= ${.CURDIR}/../../dist/lighttpd
.PATH: ${DIST}
CPPFLAGS+= -I${.CURDIR}/../../dist/zlib
CPPFLAGS+= -I${.CURDIR}/../../dist/bzip2
LDFLAGS+= -L${.CURDIR}/../../lib/libz
LDFLAGS+= -L${.CURDIR}/../../lib/libbz2
HAVE_DESTDIR= 1
CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}"
CONFIGURE_FULL_PREFIX= 1
CONFIGURE_OPTIONS+= --program-transform-name='‘
CONFIGURE_OPTIONS+= --without-pcre
GNU_TARGET= ${TARGET_MACHTYPE}
GNU_HOST= ${TARGET_MACHTYPE}
GNU_BUILD= ${MACHTYPE}
.include <bsd.gnu.mk>
追加ソフトウェアのファームウェアへの組込
ソースツリーに追加したソフトウェアを,ファームウェアへ組み込むには,先に用意したファームウェア作成定義の中で,追加したいソフトウェアのための設定が必要です。通常ファームウェアに組み入れるファイルは,コマンドもライブラリも1つずつ必要なファイルのリストを作成して利用していますが(リスト3),今回の例ではもう少し手軽な手法を取っています(リスト4)。
ここで作成したリストを,ファームウェア作成に使用するための設定(リスト5)も必要になります。
リスト3 ファイル列挙の例(distrib/powerpc-obs600/standard/initrd/list_in/common)
BCOPY @SRCTOPDIR@/bin/bash/src/bash bin/bash
BCOPY @SRCTOPDIR@/bin/cat/cat bin/cat
BCOPY @SRCTOPDIR@/bin/chmod/chmod bin/chmod
リスト4 lighttpdの登録例(distrib/powerpc-obs600/custom0/initrd/lighttpd)
# コンパイルした物を、RAMディスクイメージに直接インストール
SPECIAL cd @SRCTOPDIR@/contrib/lighttpd; bmake install DESTDIR=@MOUNT_POINT@
リスト5 ファームウェア作成の設定(distrib/powerpc-obs600/custom0/initrd)
.include <bsd.own.mk>
.include "../Makefile.inc"
.include "${.CURDIR}/../../standard/initrd/Makefile.inc"
# include した standard の内容に lighttpd を追加
LIST_S+= lighttpd
初期設定ファイルの変更
ファームウェアにもともと含まれている/etc/rc.confなどの設定ファイルを変更したい場合,ソースツリーに登録されている標準のファイルとは別に,カスタムファームウェアの作成定義のディレクトリ以下に,変更後のファイルを用意します(図1)。
ここに用意した変更後のファイルは,ファイル抽出時に自動的に標準のファイルと置き換わります。
図1 初期設定ファイルの変更(適宜,初期値を変更)
# cd distrib/powerpc-obs600/custom0/initrd
# cp etc/common/rc.conf etc/
# vi etc/rc.conf
カーネルコンフィグレーションの変更
カーネルコンフィグレーションの変更は,Linuxカーネルに含まれるテキストベースのmenuconfigを使用して行います。通常SSD/Linuxの標準設定が使われるため,オリジナルファームウェア向けにコンフィグファイルを指定する必要があります(リスト6)。コンフィグファイル指定後は図2のように実行し,カーネルのコンフィグレーションを行います。
リスト6 カーネルコンフィグファイルの指定(/etc/mk.conf)
# mkdist/kernel/2.6.29/dot.config.powerpc-obs600.ipv6
KERNEL_CONFIG?= /root/my_kernel_config
図2 カーネルのコンフィグレーション
# cd /usr/src
# bmake menuconfig BACKUP_CONFIG=yes
(cd linux/include/; rm -f asm; ln -s linux/arch/powerpc/include/asm)
cp /root/my_kernel_config linux/.config
cd linux && make ARCH=powerpc INSTALL_MOD_PATH=/home/dest-powerpc CROSS_COMPILE=powerpc-ssdlinux-
gnu- menuconfig
……(省略)……
変更個所を加えたファームウェアの構築
前回では,OS全体の構築を行っていますので,同様の環境であることを前提に本稿の話を進めます。今回は変更を加えた追加ソフトウェアとカーネル部分だけコンパイルを行い,ファームウェアを再構築しています(図3)。
以上の手順でオリジナルファームウェアの作成は完了です。細かな解説は省いていますが,作業の全体像をつかめたのではないかと思います。ぷらっとホームから提供する公式ファームウェアを利用した場合でも,十分に汎用的なサーバとして利用できますが,今回紹介したようなオリジナルファームウェアを作成することで,より活用の幅が広がってきます。ぜひ試してみてください。
図3 変更個所のコンパイル
# cd mkdist/lighttpd
# bmake
……(省略)……
# cd contrib/lighttpd
# bmake
……(省略)……
# cd /usr/src
# bmake build_kernel -DNOCLEAN
……(省略)……
# cd distrib/powerpc-obs600/custom0
# bmake clean && bmake
……(省略)……
あとがき
これまで6回にわたり,「OpenBlockS 600活用指南」と題して連載をさせていただきましたが,今回で終了となります。 6回にわたる連載となりましたが,本稿を読み返しながらOpenBlockS 600を存分に活用ください!
Column「OpenBlockSの歴史」
およそ10 年にわたる熟成と発展
2009年9月28日に発売となったOpenBlockSシリーズには,10年近い歴史があります。2000年7月に発売したOpenBlockSは手のひらサイズのコンパクトマシンでした。2001年10月にはトランスルーセント(半透明)筐体のOpenBlockS Sを発表し,同年12月に青い筐体のOpenBlockS Rを発売しました。そして皆さんおなじみのOpenBlockS 266を2003年4月にリリースしました。このモデルは,定番モデルとして企業向けマイクロサーバのスタンダードモデルになりました。新製品のOpenBlockS 600は,従来のOpenBlockSよりも大幅な機能の向上を達成しました。仕様の変化を次の表にしてみました。
OpenBlockS
CPU | Motorola PowerPC 860T 50MHz |
---|---|
Flash ROM(NOR) | 4Mバイト |
メモリ | 16M バイト(オンボード,拡張不可) |
シリアルインターフェース | RS-232C×1 |
LANインターフェース | 10/100Base-T×1,10Base-T×1 |
拡張インターフェース | 2.5インチHDDインターフェース×1,CFインターフェース×1 |
外形寸法 | 118(W)×84(D)×52(H)mm |
OpenBlockS S
CPU | IBM PowerPC 405GP 200MHz |
---|---|
Flash ROM(NOR) | 8Mバイト |
メモリ | 64Mバイト(オンボード,拡張不可) |
シリアルインターフェース | RS-232C×1 |
LANインターフェース | 10/100Base-T×2 |
拡張インターフェース | IDEブリッジ×1 |
外形寸法 | 118(W)×84(D)×52(H)mm |
OpenBlockS R
CPU | IBM PowerPC 405GP 200MHz |
---|---|
Flash ROM(NOR) | 8Mバイト |
メモリ | 64Mバイト(オンボード,拡張不可) |
シリアルインターフェース | RS-232C×1 |
LANインターフェース | 10/100Base-T×2 |
拡張インターフェース | IDEブリッジ×1 |
外形寸法 | 114(W)×80(D)×40(H)mm |
OpenBlockS 266
CPU | IBM PowerPC 405GPr 266MHz |
---|---|
メモリ | 128Mバイト(PC133 SDRAM) |
Flash ROM(NOR) | 16Mバイト(ユーザエリア約3.6Mバイト) |
LANインターフェース | 10/100Base-TX×2 |
シリアルインターフェース | RJ-45×1 ポート(FULL結線×1) |
内蔵ストレージ | CF TYPE-1,IDE2.5インチHDD(UDMA100) |
外形寸法 | 81(W)×114.5(D)×38(H)mm ※ゴム足0.5mm |
OpenBlockS 600
CPU | AMCC PowerPC 405EX 600MHz |
---|---|
メモリ | 1Gバイト(DDR2 SDRAM) |
Flash ROM(NOR) | 128Mバイト(ユーザエリア約64Mバイト) |
ストレージ | CF(1Gバイト標準添付) |
LANインターフェース | 1000Base-T×2 |
シリアルインターフェース | 5芯結線×2,コンソール及び外部機器用 |
USB | USB 2.0(外部×2,内部×1) |
JTAG | 2×8ピンヘッダ(2.54mmピッチ)×1 |
外形寸法 | 81(W)×133(D)×31.8(H)mm ※ゴム足0.5mm |
組込みJava対応
Java SE for Embedded 5.0を搭載し,ついにOpenBlockS 600上でJavaアプリケーションソフトウェアを稼動できるようになりました。ネットワークインターフェースの充実だけでなく,ソフトウェアの面でもユーザニーズに合わせ,実に細かいところまで進化させました。OpenBlockS 600で,インターネットにかかわるビジネスを発展させてください。
初出:Software Design2009年8月号(2009年7月18日発売)
[ 引用元:gihyo.jp ]