はじめに

Soekris Engineering 社製の net4511 は AMD ElanSC520(100Mhz) を搭載し、ボード上には CompactFLASH Type I/II socket、Mini-PCI type III socket、PC-Card/Cardbus slot、10/100 Mbit Ethernet ports が配置されていて 低消費電力の embedded PC communication computer です。

この net4511 に corega 社製の無線 LAN アダプター CG-WLCB54AG を装着し、LEAF Bering-uClibc をインストールして無線 LAN アクセスポイントを作ってみます。

Soekris Engineering net4511

Soekris net4511 の詳しい仕様はこちら をご覧ください。

 

 

soekris2s soekris1s
Soekris net4511 の前面 Soekris net4511 の背面
LAN ポート、シリアル・ポート等が見えます。

 

 

 

soekris3s soekris4s
Soekris net4511 の背面左 Soekris net4511 の背面右
ワイアレス・アンテナの取り付け穴、パワー・ランプ、エラー・ランプ、リセット・スイッチ LAN ポート(Eth0、Eth1)、シリアル・ポート、DC ジャック(2.1mm)

 

 

 

soekris5s soekris6s
ケースカバーを取った状態 1 ケースカバーを取った状態 2
PC-Card slot、Mini-PCI socket、CF socket AMD ElanSC520 (100Mhz)

 

 

LEAF Bering-uClibc 2.2.3 のインストール

PC Engines WRAP で LEAF Bering-uClibc を使う でも説明していますが、Bering-uClibc をコンパクトフラッシュにインストールしテストする環境( ホスト環境 )が必要です。今回は、LEAF Bering-uClibc 用の madwifi ドライバをコンパイルする必要があるので、ホスト環境を Debian (sid, kernel 2.4.27) にしました。また、コンパクトフラッシュに書き込み読み込みを行なうために PC Engines 社製のコンパクトフラッシュアダプタ CFDISK.5H をホスト環境のIDEに接続しています。

コンパクトフラッシュへの Bering-uClibc 2.2.3 のインストール手順は、PC Engines WRAP で LEAF Bering-uClibc を使う とほぼ同様ですが以下の点が異なりますので注意してください。

  • ホスト環境 が Linux なので Bering-uClibc_2.2.3_img_bering-uclibc-1680.bin をダウンロードする
      Leaf Bering-uClibc 2.2.3 available から Bering-uClibc_2.2.3_img_bering-uclibc-1680.bin をダウンロードします。マウントは以下のようにします。ホスト環境で VFAT 及び Loop Back Device が使えるようになっている必要があります。 

      # mount -t vfat -o loop Bering-uClibc_2.2.3_img_bering-uclibc-1680.bin /mnt

      さらに Bering-uClibc_modules_2.4.26.tar.gz もダウンロードし展開しておきます。net4511 を無線 LAN アクセスポイントにするために、有線のLANポートと無線のLANポートをブリッジする必要があります。したがって 2.4.26/kernel/net/bridge にある bridge.o が必要になります。

  •  

  • Bering-uClibc 2.2.x から Kernel command line parameters を記述するファイルが leaf.cfg になった
      以下は leaf.cfg のサンプルです。net4511 を無線 LAN アクセスポイントにするためにパッケージ bridge、libm、pcmcia、pcmod、wireless が必要です。これらは Packages 2.x – Bering uClibc よりダウンロードしコンパクトフラッシュへコピーしておきます。 

      # This file is parsed as a shell script
      # Kernel command line parameters are available as KCMD_
      # ie: KCMD_LRP contains the LRP= portion of the kernel command line
      # NOTE: For kernel command line settings that do not include an equals
      # sign (ie: rw or similar), the variable is set to itself, allowing
      # for easy testing (ie: KCMD_rw=rw).
      
      # LRP and PKGPATH variables now support whitespace (space, tab, newline)
      # as well as commas for seperators.
      
      # Uncomment for more verbose execution.
      #VERBOSE=1
      
      # Other variables you might want to set in this file include:
      # LRP		Packages to load
      # PKGPATH	Device(s) to load packages from
      # syst_size	Size of root ramdisk
      # tmp_size	Size of /tmp ramdisk
      # log_size	Size of /var/log ramdisk
      
      # Example:
      #LRP="$KCMD_LRP rsync"
      LRP="root config etc local libm modules bridge keyboard ulogd pcmcia pcmod wireless dnsmasq dropbear sh-httpd weblet"
      PKGPATH="/dev/hda1:msdos"
      syst_size=6M
      log_size=2M
  • シリアル・コンソールへの接続について
      net4511 をシリアルコンソールへ接続する場合の Baud rate は 19200 にします。38400 ではうまく表示できませんでした。以下に syslinux.cfg のサンプルを示します。オリジナルの syslinux.cfg の1行目にある display syslinux.dpy もシリアルコンソールの画面が崩れるので削除しています。 

      serial 0 19200
      timeout 0
      append console=ttyS0,19200
      default linux initrd=initrd.lrp init=/linuxrc rw root=/dev/ram0 LEAFCFG=/dev/hda1:msdos

尚、leaf.cfg の PKGPATH と syslinux.cfg の LEAFCFG に記述してあるデバイスノードは、net4511 でコンパクトフラッシュから起動する場合の設定です。ホスト環境で起動する場合はこの2箇所をホスト環境のデバイスノードに書き換える必要があります。

また、シリアルコンソールを有効にするためには上記の syslinux.cfg の他、/etc/inittab を修正します。詳細はPC Engines WRAP で LEAF Bering-uClibc を使う を参照してください。

無線LANアダプター CG-WLCB54AG ドライバの入手とビルド

cgwlcb54ag
無線LANアダプター CG-WLCB54AG のチップセットは Atheros Communications AR5xxx シリーズで、これに対応するドライバは madwifi MADWiFi – Multiband Atheros Driver for WiFi です。

madwifi の CVS snapshot を Daily madwifi CVS snapshots 等からダウンロードできますが、ホスト環境が Debian (sid) であるので madwifi の Debian 用 ソース・パッケージを apt-get して使うことにします。

madwifi の Debian 用 ソース・パッケージは、marlow.dk – Marlow@homei で配布されています。/etc/apt/sources.list に以下のリポジトリを追加し、

deb ftp://debian.marlow.dk/ sid madwifi
deb-src ftp://debian.marlow.dk/ sid madwifi

apt-get を実行します。 /usr/src に madwifi.tar.gz が落ちるので、これを伸張すると /usr/src/modules 下に madwifi の Debian 用 ソースが展開されます。

# apt-get update
# apt-get install madwifi-source

madwifi ドライバのビルドには、LEAF Bering-uClibc 2.2.3 のカーネル 2.4.26 のソースツリーが必要です。Linux Kernel Archives Mirror Sites 等からカーネル 2.4.26 をダウンロードし伸張し、 LEAF CVS リポジトリの cvs: leaf/src/bering-uclibc/configs/kernel/2.4.26/patches から 以下のリストの patch 8本をダウンロードして、リスト順でカーネルに patch を当てます。

  • helpers-2.4.26.patch.gz
  • pom-pending.patch.gz
  • ebtables-brnf-6_vs_2.4.26.diff.gz
  • linux-mppe.patch.gz
  • grsecurity-1.9.15-2.4.26.patch.gz
  • wd1100_patch.gz
  • netconfig.diff.gz
  • can-2004-0554.patch.gz

LEAF Bering-uClibc 2.2.3 のカーネル 2.4.26 は gcc-2.95 でビルドされているので、これに合わせます。カーネルの Makefile の19行目と30行目を以下のように変更します。gcc-2.95 がインストールされていない場合は apt-get install gcc-2.95 でインストールします。

HOSTCC      = gcc-2.95
CC          = $(CROSS_COMPILE)gcc-2.95

LEAF CVS リポジトリ cvs: leaf/src/bering-uclibc/configs/kernel/2.4.26 から Bering-2.4.26.config を取得し /usr/src/linux-2.4.26 へ .config として
コピーし、カーネルをビルドします。

# cd /usr/src/linux-2.4.26
# make-kpkg clean
# make-kpkg kernel_image

次に madwifi ドライバ をビルドしますが、sharutils がインストールされていることと以下の2つのファイルの修正が必要です。

/usr/src/modules/madwifi/hal/ah.h の 310 行目あたりを以下のように修正。

enum {
	CTRY_DEBUG	= 0x1ff,		/* debug country code */
	CTRY_DEFAULT	= 0x188			/* default country code */ <-- オリジナルは 0 なので 0x188 に変更
};

/usr/src/modules/madwifi/hal/linux/i386-elf.inc の 49 行目あたりを以下のように修正。

#
CC=	${TOOLPREFIX}gcc-2.95 <-- gcc-2.95 に変更
LD=	${TOOLPREFIX}ld
STRIP=	${TOOLPREFIX}strip
OBJCOPY=${TOOLPREFIX}objcopy
NM=	${TOOLPREFIX}nm

madwifi ドライバ をビルドします。

# cd /usr/src/linux-2.4.26
# make-kpkg modules_image

ビルドが終了すると、/usr/src に madwifi-module-2.4.26_YYYYMMDD-1-onoe+10.00.Custom_i386.deb が出来ているので dpkg -i でインストールします。(YYYYMMDD は madwifi の Debian 用 ソース・パッケージの日付)
/lib/modules/2.4.26/kernel/drivers/net にドライバがインストールされます。

# dpkg -i madwifi-module-2.4.26_YYYYMMDD-1-onoe+10.00.Custom_i386.deb

LEAF Bering-uClibc 2.2.3 の設定

LEAF Bering-uClibc 2.2.3 の設定の基本的な流れを以下に記します。詳細はPC Engines WRAP で LEAF Bering-uClibc を使う を参照してください。

  • ホスト環境で、Bering-uClibc_2.2.3_img_bering-uclibc-1680.bin をマウントしそのファイルをすべてコンパクトフラッシュにコピーする。
  • 別途ダウンロードした bridge.lrp、libm.lrp、pcmcia.lrp、pcmod.lrp、wireless.lrp をコンパクトフラッシュにコピーする。
  • IDE 接続のコンパクトフラッシュから起動するため、initrd_ide_cd.lrp を別途ダウンロードしコンパクトフラッシュの initrd.lrp に上書きコピー。
  • syslinux を実行しておく。
  • ホスト環境で、コンパクトフラッシュから起動し root でログイン。(この時のパスワードはなし)
  • passwd で root のパスワードを設定。かつ eth0 を使えるようにするために最小限のネットワーク設定を行なう。この時 /etc/modules は crc32、
    natsemi、softdog のみ有効にする。バックアップを忘れずに。
  • 再度、ホスト環境で前述のように leaf.cfg と syslinux.cfg を修正する。
  • ホスト環境をシャットダウンし、コンパクトフラッシュを抜き net4511 へ装着する。
  • net4511 に電源を投入し、シリアルコンソールにブートメッセージが表示されることを確認。ログインし gendropbearkeys を実行しホストキーを作成する。dropbear をバックアップ後、再起動。
  • net4511 再起動後、リモートから madwifi ドライバ 及び bridge.o を /lib/modules へコピー。(scp コマンドを使う)
  • /etc/modules を以下のように修正。バックアップを忘れずに。
    # Some modules need this, like 8390, natsemi, 8139too
    crc32
    natsemi
    
    # Watchdog support, always choose one
    # standard software watchdog
    softdog
    
    #
    # Bridge support
    bridge
    
    # Wireless lan
    wlan
    ath_hal
    ath_rate_onoe
    ath_pci
    wlan_wep
  • /etc/network/interfaces を以下のように修正。バックアップを忘れずに。
    # /etc/network/interfaces -- configuration file for LEAF network
    #
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
    	address 0.0.0.0
    	netmask 255.255.255.255
    
    auto br0
    iface br0 inet static
    	address 192.168.x.y <-- 無線 LAN アクセスポイントの IP アドレス
    	netmask 255.255.255.0
    	broadcast 192.168.x.255
    	gateway   192.168.x.254
    	pre-up ip link set ath0 up
    	pre-up iwpriv ath0 mode 3 <-- 802.11g に設定 (1:802.11a 2:802.11b)
    	pre-up iwconfig ath0 mode master essid xxxx <-- ESSID を設定
    	pre-up iwconfig ath0 key s:xxxxxxxxxxxxx <-- WEP キー(128bit 13文字) を設定
    	pre-up brctl addbr br0
    	pre-up brctl addif br0 eth0
    	pre-up brctl addif br0 ath0

以上で設定は終了です。net4511 を再起動すれば無線 LAN アクセスポイントが稼動します。

 

 

soekris8s

 

 

最後に

Linuxでワイヤレス・アクセスポイントを構築するにも記されていますが、『店頭に並んでいるものを買い込んだ方が、カスタムで作るよりはずっと安いのは明らかです。』 しかしながら 『(ワイヤレス・アクセスポイントを構築することの理由は) 面白いと言うことです』

無線 LAN アクセスポイントを、自分で作ってみて初めて分かることも少なくありません。一度試されてはいかがでしょうか。


参考文献

  • UNIX USER 2004 7 月号
      Linux ドライバの対応状況とアクセスポイントの構築 (ファム 根津研介)

参考 URI