はじめに
今回はURoad-Homeにmini PCIで接続されているWiMAXモジュールについて見てみます。URoad-Home2+のときのことを考えるとLinuxが乗っているはずです。
URoad-Home関係の記事の一覧と概要はこちら
ハードウェア
URoad-Homeを分解してみたで紹介済みなので省略します。
SoCはGCT GDM7205Kです。
フラッシュメモリはI2Cで接続されています。
UARTの接続
丁寧にURoad-Home本体のUART端子の横にWiMAXと書かれたWiMAXモジュールからのUART端子が出ています。ただ、普通にCP2102なUART変換器を接続してもだめでした。何も表示されません。ということでオシロスコープを使ってボーレートと電圧を計測してみました。結果としては、HIGH時の電圧が1.8Vでボーレートは115200でした。
電圧が1.8Vであったので、FT232RLのモジュールを使用しました。このモジュールは電圧レベルを5V、3.3Vと切り替えるためのジャンパピンがあります。このジャンパピンの中央の端子にかかる電圧が入出力の電圧レベルになります。そこで中央のピン(VCC)を無接続にして、VCCピンに直流安定化電源からの1.8Vを印加し、使用しました。
ログからの考察
起動ログはこの記事の下の方にまとめて記してあります。
まず、OSですが、51行目から
uClinux
だそうです。MMUを除いたアイクロコントローラ向けのLinuxのディストリビューションだそうです。有名所どころだと、iPod Linuxとかだそうです。現在ホームページは消えていますが、Intelnet Archiveに一応ありました。カーネルバージョンは2.6.12でした。
メモリ(RAM)は15行目から
8MB
フラッシュ(ROM)は35行目から4000000なので、
64Mb(8MB)
のようです。GDM7205Kの内蔵SDRAMは8MBとデータシートに書いてあるので一致しています。メモリ8MBだとかなり厳しいですね。
Vincent7
という文言が目立ちますが、MoadcomかGCTが開発したuClinuxの開発コードだと思われます。Mobile CubeというWiMAXモバイルルータでも搭載されているようです。
コンソール
コンソールについてですが、一般的なLinuxのコンソールとは異なり、使用できるコマンド数が大きく制限されており、A9カメラみたいでした。使用できるコマンドもWiMAX関係のものばかりです。
ただ、shellというコマンドがあり、これを使用すると、Linuxのシェルが起動しました。パスワードも要供されませんでした。使用できるコマンドは非常に少ないです。フラッシュには9個のパーティションが存在するようです。また、sdaデバイスが存在しており、謎です。マウントしようとしましたが、できませんでした。
フラッシュのダンプと行きたいが…
コンソールに入れて、catも使えるのでバイナリを保存できるSrial Monitor Essentialを使用して/dev/mtdをダンプしようとしたのですが、cat: /dev/mtd0: No such deviceと言われてしまいます。/proc/mtdを見てみるとdev: size erasesize nameだけしか表示されません。どうやらフラッシュメモリは使用されていないようです。起動ログ、9行目から
root=/dev/ram0
とのことで、ramを/としてマウントしています。また、Bootログにブートローダが見当たりません。加えてWiMAXモジュールが動作を開始するのはURoad-Homeに電源を入れてからしばらくしてからです。WiMAXモジュールが動作を開始するタイミングのURoad-Home側のコンソールを見てみると、
##### USB init #####
WPS_AP_PBC_GPIO ralink_gpio_ioctl() info.irq:0x2, pid:693
= 2
goahead.c : WPS PBC Start.2500
webs: Listening for HTTP requests at address 192.168.100.254
insmod: wimax device driver ...
Found GDM USB VID = 0x1eb8 PID = 0x7f30 bcdDevice = 0x7f00
MODACOM WiMax driver version 3.2.1.0
GCT: Kernel download success.
GCT: Filesystem download success.
usbcore: registered new interface driver gdm_wimax
hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
usb 1-1: USB disconnect, address 2
usb 1-1: new high speed USB device using dwc_otg and address 3
usb 1-1: choose_configuration
usb 1-1: configuration #17 chosen from 1 choice
Found GDM USB VID = 0x1eb8 PID = 0x7f00 bcdDevice = 0x0002
MODACOM WiMax driver version 3.2.1.0
GDM WiMax Set CAPABILITY: 0x00000003
と出力されています。どうやら、URoad-Home側から、WiMAXモジュールにLinuxのカーネル(9行目)とrootfs(10行目)を流し込んでいるようです。ってことで、ダンプする必要はありません。URoad-Home側の/etc_ro/gct/gdmuimg.binというファイルが怪しい気がします。ただ、1.9MBしかない上に、binwalkで見ても、/binしか見当たらないので、本当にこのファイルなのかは不明です。mtd5に含まれているのかも知れませんが、こちらもbinwalkで見てもめぼしいファイルは見当たりません。
終わりに
もうちょいちゃんとダウンロードされるイメージの場所を調べたかったのですが時間もかかりそうだったのでこれくらいにしておきます。下に、各種ログを載せておきます。
URoad-Home関係の記事の一覧と概要はこちら
Bootログ
Linux version 2.6.12-uc0 (bradchoi@linux) (gcc version 3.4.4) #1532 Fri Sep 16 09:24:22 KST 2011
CPU: ARM926EJ-Sid(wb) [41069265] revision 5 (ARMv5TEJ)
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
CPU0: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
Machine: Vincent7
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists
Kernel command line: console=ttyS0,115200 root=/dev/ram0 initrd=0xd0400000,1152K usb_vid=0x1eb8 usb_serial=000001d931c65ca
vector_phys_addr = d0001000
PID hash table entries: 64 (order: 6, 1024 bytes)
CLK_1X=60000000
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 8MB = 8MB total
Memory: 2132KB available (1060K code, 303K data, 516K init)
Calibrating delay loop... 79.87 BogoMIPS (lpj=399360)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd
Freeing initrd memory: 1152K
NET: Registered protocol family 16
Starting vpos on DSP core
net_device not found
net_device not found
net_device not found
net_device not found
net_device not found
NetWinder Floating Point Emulator V0.97 (double precision)
ttyS0 at I/O 0xfc007500 (irq = 2) is a Vincent7 internal UART
ttyS1 at I/O 0xfc007540 (irq = 21) is a Vincent7 internal UART
io scheduler noop registered
RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
GCT mobile WiMax driver version 0.1
physmap flash device: 4000000 at c0000000
USB phy is probed to ULPI
GCT USB Device Controller v5 0.4 beta (dma disabled)
M-WiMAX Network Adaptor, version: 0.4
Using default clock delay 35
i2c /dev entries driver
GPIO_CD_CONFIG error
vincent7-sdio: probe of vincent7-sdio.0 failed with error -1
sdio_add_slave_function: sdio slave fn has wrong values. fn0, total_func_num0, fifo_size:0x640, RCV_BUF_SIZE:0x640
NET: Registered protocol family 17
RAMDISK: cramfs filesystem found at block 0
RAMDISK: Loading 900KiB [1 disk] into ram disk... done.
VFS: Mounted root (cramfs filesystem) readonly.
Freeing init memory: 516K
Welcome to
V i n c e n t 7 u C l i n u x
For further information check:
http://www.uclinux.org/
NVRAM devices:
Proved EEPROM
Proved FILE
Loading OMA DM management tree
Encrypted tree.
Model name: UROADHOME
Manufacturere: ModaCom
WIMAX MAC: 00:1d:93:1c:65:ca
HIF: console /dev/usb0
Parameter block: version 2 in NVRAM EEPROM
ARM Capability:
Encryption XML
Embedded EAP
OMA-DM Client
CAPL
Set Time: 0x4eccb626, Random Seed: 0x1931d2d6
DM> SBC configuration:
option = 0x0
mac_pdu = 0x1
SSTG = 0x3232
MAP_CAP = 0x6
UL_PWR_CTL = 0x1
DEMOD = 0x42d
MOD = 0x15
UL_CTL_CHAN = 0x6
MIMO_DEMOD = 0x3
MIMO_MOD = 0x140
PARAM_SET = 0x52
CINR_MEAS_CAP = 0x13
PERM_SUP = 0x8
FFT_SIZE = 24
MIN_FR_NR_SWITCH_PC = 1
EXT_CAP = 0x1
HO_TRIG_MTR = 0xb
CSIT_CAP = 0x4b9
HARQ_PDU_SN = 2 2
DM> vpos: Rx-burst=20984, Tx-burst=7168
vpos: Loading WiMAX functions... (start=0x10620000, end=0x10627b30, size=31536)
vpos: WiMAX functions are loaded. (v2.1.5:1.14.6, 2011/08/29 00:55:45, boot=180d)
ADC: 123,4
cal FW ver : 0
==============================================================
GDM720X TxCL start ==========================================
0x0C = 0xE240 : tx_dci = 8, tx_dcq =16
0x0C = 0xE240 : tx_dci = 6, tx_dcq =16
0x0C = 0xE240 : tx_dci = 1, tx_dcq =14
0x0C = 0xE240 : tx_dci = -3, tx_dcq =7
GDM720X Tx imb ==============================================
[Freq:2620] WimaxTx : tx_phase_mis = -2, tx_gain_mis = 2
GDM720X RX imb start =========================================
[Freq:2620] Final Rx imb main (dp, dg) = (0, 2)
[Freq:2620] Final Rx imb div. (dp, dg) = (-1, -1)
GDM720X RX lna start =========================================
Freq : 2525, 2625, 2675,
Rx 0 M: 0x1A80,0x1A80,0x1A40,
Rx 0 L: 0x1740,0x1740,0x1740,
Rx 1 M: 0x1A80,0x1A80,0x1A40,
Rx 1 L: 0x1740,0x1740,0x1740,
==============================================================
ヘルプ
DM> help
Display version information
version
Show/change statechart debug message level
sc [-l <level>]
Configure HCI packet display
hci [-l <level>] [-r <0|1>] [HCI packet]
Test for transport layer.
transt
Test for IP RENEW.
iprenew
Show/change nds debug message level
nds [-l <level>]
Start SF mode
sfs <frequency(kHz)> <Bandwidth(kHz)>
Exit SF mode
sfe
Configure authentication mode
auth [on|off]
Manage OMA DM tree
oma {cmds}
Help about help?
help [<topic>]
Display parameter block
param (null)
Configure calibration mode
cmode [on|off]
Set Frequency
sf Channed_ID [Freuqncy]
Change calbiration configuration
cfg (null)
Change NV parameters or write NV blocks.
nv <operation> [options]
Invoke a shell
shell
Reboot the system
reboot
Enable/disable debugging message
log [on|off|list] <items>
Set(or show) log level of wimax manager
wmlog [-l {0|1|2|3|4} | -h]
Control LED
led {GPG NUMBER 0-8} {LOW/HIGH 0|1}
Show profile of eap
eapprofile on|off
Dump eap packet
eapdump on|off
p [um|dm|ucd|dcd|f|mna|cm|cmac_key_count] -> print packet
pe [options] -> print enable
pd [options] -> print disable
pc enable [power(dBm)|offset] -> set power control
info [p|per] -> get information about command status
rci -> read cell ID
dump [ver|tim|conn|queue] -> dump internal variables
rfn -> read frame number
help -> view help message
sv [D2|D4|C1|C2|M0|M1] -> set PHY/MAC version
sf board_id fa_id -> set frequency
sa mac_addr -> set MAC addr
wspi addr data -> write SPI register
rspi addr -> read SPI register
wsrf addr data -> write SPI register
rsrf addr -> read SPI register
freq pll no freq -> pll no = 0,1,2; 2 is pll_1 disable
Auto-calibration setup
Jonah test only function
setting test
test [T|R|off|M|D|scn|slp] -> test mode control
change configuration
per CID num_frame -> measure PER
stt offset
vm addr size -> view memory
wm addr data -> write data to memory
quit -> return to message logging mode
vio -> view wibro mac io
vpio -> view wibro phy io
vcm -> view cmem
wcm -> write cmem
vim -> view imem
vdm -> view dmem
wdm -> write dmem
rdim -> read desub imem
verbose on/off -> verbose mode ON/OFF
wait [msec]
DM>
バージョン
DM> version
version 1.E.1.6 (010e0106)
シェル
DM> shell
BusyBox v1.00 (2008.10.20-03:19+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.
# pwd
/usr
# ls
bin sbin wimax
# ls /
bin dev etc home lib mnt proc sbin sys tmp usr var
# ls /bin
busybox date init mkdir mv rm true
cat echo kill more ps rmdir umount
chmod false ln mount pwd sh uname
cp hostname ls msh reboot sync vi
# ls sbin/
# ls bin/
[ env killall test time top
# ls /dev/
console mtdblock5 ptypd ptyrb sda4 ttyq5 ttys3
cua0 mtdblock6 ptype ptyrc sdio0 ttyq6 ttys4
cua1 mtdblock7 ptypf ptyrd sdio1 ttyq7 ttys5
gdmled mtdblock8 ptyq0 ptyre sdio2 ttyq8 ttys6
hda mtdblock9 ptyq1 ptyrf sdio3 ttyq9 ttys7
hda1 mtdr0 ptyq2 ptys0 sdio4 ttyqa ttys8
hda2 mtdr1 ptyq3 ptys1 tty ttyqb ttys9
hda3 mtdr2 ptyq4 ptys2 ttyS0 ttyqc ttysa
hda4 mtdr3 ptyq5 ptys3 ttyS1 ttyqd ttysb
i2c-0 mtdr4 ptyq6 ptys4 ttyp0 ttyqe ttysc
i2c-1 mtdr5 ptyq7 ptys5 ttyp1 ttyqf ttysd
ipsec mtdr6 ptyq8 ptys6 ttyp2 ttyr0 ttyse
kmem mtdr7 ptyq9 ptys7 ttyp3 ttyr1 ttysf
log mtdr8 ptyqa ptys8 ttyp4 ttyr2 ufd0
mem mtdr9 ptyqb ptys9 ttyp5 ttyr3 ufd0p1
mtd0 null ptyqc ptysa ttyp6 ttyr4 ufd0p2
mtd1 ppp ptyqd ptysb ttyp7 ttyr5 ufd0p3
mtd2 ptyp0 ptyqe ptysc ttyp8 ttyr6 urandom
mtd3 ptyp1 ptyqf ptysd ttyp9 ttyr7 usb0
mtd4 ptyp2 ptyr0 ptyse ttypa ttyr8 usb1
mtd5 ptyp3 ptyr1 ptysf ttypb ttyr9 usb2
mtd6 ptyp4 ptyr2 ram0 ttypc ttyra usb3
mtd7 ptyp5 ptyr3 ram1 ttypd ttyrb usb4
mtd8 ptyp6 ptyr4 ram2 ttype ttyrc usim
mtd9 ptyp7 ptyr5 ram3 ttypf ttyrd watchdog
mtdblock0 ptyp8 ptyr6 random ttyq0 ttyre zero
mtdblock1 ptyp9 ptyr7 sda ttyq1 ttyrf
mtdblock2 ptypa ptyr8 sda1 ttyq2 ttys0
mtdblock3 ptypb ptyr9 sda2 ttyq3 ttys1
mtdblock4 ptypc ptyra sda3 ttyq4 ttys2
# mount
/dev/ram0 on / type cramfs (ro)
/proc on /proc type proc (rw,nodiratime)
ram on /var type ramfs (rw)
/sys on /sys type sysfs (rw)