« PLANEX MZK-WNH と MZK-W300NH2 用 OpenWrt 12.09 ファームウェア(Attitude Adjustment, r35864)をアップロードしました | トップページ | PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加 »

2013年3月10日 (日)

PLANEX MZK-WNH および MZK-W300NH2 用 OpenWrt のビルド方法

前回公開した PLANEX MZK-WNH および MZK-W300NH2 用 OpenWrt のビルド方法について書いておきます。
使用OSは、Lubuntu 12.04 Desktop (i386) です。

OpenWrt のビルドについての本家の情報は英語ですが以下にあります。
・ソースのありかに関する情報
    https://dev.openwrt.org/wiki/GetSource
・ビルド手順に関する情報
    http://wiki.openwrt.org/doc/howto/buildroot.exigence

  必要なディスクサイズは 3 ~ 4GB と書いてありますが、5GB は確保しておいてください。実測値は以下の通りで約 4.4GB 必要でした。

ビルド作業前:

$ df -k /
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       11352304 2599928   8175712  25% /

ビルド作業後(パッケージ追加の増分も含む):

$ df -k /
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       11352304 7183516   3592124  67% /

■前提条件

(1)ビルド環境
OSは、Lubuntu 12.04 Desktop (i386) を使用します。Ubuntu 12.04 Desktop でも同じだと思います。

(2)作成する対象
前回公開した PLANEX MZK-WNH および MZK-W300NH2 用の OpenWrt Attitude Adjustment 12.09 です。

(3)作業ディレクトリ
~/openwrt ディレクトリ配下で作業するものとします。
(「~」 はホームディレクトリの意味)

■手順1)必要なパッケージのインストール

$ sudo apt-get install subversion build-essential git-core libncurses5-dev
$ sudo apt-get install zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl

■手順2) ソースの入手

$ mkdir -p ~/openwrt
$ cd ~/openwrt
$ svn co svn://svn.openwrt.org/openwrt/branches/attitude_adjustment

 ソースツリーがカレントディレクトリの attitude_adjustment ディレクトリ配下にできます。

■手順3) MKZ-WNH/MZK-W300NH2 用のパッチ適用
  私が行った MKZ-WNH/MZK-W300NH2 用の修正の変更差分を以下にパッチファイルとして1つにまとめたのでダウンロードして適用します。
  http://ranosgrant.cocolog-nifty.com/openwrt-aa-r35864/new-mzk-wnh.diff

以下のようにしてパッチを適用します:

$ cd ~/openwrt/attitude_adjustment
$ wget http://ranosgrant.cocolog-nifty.com/openwrt-aa-r35864/new-mzk-wnh.diff
$ patch -p0 < new-mzk-wnh.diff

パッチ適用時の出力結果:

$ patch -p0 < new-mzk-wnh.diff
patching file target/linux/ramips/rt305x/config-3.3
patching file target/linux/ramips/base-files/lib/ramips.sh
patching file target/linux/ramips/base-files/lib/upgrade/platform.sh
patching file target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
patching file target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
patching file target/linux/ramips/base-files/etc/uci-defaults/leds
patching file target/linux/ramips/base-files/etc/uci-defaults/network
patching file target/linux/ramips/base-files/etc/diag.sh
patching file target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
patching file target/linux/ramips/files/arch/mips/ralink/rt305x/mach-mzk-wnh.c
patching file target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
patching file target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
patching file target/linux/ramips/image/Makefile

 1つだけ新規ファイルがあるので以下のようにすると新規ファイルも svn の管理対象にできます

$ cd ~/openwrt/attitude_adjustment/target/linux/ramips/files/arch/mips/ralink/rt305x
$ svn add mach-mzk-wnh.c

■手順4) make menuconfig の実行

  MZK-WNH および MZK-W300NH2 用にビルド対象を指定します。

$ cd ~/openwrt/attitude_adjustment
$ make menuconfig

実行するとメニュー画面が表示されるはずですが、必要なパッケージのインストールがされていないとメニューは表示されずにコマンドが終了します。その時は、出力されたメッセージを参考にパッケージを追加してください。

メニューが表示されたら以下の2つの項目を設定します。
 1) "Target System" の項目に、"Ralink RT288x/RT3xxx" を設定します。
  2) 次に "Subtarget" の項目に、"RT305x based boards" を設定します。

 下図の赤い線で囲った箇所が設定後の状態です。

Menuconfig

■手順5) make の実行
 単に make と打つだけでも構いませんが、それだと概略しか表示されないのでエラーがおきるとさっぱり分かりません。
  以下の様にして、最大レベルのログ出力にしつつ結果をファイルに保存することをおすすめします。

$ cd ~/openwrt/attitude_adjustment
$ make V=99 2>&1 | tee build.log

  初回はクロスコンパイル環境のソース取得も行うので、インターネットへのネットワーク接続が必須です。
  時間も非常にかかります(私の環境では回線が貧弱で5~6時間くらいかかりました)。

■ファームウェアのファイルの生成先
  以下のディレクトリにファイルができます:
    ~/openwrt/attitude_adjustment/bin/ramips/

ファイルは2つできます。
 openwrt-ramips-rt305x-mzk-wnh-squashfs-factory.bin
 openwrt-ramips-rt305x-mzk-wnh-squashfs-sysupgrade.bin

*-factory.bin が通常のファームウェアのファイルです。
*-sysupgrade.bin は、OpenWrt 同梱の sysupgrade コマンド用のファームウェアのファイルです。
ヘッダ情報やチェックサムなどファイルのフォーマットに違いがあります。

■おまけ: 変更差分の出し方

  cd ~/openwrt/attitude_adjustment
 svn diff

■パッチファイルの中身
パッチは言語に依存しないように LANG=C svn diff にて取得しました。
なお、本パッチのライセンスの扱いは OpenWrt 自体と同様に GPL v2 とします。

ブログ上だと長い行の右端が切れてしまうようですので以下からダウンロードしたファイルを見てください:

http://ranosgrant.cocolog-nifty.com/openwrt-aa-r35864/new-mzk-wnh.diff

Index: target/linux/ramips/rt305x/config-3.3
===================================================================
--- target/linux/ramips/rt305x/config-3.3 (revision 35879)
+++ target/linux/ramips/rt305x/config-3.3 (working copy)
@@ -102,6 +102,7 @@
CONFIG_RT305X_MACH_FREESTATION5=y
CONFIG_RT305X_MACH_HW550_3G=y
CONFIG_RT305X_MACH_MOFI3500_3GN=y
+CONFIG_RT305X_MACH_MZK_WNH=y
CONFIG_RT305X_MACH_NBG_419N=y
CONFIG_RT305X_MACH_NW718=y
CONFIG_RT305X_MACH_OMNI_EMB=y
Index: target/linux/ramips/base-files/lib/ramips.sh
===================================================================
--- target/linux/ramips/base-files/lib/ramips.sh (revision 35879)
+++ target/linux/ramips/base-files/lib/ramips.sh (working copy)
@@ -128,6 +128,9 @@
  *"Omnima MiniEMBWiFi")
   name="omni-emb"
   ;;
+ *"PLANEX MZK-WNH")
+  name="mzk-wnh"
+  ;;
  *"Petatel PSR-680W"*)
   name="psr-680w"
   ;;
Index: target/linux/ramips/base-files/lib/upgrade/platform.sh
===================================================================
--- target/linux/ramips/base-files/lib/upgrade/platform.sh (revision 35879)
+++ target/linux/ramips/base-files/lib/upgrade/platform.sh (working copy)
@@ -32,6 +32,7 @@
  freestation5 | \
  hw550-3g | \
  mofi3500-3gn | \
+ mzk-wnh | \
  nbg-419n | \
  nw718 | \
  omni-emb | \
Index: target/linux/ramips/base-files/lib/preinit/06_set_iface_mac
===================================================================
--- target/linux/ramips/base-files/lib/preinit/06_set_iface_mac (revision 35879)
+++ target/linux/ramips/base-files/lib/preinit/06_set_iface_mac (working copy)
@@ -9,6 +9,7 @@

  case $(ramips_board_name) in
  3g-6200n |\
+ mzk-wnh |\
  wl-330n |\
  wl-330n3g)
   mac=$(ramips_get_mac_binary factory 4)
Index: target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
===================================================================
--- target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom (revision 35879)
+++ target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom (working copy)
@@ -67,6 +67,7 @@
  freestation5 | \
  hw550-3g | \
  mofi3500-3gn | \
+ mzk-wnh | \
  pwh2004 | \
  nbg-419n | \
  nw718 | \
Index: target/linux/ramips/base-files/etc/uci-defaults/leds
===================================================================
--- target/linux/ramips/base-files/etc/uci-defaults/leds (revision 35879)
+++ target/linux/ramips/base-files/etc/uci-defaults/leds (working copy)
@@ -61,6 +61,9 @@
  mofi3500-3gn)
   set_usb_led "mofi3500-3gn:green:usb"
   ;;
+ mzk-wnh)
+  set_wifi_led "mzk-wnh:amber:wlan"
+  ;;
  nw718)
   set_usb_led "nw718:amber:usb"
   ;;
Index: target/linux/ramips/base-files/etc/uci-defaults/network
===================================================================
--- target/linux/ramips/base-files/etc/uci-defaults/network (revision 35879)
+++ target/linux/ramips/base-files/etc/uci-defaults/network (working copy)
@@ -70,6 +70,13 @@
   ucidef_add_switch_vlan "switch0" "2" "0 6t"
   ;;

+ mzk-wnh)
+  ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+  ucidef_add_switch "switch0" "1" "1"
+  ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 6t"
+  ucidef_add_switch_vlan "switch0" "2" "4 6t"
+  ;;
+
  f5d8235-v1 | \
  f5d8235-v2 | \
  ur-336un)
@@ -142,6 +149,7 @@
  argus-atp52b | \
  bc2 | \
  f5d8235-v1 | \
+ mzk-wnh | \
  nw718 | \
  psr-680w | \
  rt-n15 | \
Index: target/linux/ramips/base-files/etc/diag.sh
===================================================================
--- target/linux/ramips/base-files/etc/diag.sh (revision 35879)
+++ target/linux/ramips/base-files/etc/diag.sh (working copy)
@@ -61,6 +61,9 @@
  mofi3500-3gn)
   status_led="mofi3500-3gn:green:status"
   ;;
+ mzk-wnh)
+  status_led="mzk-wnh:green:power"
+  ;;
  nbg-419n)
   status_led="nbg-419n:green:power"
   ;;
Index: target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
===================================================================
--- target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile (revision 35879)
+++ target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile (working copy)
@@ -26,6 +26,7 @@
obj-$(CONFIG_RT305X_MACH_FREESTATION5)  += mach-freestation5.o
obj-$(CONFIG_RT305X_MACH_HW550_3G) += mach-hw550-3g.o
obj-$(CONFIG_RT305X_MACH_MOFI3500_3GN) += mach-mofi3500-3gn.o
+obj-$(CONFIG_RT305X_MACH_MZK_WNH) += mach-mzk-wnh.o
obj-$(CONFIG_RT305X_MACH_NBG_419N) += mach-nbg-419n.o
obj-$(CONFIG_RT305X_MACH_NW718)  += mach-nw718.o
obj-$(CONFIG_RT305X_MACH_OMNI_EMB) += mach-omni-emb.o
Index: target/linux/ramips/files/arch/mips/ralink/rt305x/mach-mzk-wnh.c
===================================================================
--- target/linux/ramips/files/arch/mips/ralink/rt305x/mach-mzk-wnh.c (revision 0)
+++ target/linux/ramips/files/arch/mips/ralink/rt305x/mach-mzk-wnh.c (revision 0)
@@ -0,0 +1,95 @@
+/*
+ *  PLANEX MZK-WNH board support
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/ethtool.h>
+
+#include <asm/mach-ralink/machine.h>
+#include <asm/mach-ralink/dev-gpio-buttons.h>
+#include <asm/mach-ralink/dev-gpio-leds.h>
+#include <asm/mach-ralink/rt305x.h>
+#include <asm/mach-ralink/rt305x_regs.h>
+#include <asm/mach-ralink/ramips_eth_platform.h>
+
+#include "devices.h"
+
+#define MZK_WNH_GPIO_LED_POWER  9
+#define MZK_WNH_GPIO_LED_WPS  11
+#define MZK_WNH_GPIO_LED_WLAN  14
+
+#define MZK_WNH_GPIO_BUTTON_RESET 0
+#define MZK_WNH_GPIO_BUTTON_WPS  12
+#define MZK_WNH_GPIO_SWITCH  13
+
+#define MZK_WNH_KEYS_POLL_INTERVAL 20
+#define MZK_WNH_KEYS_DEBOUNCE_INTERVAL (3 * MZK_WNH_KEYS_POLL_INTERVAL)
+
+static struct gpio_led mzk_wnh_leds_gpio[] __initdata = {
+ {
+  .name  = "mzk-wnh:green:power",
+  .gpio  = MZK_WNH_GPIO_LED_POWER,
+  .active_low = 1,
+ }, {
+  .name  = "mzk-wnh:amber:wps",
+  .gpio  = MZK_WNH_GPIO_LED_WPS,
+  .active_low = 1,
+ }, {
+  .name  = "mzk-wnh:amber:wlan",
+  .gpio  = MZK_WNH_GPIO_LED_WLAN,
+  .active_low = 1,
+ }
+};
+
+static struct gpio_keys_button mzk_wnh_gpio_buttons[] __initdata = {
+ {
+  .desc  = "reset",
+  .type  = EV_KEY,
+  .code  = KEY_RESTART,
+  .debounce_interval = MZK_WNH_KEYS_DEBOUNCE_INTERVAL,
+  .gpio  = MZK_WNH_GPIO_BUTTON_RESET,
+  .active_low = 1,
+ }, {
+  .desc  = "wps",
+  .type  = EV_KEY,
+  .code  = KEY_WPS_BUTTON,
+  .debounce_interval = MZK_WNH_KEYS_DEBOUNCE_INTERVAL,
+  .gpio  = MZK_WNH_GPIO_BUTTON_WPS,
+  .active_low = 1,
+#if 0
+ }, {
+  .desc  = "switch",
+  .type  = EV_KEY,
+  .code  = BTN_1,
+  .debounce_interval = MZK_WNH_KEYS_DEBOUNCE_INTERVAL,
+  .gpio  = MZK_WNH_GPIO_SWITCH,
+  .active_low = 1,
+#endif
+ }
+};
+
+static void __init mzk_wnh_init(void)
+{
+ rt305x_register_flash(0);
+
+ rt305x_gpio_init(RT305X_GPIO_MODE_GPIO << RT305X_GPIO_MODE_UART0_SHIFT);
+
+ rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_LLLLW;
+ rt305x_register_ethernet();
+ ramips_register_gpio_leds(-1, ARRAY_SIZE(mzk_wnh_leds_gpio),
+      mzk_wnh_leds_gpio);
+ ramips_register_gpio_buttons(-1, MZK_WNH_KEYS_POLL_INTERVAL,
+         ARRAY_SIZE(mzk_wnh_gpio_buttons),
+         mzk_wnh_gpio_buttons);
+ rt305x_register_wifi();
+ rt305x_register_wdt();
+}
+
+MIPS_MACHINE(RAMIPS_MACH_MZK_WNH, "MZK-WNH", "PLANEX MZK-WNH",
+      mzk_wnh_init);
Index: target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
===================================================================
--- target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig (revision 35879)
+++ target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig (working copy)
@@ -104,6 +104,11 @@
  select RALINK_DEV_GPIO_BUTTONS
  select RALINK_DEV_GPIO_LEDS

+config RT305X_MACH_MZK_WNH
+ bool "PLANEX MZK-WNH support"
+ select RALINK_DEV_GPIO_BUTTONS
+ select RALINK_DEV_GPIO_LEDS
+
config RT305X_MACH_WR512_3GN
  bool "SH-WR512NU/WS-WR512N1-like 3GN router"
  select RALINK_DEV_GPIO_BUTTONS
Index: target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
===================================================================
--- target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h (revision 35879)
+++ target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h (working copy)
@@ -31,6 +31,7 @@
  RAMIPS_MACH_DIR_620_A1,  /* D-Link DIR-620 A1 */
  RAMIPS_MACH_RT_G32_B1,  /* Asus RT-G32 B1 */
  RAMIPS_MACH_RT_N10_PLUS, /* Asus RT-N10+ */
+ RAMIPS_MACH_MZK_WNH,  /* PLANEX MZK-WNH */
  RAMIPS_MACH_NW718,  /* Netcore NW718 */
  RAMIPS_MACH_WL_330N,  /* Asus WL-330N */
  RAMIPS_MACH_WL_330N3G,  /* Asus WL-330N3G */
Index: target/linux/ramips/image/Makefile
===================================================================
--- target/linux/ramips/image/Makefile (revision 35879)
+++ target/linux/ramips/image/Makefile (working copy)
@@ -327,6 +327,12 @@
  $(call BuildFirmware/Generic/initramfs,$(1),$(2),$(call mkcmdline,$(3),$(4),$(5)) $(call mkmtd/$(6),$(mtdlayout_dir645a1)))
endef

+mtdlayout_mzk_wnh=192k(u-boot)ro,64k(u-boot-env)ro,64k(factory)ro,896k(kernel),2752k(rootfs),128k(Cimage)ro,3648k@0x50000(firmware)
+define BuildFirmware/MZK_WNH
+ $(call BuildFirmware/Generic,$(1),$(2),$(call mkcmdline,$(3),$(4),$(5)) $(call mkmtd/$(6),$(mtdlayout_mzk_wnh)),917484,2818048)
+ $(call BuildFirmware/Edimax,$(1),mzk-wnh,CSYS,RN52,0x50000,0x01100000)
+endef
+
define BuildFirmware/UMedia
  $(call BuildFirmware/GENERIC_8M,$(1),$(2),$(3),ttyS1,57600,phys)
  if [ -e "$(call sysupname,$(1),$(2))" ]; then \
@@ -501,6 +507,10 @@
  $(call Image/Build/Template/$(fs_squash)/$(1),GENERIC_8M,mofi3500-3gn,MOFI3500-3GN,ttyS1,57600,phys)
endef

+define Image/Build/Profile/MZK_WNH
+ $(call Image/Build/Template/$(fs_squash)/$(1),MZK_WNH,mzk-wnh,MZK-WNH,ttyS1,57600,phys)
+endef
+
define Image/Build/Profile/NBG419N
  $(call Image/Build/Template/$(fs_squash)/$(1),GENERIC_4M,nbg-419n,NBG-419N,ttyS1,57600,phys)
endef
@@ -607,6 +617,7 @@
  $(call Image/Build/Profile/FREESTATION5,$(1))
  $(call Image/Build/Profile/HW5503G,$(1))
  $(call Image/Build/Profile/MOFI35003GN,$(1))
+ $(call Image/Build/Profile/MZK_WNH,$(1))
  $(call Image/Build/Profile/NBG419N,$(1))
  $(call Image/Build/Profile/NW718,$(1))
  $(call Image/Build/Profile/OMNIEMB,$(1))

« PLANEX MZK-WNH と MZK-W300NH2 用 OpenWrt 12.09 ファームウェア(Attitude Adjustment, r35864)をアップロードしました | トップページ | PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加 »

openwrt」カテゴリの記事

PLANEX MZK-W300NH2」カテゴリの記事

PLANEX MZK-WNH」カテゴリの記事

コメント

 情報ありがとうございます。いつも拝見させていただいています。
trunkを見ると、mzk-w300nh2なる定義がソース上にあり、flash配置もCimageが考慮されているように見えます。
まだ試していませんが、イメージも下記のようなものが作られました。

bin/ramips/openwrt-ramips-rt305x-mzk-w300nh2-squashfs-factory.bin

サダさん、コメントありがとうございます。
trunk 版の ChangeLog をみるとmzk-w300nh2対応の修正が入っていますね。
今度わたしも試してみて、このブログでも報告したいと思います。

↓の@34925 あたりから mzk-w300nh2 の修正がありました:
https://dev.openwrt.org/log/trunk?action=stop_on_copy&mode=stop_on_copy&rev=35000&stop_rev=&limit=100&sfp_email=&sfph_mail=

 trunk版でも、"Global build settings"の何かのチェックを外すと、mzk-w300nh2のイメージが作られ、一応動きますね。デフォルトのままだと、mzk-w300nh2のイメージは作られませんでした。

 menuconfigでLuCIのチェックを付けた設定でmakeしたイメージは、うちの16MBのwnhで立ち上がるものの、Web画面での設定中にメモリが足りなくなり、パニックします。
32MBに増設するには部材がないので、マニュアル設定で遊んでみるつもりです。

サダさんへ。
デフォルトの状態だとファイルの上限チェックでひっかかってイメージファイルが作成されなくなっていました。
対策パッチを作って先ほど「OpenWrt (trunk 版 r36041)を MZK-W300NH2 用にビルドしてみました 」というタイトルの記事で公開しました(2013年3月17日)。
ご参考まで。

 なるほど、カーネルサイズが大きくなったため、イメージが作られなかったのですね。
それで、kernel_symbol_tableなどのオプションを外すとイメージが作られたわけですね。納得です。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1776113/50679520

この記事へのトラックバック一覧です: PLANEX MZK-WNH および MZK-W300NH2 用 OpenWrt のビルド方法:

« PLANEX MZK-WNH と MZK-W300NH2 用 OpenWrt 12.09 ファームウェア(Attitude Adjustment, r35864)をアップロードしました | トップページ | PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加 »

最近のトラックバック

無料ブログはココログ