はじめに
連載5回目の今回からは,オリジナルファームウェアの開発方法をご紹介していきます。
ぷらっとホームが提供するファームウェアは,多くのお客様にご満足いただけるように汎用的な作りを心がけていますが,アプライアンス製品のベースハードウェアのように,あらかじめ特定のソフトウェアや設定を入れ込みたい場合には,オリジナルファームウェアの開発を行うことで,より便利に利用することができます。
また,公式ファームウェアではあらかじめ無効に設定されているカーネル機能を試したいという場合にも,本連載でご紹介する手順が有効です。
オリジナルファームウェアで変更できること
ファームウェアとは,Linuxカーネルとカーネル以外のいわゆるユーザランドをRAMディスク用にイメージ化したものを結合したファイルです。ファームウェアを構成する要素はすべて変更可能ですが,代表的な例をいくつかご紹介します。
初期設定ファイル
OpenBlockS 600には,本体のINITボタンを押しながら電源投入することで,ファームウェアの初期設定状態で起動する機能があります。この初期設定ファイルを変更することで,カスタマイズされたファームウェアでもINITボタンを押しながらの電源投入で完全な初期状態でのシステム起動が可能となります。
コマンド,ライブラリ
RAMディスクイメージに含まれるコマンド,ライブラリは,SSD/Linuxのソースツリーに含まれるものから必要な物を抽出して取り込んでいますが,これも必要に応じて増減が可能です。またもちろん,独自に開発したオリジナルプログラムを取り込むこともできます。
カーネルコンフィグレーション
無効になっている項目の有効化や,カーネルへのパッチ適用などの操作が可能です。
開発環境について
OpenBlockS 600に標準搭載されているSSD/Linuxは,ファームウェアの開発環境としての機能も持っています。オープンソース/無償での公開を行っておりますので,追加費用なしで開発を行うことができます。
クロス開発環境
VMware PlayerやVMware Serverで利用可能な,仮想マシンのイメージファイルとして提供しています。i386アーキテクチャの仮想マシン上で,OpenBlockS 600向けのPowerPCバイナリを出力可能なクロスコンパイラを利用できます。クロス開発のために若干の予備知識が必要な場面もありますが,コンパイルが高速なため日常での開発が快適に行えます。
セルフ開発環境
i386上のクロス開発に対して,OpenBlockS 600上で行う開発がセルフ開発です。コンパイル速度が遅いのが弱点ですが,クロス開発とは違い,特に予備知識がなくてもi386環境のLinuxに近いイメージで開発を進めることができますので,初めてOpenBlockSを使用する方にも着手しやすい方法です。
開発を始める
さっそく開発環境を用意し,開発手順の紹介に進みたいと思います。本連載では,クロス開発環境を前提にしていますので,ぷらっとホーム技術情報ページ注1から仮想マシンのイメージファイルをダウンロードしてください。仮想マシンを起動すると(図1),初期状態ではNATモードで動作し,SSHサーバが起動した状態になります。VMware PlayerまたはVMware Serverのインストール,使用方法は,それぞれのドキュメントを参照してください。
環境設定
開発を始めるにあたって,CVSサーバへの接続設定(リスト1),コンパイルオプションの設定(リスト2)が最低限必要になってきます。CVSサーバの設定は,規定値がコメントアウトで記述されているので,行頭の「#」を削除し設定を有効にするだけです。コンパイルオプションの設定は,開発ターゲットのアーキテクチャ指定と,できあがったバイナリの保存先の指定が必要になります。
リスト1 CVSサーバへの接続設定(/etc/profile.d/ssdlinux_dev.shからの抜粋)
CVSROOT=:pserver:anoncvs@cvs.plathome.co.jp:/cvs/ssdlinux
CVS_RSH=rsh
export CVSROOT CVS_RSH
リスト2 コンパイルオプションの設定(/etc/mk.confからの抜粋)
# Cross Compile for OpenBlockS
CROSS_BUILD?= powerpc
DESTDIR?= /home/dest-powerpc
RELEASEDIR?= /home/release-powerpc
# OPENBLOCKS 'obs50','obs200','obs266' or 'none'
OPENBLOCKS?= obs600
SSD/Linuxのソースコード取得
ファームウェアを構築するためには,SSD/Linuxのソースコードが必要になります。入手方法は,ほぼ毎週更新を行っているtar.gzのアーカイブか,CVSサーバに接続する方法の2通りあります。今回はすでに設定をご紹介しているとおり,CVSでの接続を前提にしています(図2)。ぷらっとホームでは,日々SSD/Linuxに含まれるソフトウェアの構築テスト,メンテナンスを行っており,CVSをご利用いただくことでつねに最新の環境を手に入れることができます。
図2 ソースコードの取得
# cd /usr/
# cvs co -P src
cvs checkout: Updating src
U src/AUTHORS
U src/ChangeLog
U src/LICENCE
U src/Makefile
cvs checkout: Updating src/bin
U src/bin/Makefile
U src/bin/Makefile.inc
cvs checkout: Updating src/bin/bash
U src/bin/bash/Makefile
……(省略)……
構築の実行
カスタマイズを加える前に,ファームウェアが出来上がるまでの流れを確認するため標準のままで構築を行ってみます(図3)。構築を始めると,最初に各種ソフトウェアのソースコードのダウンロードが開始され,順次コンパイルが行われていきます。SSD/Linuxのソースコードの中身には,プログラムのソースコードは少なく,そのほとんどは利用している他のソースコードの取得方法やコンパイル時のオプション設定のための定義ファイル(Makefile)の集合体となっています。オリジナルファームウェアを開発する場合も,この一連の流れに必要な処理を組み入れることで,スムーズな開発と維持が可能になります。
図3 構築の実行
# cd /usr/src
# bmake build
all ===> Linux-PAM
>> Linux-PAM-0.77.tar.bz2 doesn't seem to exist on this system.
……(省略)……
150 Opening BINARY mode data connection for Linux-PAM-0.77.tar.bz2 (334514 bytes)
100% |***********************************| 326 KiB 929.66 KiB/s 00:00 ETA
226 Transfer complete.
334514 bytes received in 00:00 (920.22 KiB/s)
221 Goodbye.
Version 0.77 5 not extracted.
Remove old dist/Linux-PAM if exist ...
Extract Linux-PAM-0.77.tar.bz2 ...
ファームウェアの作成
OS全体の構築は,開発環境のハードウェアスペックにもよりますが,およそ3時間前後で完了します。構築が完了したら,できあがったバイナリから必要なファイルを抽出して,ファームウェアの作成を行います(図4)。完成したファイル(図4のuImage.initrd)は,公式ファームウェアとして提供されるものと同様に利用することができます。
図4 ファームウェアファイルの作成
# cd /usr/src/distrib/powerpc-obs600/standard
# bmake
……(省略)……
Image Name: Kernel, Ramdisk and FDT Image
Created: Tue Jul 28 10:09:33 2009
Image Type: PowerPC Linux Multi-File Image (gzip compressed)
Data Size: 15331818 Bytes = 14972.48 kB = 14.62 MB
Load Address: 00000000
Entry Point: 00000000
Contents:
Image 0: 1541231 Bytes = 1505.11 kB = 1.47 MB
Image 1: 13782797 Bytes = 13459.76 kB = 13.14 MB
Image 2: 7770 Bytes = 7.59 kB = 0.01 MB
# ls treeboot/
CVS Makefile Makefile.inc uImage.initrd
Column「豊富なインターフェースの秘密」
OpenBlockS 600は小さな筐体ですが,たくさんの機能が盛り込まれています。カタログなどでは,各部位についての特徴を紹介しきれません。今回は個別の部位にスポットを当てることで,より詳しくOpenBlockS 600を知ってもらいたいと思います。
- (1)Ethernet ポート
本稿の中でも紹介していますが,今回のモデルではギガビット対応のポートを2 つ搭載しました。これらポートはCPUに内蔵され,ネットワーク専用のRGM?バスで接続することで,高速な通信を実現しています。JumboFlame(最大9,000b)やタグVLANにも対応しており,さまざまなネットワーク環境で利用可能です。
- (2)RS232C/CONSOLE
本機の操作用のCONSOLE(コンソール)と,外部機器用との接続ためのRS232Cの2つのシリアルポートを搭載しています。ネットワーク監視の用途で使われることの多い,OpenBlockS 600ですが,いざというときにはシリアルでの接続が一番確実です。本体はもちろん,L2SW(レイヤ2スイッチ)などの管理にも,RS-232Cポートが活躍します。
- (3)ステータスインジケータ
従来のモデルから動作を示す目的で搭載していましたが,負荷がかかっても見た目に変化がないため,負荷状態を「見える化」してほしいという要望がありました。そこでOpenBlockS 600は,負荷の状態に合わせ点灯速度が変わるように改善しました。
また,これらのインターフェースの機能のレイアウトにも一工夫しました。
一度据え付けをすれば触ることが少ないACアダプタやEthernet ポートなどは片面に集めました。その反対側にはCONSOLEやステータスインジケータなどの日常のメンテナンスで利用するものを集中させています。
初出:Software Design2009年8月号(2009年7月18日発売)
[ 引用元:gihyo.jp ]