2015年10月4日日曜日

OpenWrt Image Builder に挑戦

以前から気になっていた OpenWrt のイメージ・ビルダーに挑戦してみました。

自由なパッケージの組み合わせでファームウェアを構成して、ファームウェアを作るものです。基本的にカーネルやパッケージそのもののビルドは行わず、すでにビルド済みのものを組み合わせるものとなっています。そのため、カーネルのオプションを変更するなどの場合には、このイメージ・ビルダーでは対応できません。

OpenWrt X86 で練習

今回は ThinkPad A20m へインストールしてある OpenWrt X86 のファームウェアを作成してみることとしました。ハードディスクへインストールする OpenWrt X86 の場合、何度もファームウェアの書き直しがあってもフラッシュメモリのように書き込み制限を気にすることなく作業が出来るため、練習台としては持って来いだと思いました。またインストールもしやすいのも理由です。

OpenWrt イメージ・ビルダーをマスターする

以下の公式ウェブサイト(英文)の通り作業を行いました。ただ使用したイメージ・ビルダーが Barrier Breaker 14.07 の X86 用であったことが異なるだけです。
Image Generator (Image Builder) - EN [OpenWrt Wiki]
http://wiki.openwrt.org/doc/howto/obtain.firmware.generate

開発環境としては 64bit OS が必要なため、Debian Jessie amd64 をインストールしてある ThinkPad X61 を使用しました。またDebian 側のパッケージも公式ウェブサイトの案内どおりのものをインストールしました。これらのパッケージのインストールはもちろん特権ユーザで行います。
# apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc

基本的なビルドの方法は以下のとおりです。作業は一般ユーザの権限で行います。
$ make image PROFILE=XXX PACKAGES="pkg1 pkg2 pkg3 -pkg4 -pkg5 -pkg6"
 プロファイルと呼ばれる基本的な設定を PROFILE= に指定してビルドを行います。プロファイルにないパッケージを追加する場合には PACKAGES= に指定します。なおプロファイルに存在するパッケージを削除する場合にはパッケージ名の前にマイナス(-)を付加します。上記の例の場合、pkg1 pkg2 pkg3 が追加パッケージで、-pkg4 -pkg5 -pkg6 が削除パッケージです。


用意されているプロファイルを調べるには次のコマンドを実行します。これにより、プロファイル名とインストールされるパッケージを知ることができます。
$ make info

OpenWrt X86 Barrier Breaker 14.07 のイメージ・ビルド

現在 ThinkPad A20m に Barrier Breaker 14.07 をインストールしてありますが、ここで追加したパッケージをインストールしてビルドしてみます。PC カード関係のパッケージと二種類の無線LANアダプタで使用するドライバ(二種類)を追加インストールしています。
$ make image PROFILE=Generic PACKGAES="kmod-pcmcia-core kmod-pcmcia-rsrc kmod-pcmcia-yenta wpad kmod-ath5k kmod-rt73-usb uhttpd luci"

出来上がったファームウェアは現在のディレクトリから bin/x86/ の下に作られます。

ファームウェアの動作確認

出来上がったファームウェアを ThinkPad A20m へ FTP 転送して、新規インストールを行なってみました。以前のネットワークの設定ファイルも一緒に戻しました。この状態で起動させたところ、追加パッケージも正常に動作しながら起動しました。

イメージ・ビルダーの注意事項

まだ全てを理解した訳ではありませんが、幾つか判明したことがありました。

1. パッケージの追加も削除もしない標準的なビルドでは、 OpenWrt の公式配布ファームウェア・イメージにはなりませんでした。少なくともブラウザで設定を行う LuCi と httpd が存在しませんでした。手動で設定ファイルを編集する場合を除いて、これらのパッケージを追加する必要がありました。

2. 追加パッケージの依存関係にあるものは自動的に追加されるようです。そのため、依存関係にあるパッケージを洗い出して列挙する必要性はありませんでした。

3. 追加出来ないパッケージが存在します。lspci コマンドの pciutils をインストールしようとしたところ、ビルドエラーで停止してしまいました。この他にも追加出来ないパッケージが存在していました。必要な場合には、システムのインストールの後に手動でインストールする必要がありました。

4. プロファイルに関係なくインストールされるパッケージの設定は include/target.mk で行われています。ルータ機能を必要とせず、無線LANアクセスポイントとして動作させる場合には以下のように変更するとルータ機能に関係したパッケージがファームウェア・イメージに含まれません。そのためファームウェア・イメージのサイズを減少させることができます。その分、他のパッケージを追加できる余裕ができます。
DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe kmod-ipt-nathelper firewall odhcpd odhcp6c
      ↓↓↓
DEFAULT_PACKAGES.router:=

今後の予定

今回 X86 系のファームウェア・イメージを作ることができました。今度は Broadcom の BCM47xx 系のチップ用のもののファームウェア・イメージを作ってみたいと思っています。b43 ドライバではなく wl ドライバを最初から組み込み、さらに USB 関係を組み込んでみたいと思っています。

0 件のコメント:

コメントを投稿