URoad-Homeを分解してみた6~WiMAXモジュールを解析~

投稿者: | 2月 19, 2024

はじめに

今回は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、CH1がTX、CH2がRX

電圧が1.8Vであったので、FT232RLのモジュールを使用しました。このモジュールは電圧レベルを5V、3.3Vと切り替えるためのジャンパピンがあります。このジャンパピンの中央の端子にかかる電圧が入出力の電圧レベルになります。そこで中央のピン(VCC)を無接続にして、VCCピンに直流安定化電源からの1.8Vを印加し、使用しました。

FT232RLモジュール
WiMAXモジュールに接続したところ

ログからの考察

起動ログはこの記事の下の方にまとめて記してあります。

まず、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)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)