« 2012年12月 | トップページ | 2013年2月 »

2013年1月23日 (水)

CQW-MRB2: ファーム更新失敗と復旧

CQW-MRB2のファームウェア更新で失敗して起動しなくなり、ものすごく焦りました。なんとか復旧できたので手順を記録しておきます。

こんな感じでブートしなくなりました。

Booting...
========== SPI =============
Reboot Result from Watchdog Timeout!

---RealTek(RTL8196C)at 2010.12.24-10:19+0800 version v1.1f [16bit](390MHz)
Jump to image start=0x80500000...
decompressing kernel:
Uncompressing Linux...LZMA: Decoding error = 1
done decompressing kernel.
start address: 0x80003630

参考にしたページ:RTL819x オープンソースファームウェア
http://sourceforge.jp/projects/sfnet_rtl819x/releases/

ここからrtl819x-SDK-v3.2.3.tar.gz をダウンロードして解凍します。沢山のファイルが出来ますが、その中にINSTALL.txtというファイルがあり、それにLAN経由でファームウェアをアップロードする方法が書いてあります。

INSTALL.TXT

- Use a RS232 cable to connect COM port between a LINUX PC and EV board.
- Connect LINUX PC Ethernet port to the LAN port of EV board. Set PC IP
address to 192.168.1.x (e.g., type 'ifconfig eth0 192.168.1.1').
- Start a COM port console (e.g., minicom), and set COM port setting to
38400, 8N1 and no flow control.
- Power on EV board, and press 'ESC' key in COM port console to escape the
booting process. If ok, you may see "<RealTek>" prompt in the console.
- Start a TFTP client in LINUX PC, and connect to 192.168.1.6. Set file
type to binary mode to TFTP server of EV board, put root.bin if gw
platform to TFTP server, and put root image file(rtl819x/image/root.bin) to TFTP server,
then put the webpages image file and linux image files to TFTP server.
After linux.bin file upload had finished, boot code will auto booting.
- NOTE:you can do the same thing on Windos PC.

では、さっそく。

まず、PC側を固定IPアドレス:192.168.1.1に設定し、CQW-MRB2のLANポートとPCを接続します。

次にコンソールを接続してターミナルを起動し、電源ONと同時にESCを押します。すると<Realtek>のプロンプトが現れます。

========== SPI =============

---RealTek(RTL8196C)at 2010.12.24-10:19+0800 version v1.1f [16bit](390MHz)
Set 8196C PHY Patch OK

---Ethernet init Okay!
<RealTek>

これでCQW-MRB2側の準備OKです。PCのtftpクライアントを起動し、PCIのオリジナルファームであるcqwmrb2_v1.02.binを指定して、192.168.1.6へPUTします。

Cqwmrb2_tftp


コンソールにメッセージが表示されていきます。これでアップロードの状況がわかります。結構時間がかかります。

**TFTP Client Upload, File Name: cqw-mrb2_v1.02.bin
-
**TFTP Client Upload File Size = 46D002 Bytes at 80500000

Success!
<RealTek>
Linux kernel (root-fs) upgrade.
checksum Ok !
burn Addr =0x10000! srcAddr=0x80500000 len =0x46d002
..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Flash Write Successed!
<RealTek>
reboot.......

Booting...

無事、治りました。

時間が出来たら、オープンソースのファームウェアも入れてみようと思います。

2013年1月21日 (月)

CQW-MRB2: ファームウェア改造手順メモ

わすれないうちにメモしておくことにしよっと。

  1. Fedora8をインストール
  2. General 1.00ファームウェアのビルド
  3. PCIオリジナル 1.02ファームウェアからromfsを取り出す
  4. イメージファイルの作成
  5. ファーム書き込み

Fedora8をインストール

これはいいでしょう、割愛。

General 1.00ファームウェアのビルド

Edimax 3G6218Nのホームページへ行き、GPL Source Codeをダウンロードします。

ファイルを解凍後、General 1.00ファームウェアをビルドします。


# cd /home
# unzip 3G-6218n_RTL8196C_3G_GPL_20110121.zip
# tar xzvf 3G-6218n_RTL8196C_3G_GPL_20110121.tgz
# cd RTL8196C_GPL
# ./BUILD_3G6218GN.sh

ちょっと時間がかかります。2つbinファイルが作られたというメッセージが出れば完了です。

PCIオリジナル 1.02ファームウェアからromfsを取り出す

以前も書いたので手順だけ記載します。

ファームウェアの分割

# dd if=cqw-mrb2_v1.02.bin of=header.img bs=1114112 count=1
# dd if=cqw-mrb2_v1.02.bin of=body.img skip=1114112 bs=1 count=3526656
# dd if=cqw-mrb2_v1.02.bin of=footer.img skip=4640768 bs=1 count=2

以下ディレクトリへ移動してunsquashfsします。

# cd /home/RTL8196C_GPL/AP/mkimg
# /home/RTL8196C_GPL/AP/mkimg/squashfs4.0/squashfs-tools/unsquashfs body.img

squashfs-rootが作成され、その下にv1.02のファイルシステムが展開されます。

イメージファイルの作成

上記で作成したディレクトリ配下のシェル、プログラムをお好きなように修正します。
/home/RTL8196C_GPL/AP/mkimg/squashfs-root

定義ファイルを修正します。モード(MODE)をGeneralからPCIに変更します。
# cd /home/RTL8196C_GPL/
# vi define/SCRIPT_DEFINED

_VERSION_="1.02w"
_MODEL_="3G6218GN"
_MODE_="PCI"
_PLATFORM_="RTL8196C_2300"
_HW_USB_CTL_="4"
_HW_LED_INTERNET_="16"
_HW_LOW_BATTERY_="10"
_HW_LED_WIRELESS_="2"
_HW_BUTTON_RESET_="5"
_HW_BUTTON_WPS_="1"
_HW_LED_POWER_="6"
_HW_BUTTON_SWITCH_="3"
_WIRELESS_IGMPSNOOP_="y"
_SPECIAL_CHAR_FILTER_IN_SCRIPT_="y"
_WPS_NO_BROADCAST_="y"
_UPNP_LIB_VERSION2_="y"
_WIRELESS_DRIVER_VERSION_="19"
_KERNEL_VERSION_26_="y"
_WIFI_11N_STANDARD_="y"
_REALTEK_URLFILTER_="y"
_RFTYPE_="1T1R"
_IS_GATEWAY_="y"
_WAN3G_="y"
_MEMBUS_="16"
_MEMSIZE_="32"
_L2TPD_="y"
_QOS_GUARANTEE_="y"
_FLASH8M_SUPPORT_="y"
_PPTP_PASSSTHROUGH_="y"
_LAN_WAN_SEL_="y"
_NBTSCAN2_="y"
_MINIUPNP_="y"
_USB_PWR_CTL_="y"
_PPPOB_="y"
_IPHONE_SUPPORT_="y"
_FOMAIL_="y"
_AUTO_DETECT_APN_LIST_="y"
_ISP_LIST_="y"

ビルド用のスクリプトを作成します。組み込むファイルシステムをromfsからsquashfs-rootへ変更します。
# vi BUILD.sh

#!/bin/sh
set -e

#Copy Default Path
echo "********************************************************************************"
echo "* Generate PATH *"
echo "********************************************************************************"

ROOTDIR=`pwd`
APPDIR=${ROOTDIR}/AP
CROSSDIR=${ROOTDIR}/toolchain/rsdk-1.3.6-4181-EB-2.6.30-0.9.30/bin
CROSS_PATH=${ROOTDIR}/toolchain/rsdk-1.3.6-4181-EB-2.6.30-0.9.30/

echo "CROSSDIR="${CROSSDIR} > ./define/PATH
echo "CROSS_COMPILE="${CROSSDIR}"/rsdk-linux-" >> ./define/PATH
echo "" >> ./define/PATH
echo "ROOTDIR="${ROOTDIR} >> ./define/PATH
echo " LINUXDIR="${ROOTDIR}"/linux-2.6.30_2300" >> ./define/PATH
echo " IMAGEDIR="${ROOTDIR}"/image" >> ./define/PATH
echo " APPDIR="${ROOTDIR}"/AP" >> ./define/PATH
echo " MODDIR="${APPDIR}"/module/" >> ./define/PATH
echo " ROMFSDIR="${APPDIR}"/mkimg/squashfs-root" >> ./define/PATH
echo " GOAHEADDIR="${APPDIR}"/goahead-2.1.1" >> ./define/PATH
echo " APPLIB="${APPDIR}"/Lib" >> ./define/PATH

. ./define/FUNCTION_SCRIPT
. ./define/PATH
LANG=eng
STR_DATE1=`date`

rm -f ${IMAGEDIR}/appimg
${ROOTDIR}/AP/mkimg/squashfs4.0/squashfs-tools/mksquashfs ${ROMFSDIR} ${IMAGEDIR}/appimg -comp lzma -always-use-fragments
#${APPDIR}/goahead-2.1.1/LINUX/cvimg root ${IMAGEDIR}/appimg ${IMAGEDIR}/appimg 2E0000 0x120000

size -A -x --target=binary ${IMAGEDIR}/appimg
chmod +r ${IMAGEDIR}/appimg
ls -l ${IMAGEDIR}/appimg

echo -e "\033[33;1m"
echo "********************************************************************************"
echo "* Building Image *"
echo "********************************************************************************"
echo -e "\033[0m"

cd ${IMAGEDIR}
./DoImage.sh
if [ $? != 0 ];then
exit 1
fi

STR_DATE2=`date`
echo "Start Time -->"${STR_DATE1}
echo "End Time -->"${STR_DATE2}

ビルドします。
# ./BUILD.sh

********************************************************************************
* Generate PATH *
********************************************************************************
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on /home/RTL8196C_GPL/image/appimg, block size 131072.
・・・中略・・・
Generate kernel image successfully, length=3526658 (0x0035d002), checksum=0x804
Generate kernel image successfully, length=4640754 (0x0046cff2), checksum=0x8d0c
-rwxrwxrwx 1 root root 8388608 Jan 21 00:40 ./3G6218GN/PCI/Factory/3G6218GN_PCI_1.02w_mp.bin
-rwxr-xr-x 1 root root 4640770 Jan 21 00:40 ./3G6218GN/PCI/Tester/3G6218GN_PCI_1.02w_upg.bin
Start Time -->Mon Jan 21 00:40:08 JST 2013
End Time -->Mon Jan 21 00:40:31 JST 2013

Tester/3G6218GN_PCI_1.02w_upg.bin が新しいファームウェアです。

ファーム書き込み

これもいいでしょう、割愛。

以上

2013年1月20日 (日)

CQW-MRB2: シリアルポート接続

CQW-MRB2のシリアルポートに接続してみました。

シリアルポート接続図:
Cqwmrb2__2
38400/8bit/NoParity/1bit/フロー無し。CQW-MRBと同じです。信号レベルは3.3V。端子名は、PC側(相手側)の端子名です。

ケースをあけたところ:
Cqwmrb2__7
CPU基板の表側。ここにはCQW-MRBではCPUが乗っていましたが、こちらはメモリだけです。
ISSI IC42S16160C-6TL: 256Mb SDRAM
MXIC 25L6445E: 64Mb Serial Flash Memory
フラッシュメモリは10万回書き換えできるみたいなので、寿命を気にせずファームアップデートできるでしょう。

CPU基板裏:
Cqwmrb2_cpu_3
CPUと無線LANコントローラは基板裏側に移動してました。RTL8196CがCPU、RTL8188CEが無線LAN。CPUにヒートシンクは無いです。実際使っていてもCQW-MRBのような発熱は感じられません。アーキテクチャはARMからMIPSに変わりました。動作周波数は200MHz→400MHzと大幅にアップしましたが、逆に消費電力は大幅に下がっているようですね。

ベース基板:
Cqwmrb2__8
ほとんど電源基板といった感じ。

以下、起動ログ
u-bootでは無いです。寡聞にしてなんというツールかわかりませんが・・・



Booting...
========== SPI =============

---RealTek(RTL8196C)at 2010.12.24-10:19+0800 version v1.1f [16bit](390MHz)
Jump to image start=0x80500000...
decompressing kernel:
Uncompressing Linux... done, booting the kernel.
done decompressing kernel.
start address: 0x80003630
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 26556k/32768k available (2737k kernel code, 6212k reserved, 680k data, 108k init, 0k highmem)
Calibrating delay loop... 388.30 BogoMIPS (lpj=1941504)
Mount-cache hash table entries: 512
net_namespace: 528 bytes
NET: Registered protocol family 16
bio: create slab at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
squashfs: version 4.0 (2009/01/31) Phillip Lougher
msgmni has been set to 51
io scheduler noop registered
io scheduler cfq registered (default)
HDLC line discipline: version $Revision: 4.8 $, maxframe=4096
N_HDLC line discipline registered.
Realtek GPIO Driver for Flash Reload Default
Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x18002000 (irq = 8) is a 16550A
PPP generic driver version 2.4.2
MPPE/MPPC encryption/compression module registered
NET: Registered protocol family 24
usbcore: registered new interface driver asix
RTL8192C/RTL8188C driver version 1.4 (2010-08-11)
=====>>INSIDE rtl8192cd_init_one <<=====
vendor_deivce_id=819110ec
=====>>EXIT rtl8192cd_init_one <<=====
=====>>INSIDE rtl8192cd_init_one <<=====
=====>>EXIT rtl8192cd_init_one <<=====
=====>>INSIDE rtl8192cd_init_one <<=====
=====>>EXIT rtl8192cd_init_one <<=====
=====>>INSIDE rtl8192cd_init_one <<=====
=====>>EXIT rtl8192cd_init_one <<=====
=====>>INSIDE rtl8192cd_init_one <<=====
=====>>EXIT rtl8192cd_init_one <<=====
=====>>INSIDE rtl8192cd_init_one <<=====
=====>>EXIT rtl8192cd_init_one <<=====

Probing RTL8186 10/100 NIC-kenel stack size order[2]...
chip name: 8196B, chip revid: 0
Set 8196C PHY Patch OK
NOT YET
Set threshould idx 0
eth0 added. vid=9 Member port 0x1...
eth1 added. vid=8 Member port 0x10...
eth2 added. vid=10 Member port 0x2...
eth3 added. vid=11 Member port 0x4...
eth4 added. vid=12 Member port 0x8...
[peth0] added, mapping to [eth1]...
SPI INIT
flash device: 0x400000 at 0xbfe00000
SPI 1
Physically mapped flash: Found an alies 0x800000 for the chip at 0x0, MX25L6405D device detect.
Creating 2 MTD partitions on "Physically mapped flash":
0x000000000000-0x000000800000 : "boot+cfg+linux+rootfs"
0x000000120000-0x000000800000 : "root fs"
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
USB 2.0 PHY Patch Done.
rtl8652-ehci rtl8652-ehci.0: RTL8652 On-Chip EHCI Host Controller
rtl8652-ehci rtl8652-ehci.0: new USB bus registered, assigned bus number 1
read synopsys=0
read synopsys2=0
rtl8652-ehci rtl8652-ehci.0: irq 9, io base 0x18021000
rtl8652-ehci rtl8652-ehci.0: USB 0.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: RTL8652 On-Chip EHCI Host Controller
usb usb1: Manufacturer: Linux 2.6.30.9 ehci_hcd
usb usb1: SerialNumber: rtl8652-ehci.0
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
rtl8652-ohci rtl8652-ohci.0: RTL8652 OHCI
rtl8652-ohci rtl8652-ohci.0: new USB bus registered, assigned bus number 2
rtl8652-ohci rtl8652-ohci.0: irq 9, io mem 0x18020000
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: RTL8652 OHCI
usb usb2: Manufacturer: Linux 2.6.30.9 ohci_hcd
usb usb2: SerialNumber: rtl8652
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
Netfilter messages via NETLINK v0.30.
nf_conntrack version 0.5.0 (512 buckets, 2048 max)
CONFIG_NF_CT_ACCT is deprecated and will be removed soon. Please use
nf_conntrack.acct=1 kernel paramater, acct=1 nf_conntrack module option or
sysctl net.netfilter.nf_conntrack_acct=1 to enable it.
init 461 Check Point!
xt_time: kernel timezone is -0000
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
VFS: Mounted root (squashfs filesystem) readonly on device 31:1.
Freeing unused kernel memory: 108k freed
init started: BusyBox v1.11.1 (2011-04-06 17:57:50 CST)
starting pid 666, tty '': '/etc/init.d/rcS'

starting pid 669, tty '': '-/bin/sh'console.


BusyBox v1.11.1 (2011-04-06 17:57:50 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Sat Jan 1 00:00:00 UTC 2011
write_usb_pwr_proc: file: 81cceec0, buffer: 1
syBox v1.11.1 (2011-04-06 17:57:50 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

, count: 2, data: 00000000
Running: USB is enabled
write_iu_led_proc: file: 814afba0, buffer: 0
, count: 2, data: 00000000
Running: usb/internet led off
killall: pptp.sh: no process killed
killall: pppoe.sh: no process killed
killall: comgt: no process killed
killall: failover.sh: no process killed
killall: ppp3gloop.sh: no process killed

Close Wan Interface!!
No dnrd daemon found. Exiting.

No dnrd daemon found. Exiting.
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: SIOCSIFHWADDR: No such device
ifconfig: ioctl 0x8913 failed: No such device
Initialize wlan0 interface


write_proc: file: 8148d740, buffer: 0
, count: 2, data: 00000000
write_wlan_led_proc: file: 81ccedc0, buffer: 2
, count: 2, data: 00000000
Running: wlan blink

Initialize wlan0-va0 interface


write_proc: file: 81cce740, buffer: 0
, count: 2, data: 00000000
write_wlan_led_proc: file: 814afe20, buffer: 2
, count: 2, data: 00000000
Running: wlan blink

Initialize wlan0-va1 interface


write_proc: file: 81cce6c0, buffer: 0
, count: 2, data: 00000000
write_wlan_led_proc: file: 8148d240, buffer: 2
, count: 2, data: 00000000
Running: wlan blink

Initialize wlan0-va2 interface


write_proc: file: 814a3be0, buffer: 0
, count: 2, data: 00000000
write_wlan_led_proc: file: 814a3f60, buffer: 2
, count: 2, data: 00000000
Running: wlan blink

Initialize wlan0-va3 interface


write_proc: file: 8148d3c0, buffer: 0
, count: 2, data: 00000000
write_wlan_led_proc: file: 8148d8c0, buffer: 2
, count: 2, data: 00000000
Running: wlan blink

Initialize WLAN interface


write_proc: file: 814a3be0, buffer: 0
, count: 2, data: 00000000
write_wlan_led_proc: file: 8148d6c0, buffer: 2
, count: 2, data: 00000000
Running: wlan blink

Setup BRIDGE interface

ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
bridge br0 doesn't exist; can't delete it
Setup bridge...
device eth1 entered promiscuous mode
device wlan0 entered promiscuous mode
===> Load_92C_Firmware
<=== Load_92C_Firmware
br0: port 2(wlan0) entering forwarding state
br0: port 1(eth1) entering forwarding state

Static DHCP Leases disable!
br0: port 1(eth1) entering disabled state
br0: port 1(eth1) entering forwarding state

write_proc: file: 8148dc40, buffer: 0
, count: 2, data: 00000000

WiFi Simple Config v1.17 (2010.06.04-06:14+0000).

route: ioctl 0x890c failed: No such process
interface ppp4 does not exist!
device eth1 is already a member of a bridge; can't enslave it to bridge br0.
**********************************************************************
* Running Diagd *
**********************************************************************
**********************************************************************
* Enable WSC_UPnP *
write_proc: file: 81cce840, buffer: E
, count: 2, data: 00000000
IEEE 802.11f (IAPP) using interface br0 (v1.7)
********************************************************************write_proc: file: 81c3c520, buffer: 0
, count: 2, data: 00000000
**

**********************************************************************
* Enable LLTD *
**********************************************************************
killall: lld2d: no process killed


**********************************************************************
* Enable GPIO Interrupt *
**********************************************************************

killall: watchdog.sh: no process killed

killall: radiusd: no process killed
RADIUS server disable !!
ReInit APMIB
**********************************************************************
* FREE Page,Dentries and Inodes Cache *
**********************************************************************
MemFree: 15244 kB
Cached: 3260 kB
#############only 3G WAN##############

write_proc: file: 814a36e0, buffer: 0
, count: 2, data: 00000000
write_proc: file: 814afba0, buffer: 0
, count: 2, data: 00000000
write_proc: file: 814a34e0, buffer: 0
, count: 2, data: 00000000
write_proc: file: 81cce0c0, buffer: 0
, count: 2, data: 00000000
write_proc: file: 814a36e0, buffer: 0
, count: 2, data: 00000000
IEEE 802.11f (IAPP) using interface br0 (v1.7)

WiFi Simple Config v1.17 (2010.06.04-06:14+0000).

ReInit APMIB
write_proc: file: 8151d220, buffer: E
, count: 2, data: 00000000
write_proc: file: 8151db20, buffer: 0
, count: 2, data: 00000000
WEBS Restarting !
hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad?
usb 2-1: new full speed USB device using rtl8652-ohci and address 2
usb 2-1: New USB device found, idVendor=0619, idProduct=0204
usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-1: Product: PHS AX530S
usb 2-1: Manufacturer: SII
usb 2-1: configuration #1 chosen from 1 choice
USB device assigned address is 2
Try to unload modules --> sierra option usbserial hso cdc-acm!
unload modules --> OK
write_iu_led_proc: file: 814af320, buffer: 2
, count: 2, data: 00000000
Running: usb/internet led blink
cdc_acm 2-1:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
Manufacturer=SII
Product=PHS AX530S
N/A
WILLCOM AX530S PHS dongle is found ...

No response!
No response!
ATI
OK
No response!
cat: can't open '/tmp/cgsn.tmp': No such file or directory
No response!
No response!
No response!
No response!
No response!
No response!
cat: can't open '/tmp/cgmm.tmp': No such file or directory

kill: you need to specify whom to kill
ERROR: Removed stale pid file
Close Wan Interface!!
ERROR: Couldn't kill dnrd: No such process

No dnrd daemon found. Exiting.
route: ioctl 0x890c failed: No such process
cp: cannot stat '/etc/ppp/options.orig': No such file or directory
No response!

chat: Jan 01 00:02:24 CONNECT 1843200
Serial connection established.
using channel 1
Using interface ppp4
Connect: ppp4 <--> /dev/ttyACM0
Warning - secret file /etc/ppp/pap-secrets has world and/or group access
sent [LCP ConfReq id=0x1 ]
rcvd [LCP ConfRej id=0x1 ]
sent [LCP ConfReq id=0x2 ]
rcvd [LCP ConfReq id=0x1 ]
lcp_reqci: returning CONFACK.
sent [LCP ConfAck id=0x1 ]
rcvd [LCP ConfNak id=0x2 ]
sent [LCP ConfReq id=0x3 ]
rcvd [LCP ConfAck id=0x3 ]
rcvd [CHAP Challenge id=0x1 , name = "xxxxxxxx"]
Warning - secret file /etc/ppp/chap-secrets has world and/or group access
sent [CHAP Response id=0x1 <3b8d272c1110811f738a68aff6ef53c7>, name = "xxxxxxxx"]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 ]
rcvd [IPCP ConfReq id=0x1 ]
ipcp: returning Configure-ACK
sent [IPCP ConfAck id=0x1 ]
rcvd [IPCP ConfNak id=0x1 ]
sent [IPCP ConfReq id=0x2 ]
rcvd [IPCP ConfAck id=0x2 ]
ipcp: up
local IP address xxx.xxx.xxx.xxx
remote IP address xxx.xxx.xxx.xxx
primary DNS address xxx.xxx.xxx.xxx
secondary DNS address xxx.xxx.xxx.xxx
Script /etc/ppp/ip-up started (pid 2873)

write_proc: file: 815355e0, buffer: 0
, count: 2, data: 00000000
write_proc: file: 8151d8a0, buffer: E
, count: 2, data: 00000000
write_proc: file: 81cce8c0, buffer: 0
, count: 2, data: 00000000
write_proc: file: 8148d940, buffer: 0
, count: 2, data: 00000000
write_proc: file: 814a3660, buffer: E
, count: 2, data: 00000000
write_proc: file: 815357e0, buffer: 0
, count: 2, data: 00000000
write_iu_led_proc: file: 8151d420, buffer: 1

1mFirewall] Setting MASQUERADE...
g firewall...
48.44
, count: 2, data: 00000000
Running: usb/internet led on
Script /etc/ppp/ip-up finished (pid 2873), status = 0x0



2013年1月16日 (水)

CQW-MRB2: ファームウェアv1.02からファイルシステムを取り出す

CQW-MRB2のファームウェアV1.02からromfsを取り出してみる。CQW-MRBと同じ手法が使えそうだ。

ファームウェアは次の構造になっているとアタリを付ける。

  1. Linuxカーネルイメージ
  2. ファイルシステム:squashfsで圧縮されている
  3. チェックサム:2バイト

まず3.は最後の2バイトで決めうちで良いだろう。
次に1.と2.の境界を探すため、ファームウェアcqw-mrb2_v1.02.binをバイナリエディタなどで開いて文字列"hsqs"を探す。これはsquashfsを示すヘッダ"sqsh"を逆順にしたもの。ここから後ろがsquashfsで圧縮されたファイルシステムと思われる。

Cqwmrb2_v102hsqs

0x110000(16進)=1114112(10進)。あとはddなどで分割すればよい。


# dd if=cqw-mrb2_v1.02.bin of=header.img bs=1114112 count=1
1+0 records in
1+0 records out
# dd if=cqw-mrb2_v1.02.bin of=body.img skip=1114112 bs=1 count=3526656
3526656+0 records in
3526656+0 records out
# dd if=cqw-mrb2_v1.02.bin of=footer.img skip=4640768 bs=1 count=2
2+0 records in
2+0 records out
# ll
total 9108
-rw-r--r-- 1 root root 3526656 2013-01-15 22:16 body.img
-rw-r--r-- 1 root root 4640770 2013-01-15 22:08 cqw-mrb2_v1.02.bin
-rw-r--r-- 1 root root       2 2013-01-15 22:16 footer.img
-rw-r--r-- 1 root root 1114112 2013-01-15 22:13 header.img

このbody.imgをunsquashfsツールで解凍する。squashfsは4.0が必要なようだ。


# file body.img
body.img: Squashfs filesystem, little endian, version 4.0, 898609919 bytes, 720 inodes, blocksize: 0 bytes, created: Mon Aug  3 13:13:52 1998

本家squashfsからダウンロードしても良いが、Edimaxの3G6218Nの製品ページからGPL Source Codeがダウンロードできる。それをビルドするとsquashfs-tools 4.0が入っているので、今回はそれを使ってみる。


# /home/RTL8196C_GPL/AP/mkimg/squashfs4.0/squashfs-tools/unsquashfs body.img
Parallel unsquashfs: Using 1 processor
681 inodes (733 blocks) to write
[=========================================================================================================================================|] 733/733 100%
created 497 files
created 39 directories
created 111 symlinks
created 73 devices
created 0 fifos
# ll
total 9116
-rw-r--r--  1 root root 3526656 2013-01-15 22:16 body.img
-rw-r--r--  1 root root 4640770 2013-01-15 22:08 cqw-mrb2_v1.02.bin
-rw-r--r--  1 root root       2 2013-01-15 22:16 footer.img
-rw-r--r--  1 root root 1114112 2013-01-15 22:13 header.img
drwxr-xr-x 13 root root    4096 2011-04-06 18:58 squashfs-root
# ll squashfs-root/
total 96
drwxr-xr-x 2 root root 4096 2011-04-06 18:58 bin
drwxr-xr-x 3 root root 4096 2011-04-06 18:58 dev
drwxr-xr-x 9 root root 4096 2011-04-06 18:58 etc
drwxr-xr-x 3 root root 4096 2011-04-06 18:58 lib
lrwxrwxrwx 1 root root   11 2013-01-15 22:21 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 2011-04-06 18:58 proc
drwxr-xr-x 2 root root 4096 2011-04-06 18:58 root
drwxr-xr-x 2 root root 4096 2011-04-06 18:58 sbin
drwxr-xr-x 2 root root 4096 2011-04-06 18:58 sys
lrwxrwxrwx 1 root root    4 2013-01-15 22:21 tmp -> /var
drwxr-xr-x 6 root root 4096 2011-04-06 18:58 usr
drwxr-xr-x 8 root root 4096 2011-04-06 18:58 var
drwxr-xr-x 3 root root 4096 2011-04-06 18:58 web

ファイルシステムを取り出すことが出来た。CQW-MRBとほとんど同じ構成に見える。
とりあえず今日はここまで。

2013年1月13日 (日)

CQW-MRB: Willcom NS001U(RX420IN)使用時の不満を改善

NS001UをCQW-MRBに直接挿して使っているうちにいくつか不満点が出てきました。

  1. 無線LANが比較的頻繁に切断される(PPP側は切断されない)
  2. 電源ONからPPP接続完了までの時間が長い(2分くらいかかる)

1.はWS002INでは起こらなかった事象です。WS002INはUSBコネクタにネック部分がありましたが、NS001UはUSBコネクタが直づけなので、W-SIMとCQW-MRBの無線LAN部がとても接近しています。PHS電波と無線LANが干渉しているのかもしれません。
ということで、まずは余計なPHS電波を遮断すべくNS001Uをアルミ箔でくるんで試してみました。

Cqwmrb_ns001

これで完全ではありませんが若干切れにくくなった気がします。私の環境では、NS001Uは全部くるまず、先端を1cm程度出すと具合が良いようでした。
ただあまり速度が出ないのと、W-SIMが結構熱を持つようですので、この対処はよく無い気もします。やはり根本的な解決策は、W-SIMと無線LAN送受信部を物理的に離すことだと思います。手元にUSB延長ケーブルが無かったので検証できてませんが・・・

ちなみにUSBハブ経由でもOKです。これでもちゃんと通信できます。

Cqwmrb_ns001_usb

写っているのは
BUFFALOの BSH4U06
というやつです。(たまたま手元にあっただけで、推奨するわけではありません)

こちらの方法のほうが安定、かつ速度が出ます。NEXUS7で無線LAN経由でSPEEDTESTしてみました。

Cqwmrb_ns001_speedtestusb

W-OAMの理論値である200kbpsが出てしまいました。ちょっと良すぎる気もしますが・・・

さて、2.ですがこれは前回からのToDoでした。

dial.shを読むと、信号強度を得るためのATコマンド群(AT+C・・・)が沢山記述されています。ステータス→モデム情報→シグナルで表示するための情報です。W-SIMはこれらのATコマンドには対応していませんのでばっさり削除することにします。実際ログにも「No Response」がゾロゾロ出力されているだけで無駄です。AT@Kコマンドに書き換えればCS名と信号強度を得られるので似たような機能を実装できますが、これはこれで2~3秒ロスしますし、今回は速度優先で実装しないことにします。

これで電源ONから1分以内で接続できるようになりました。

Cqwmrb_ppp_2

このときは電源ON後、44秒で接続完了しています。

さて、このCWQ-MRBはもうメーカーでも販売終息してます。私自身もメーカーに何度かNS001U対応要望とソース公開のメールをしたのですが、「検討中だが時期未定」の回答しかもらえませんでした。こういう状態なのでメーカーも文句言わないと思いますので、ファームウェア公開します。使用は自己責任でどうぞ。

NS001U+RX420IN専用と思ってください。2013/1/13のNorton AntiVirusでウィルススキャン済みです。
悪いところも書いておきますので、参考にしてください。
モデムコントロール部分以外は変えていないので、それ以外の機能はそのまま使えると思います。
ベンダ提供のファームウェアを戻すときは、通常のファームアップ手順でOKのはずです。

僕の環境での動作確認機器:

  • Netindex NS001U+RX420IN
  • SII AX530S
  • Netindex WS002IN+RX420IN(ステータス→モデム情報で機種名が表示できませんが使えます)

悪くなった点:

  • CQW-MRBの電源ONする前に、USBモデムを差しておく
  • USBモデムを差し直す場合は、CQW-MRB自体の電源OFF→ONする必要がある
  • 動作確認機器以外では動かないです

[2013.1.14] ファームの注意点を更新

2013年1月 6日 (日)

CQW-MRB: Willcom NS001U(RX420IN)対応のファームウェアを作る

※まとめました→http://homepage3.nifty.com/marm863/cqw-mrb/

まずは結果から。こんな感じで認識します。

Cqwmrb_rx420in_5


作り方ですが、2つのファームを合体させて、更にちょっと手を加えました。

  1. Edimax 3G6210Nのv1.00ファームウェアの2.6.16-STARカーネル
  2. CQW-MRB v1.04のファームウェアのromfs
  3. (2)のモデムコントロールプログラム(modemctl)の置き換え
  4. (1)~(3)を合体させてファームウェアを作成

オリジナルのmodemctlはバイナリプログラムですが、ソースが入手できないのでシェルで作ります。


vi /home/3G6210N-GPL/AP/mkimg/squashfs-root/bin/modemctl
#!/bin/sh
rm -f /tmp/modeminfo.probe
rm -f /tmp/RUN_DEV_INT
insmod /bin/cdc-acm.ko
echo "NetIndex Inc." >/tmp/modeminfo.probe
echo "RX420IN" >>/tmp/modeminfo.probe
echo "device=/dev/ttyACM0" >/tmp/RUN_DEV_INT
dial.sh

オリジナルのmodemctlはhotplugに対応していて、各種モデムに最適なドライバをinsmodするのですが
私はRX420INとAX530Sしか持っていないのでcdc-acmドライバで決め打ちです。
もちろん、hotplugに未対応coldsweats01なので起動時にあらかじめモデムを差し込んでおく必要があります。

気持ちの問題ですが、左上の「CQR-MRB」のバナーも新しくしてみました。(for Willcom NS001uだ!)

/home/3G6210N-GPL/AP/mkimg/squashfs-root/web/file/db_banner_l.gif

とまあ、こんな感じで繋がっています。

Cqwmrb_rx420in_6

AX530Sより速度は遅いですが消費電力(430mA→175mA)が低いので長く使うことができるはずです。
また、WS002INとは消費電力では変わらず、速度Up(100kbps→200kbps)が期待できそう。(というかWS002INはそもそも入手できませんが)
W-VALUE SELECTが終わる今年6月までは、もう少しこの環境で頑張ってみます!・・・次は何にしよう・・・

Todo:

  • hotplug対応 ・・・USBの挿抜認識って???
  • dial.shに入っている余計なATコマンドを無くして接続までの時間短縮

« 2012年12月 | トップページ | 2013年2月 »

最近のトラックバック

2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
フォト
無料ブログはココログ