Flucard ProはARM Linux搭載でtelnetdを有効にできるなんておもしろそう!


2012/04/24追記: 「Flucardで出来ることのまとめ 2012/04/23版」とか「FlucardにFlashAir互換機能を搭載した 2012/04/19版」とか情報更新がありますので、以下を読んだあと、参照してみてください。
—————————————————-
最近、東芝FlashAirというのが評判です。
Eye-Fiと比較すると使いにくい、というような評判が大きかったのですが、正しい使い方、というものが判明してきたので、評判が上がってきたという感じです。

簡単にいうと
・Eye-Fi = 撮影したものを全部転送する思想
・FlashAir = 撮影したものから必要なものだけを取り出す思想

といったところです。

さて、実はFlashAirと同系統でFlucard Proというものがあります。
こちらはもう発売してから1年たつ先行品です。
日本ではプラネックス取り扱いで販売されています。(2012/10/24追記: 現在はプラネックスでの取り扱いが終了し、Trek2000の直販となっています)

Amazon Trek2000ストア
楽天 Trek2000ストア
送料無料! Wifi機能付きSDカード ...

送料無料! Wifi機能付きSDカード …
価格:4,700円(税込、送料込)

送料無料! Wifi機能付きSDカード Flucard16GB

送料無料! Wifi機能付きSDカード Flucard16GB
価格:9,890円(税込、送料込)

この製品、Webで評判を探すと不安定という話ばかりです。
なので、敬遠していたのですが、よくよく調べてみると先月(2012年3月)にfirmwareがアップデートしていました。

firmware.zipをダウンロードして中身を見てみると非常に興味深いことが・・・

$ unzip -l flucardpro-3.65_100R-firmware.zip
Archive:  flucardpro-3.65_100R-firmware.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  03-06-12 16:16   firmware/
      199  10-19-11 15:14   firmware/autorun.sh
  2794656  12-31-11 23:15   firmware/Image
  2731040  02-01-12 15:02   firmware/image3
  2517541  03-06-12 15:36   firmware/initramfs.gz
  2527932  03-06-12 15:33   firmware/initramfs3.gz
   109400  10-15-11 23:34   firmware/program.bin
      120  03-06-12 15:35   firmware/version.txt
      115  03-06-12 15:32   firmware/version3.txt
 --------                   -------
 10681003                   9 files
$

ファイルの名付け方法が非常にLinuxっぽい。
ためしにautorun.shを開いてみると・・・

$ cat autorun.sh
#!/bin/sh
buzzer -t 2
cp /mnt/sd/version.txt /mnt/mtd/
cp /mnt/sd/version3.txt /mnt/mtd/

sync
sleep 1
rm /mnt/sd/version.txt
rm /mnt/sd/version3.txt
rm /mnt/sd/autorun.sh
sync
sleep 1

buzzer -t 5
$

間違い無くUNIX系統であることは確か。

「initramfs.gz」も非常にLinuxっぽい名前であるものの、そのままでは開けない。

$ file initramfs.gz
initramfs.gz: data
$ gzip -d initramfs.gz

gzip: initramfs.gz: not in gzip format
$

中身を確認すると先頭の8bytesに何らかしらのヘッダが付加されており、それ以降は通常のgzip形式である模様。

取り除き方はいろいろありますが、とりあえず標準コマンドのみでやってみた。

 $ ls -l initramfs*
-rw-rw-rw- 1 root root 2517541  3月  6 15:36 initramfs.gz
-rw-rw-rw- 1 root root 2527932  3月  6 15:33 initramfs3.gz
$ expr 2517541 - 8
2517533
$ cat initramfs.gz |tail -c 2517533 > initramfs-tmp.gz
$ ls -l initramfs*
-rw-r--r-- 1 root root 2517533  4月  5 13:22 initramfs-tmp.gz
-rw-rw-rw- 1 root root 2517541  3月  6 15:36 initramfs.gz
-rw-rw-rw- 1 root root 2527932  3月  6 15:33 initramfs3.gz
$ file initramfs-tmp.gz
initramfs-tmp.gz: gzip compressed data, from Unix, last modified: Tue Mar  6 16:29:52 2012
$ gzip -d initramfs-tmp.gz
$ ls -l initramfs*
-rw-r--r-- 1 root root 4515328  4月  5 13:22 initramfs-tmp
-rw-rw-rw- 1 root root 2517541  3月  6 15:36 initramfs.gz
-rw-rw-rw- 1 root root 2527932  3月  6 15:33 initramfs3.gz
$ file initramfs-tmp
initramfs-tmp: ASCII cpio archive (SVR4 with no CRC)
$ 

cpioのファイルができたので、普通に展開。

$ mkdir initramfs
$ cd initramfs
$ cat ../initramfs-tmp|cpio -ivd
.
dev
dev/ttyS1
dev/mmcblk0p1
dev/tty1
dev/mmc2
dev/mmc1
dev/gpio_i2c
dev/mtdblock1
dev/random
dev/null
dev/nvram
dev/mmcblk0p2
dev/spidev0
dev/mmc
dev/pty
dev/pty/m0
dev/pty/m1
dev/mmcblk0
dev/mtdblock0
dev/ka_sdsw
dev/sda
dev/spidev1
dev/spi0
dev/ka-pwm1
dev/root
dev/sdb
dev/ram0
dev/console
dev/tty0
dev/mtd0
dev/zero
dev/urandom
dev/ttyS0
dev/loop
dev/loop/2
dev/loop/0
dev/loop/3
dev/loop/1
dev/sda1
dev/tty
dev/ram1
dev/mtd1
dev/fb0
dev/ttyS
dev/ram
dev/ramdisk
dev/spidev0.0
dev/spi0.0
dev/ka-pwm
dev/tty2
dev/ptmx
dev/pts
dev/pts/5
dev/pts/2
dev/pts/0
dev/pts/3
dev/pts/4
dev/pts/1
lost+found
init
tmp
home
home/config.trek
bin
bin/dcraw
bin/logpage
bin/iwevent
bin/iwpriv
bin/production_test
bin/input
bin/lsdir
bin/thumbNail
bin/umount
bin/wifi_setup
bin/output
bin/rev
bin/reformime
bin/ip
bin/mlanconfig
bin/thumbRaw
bin/receiver
bin/mv
bin/iptunnel
bin/dnsdomainname
bin/iostat
bin/ipcalc
bin/date
bin/http_upload
bin/connect_router
bin/powertop
bin/ln
bin/settings_and_review
bin/printenv
bin/cat
bin/hello_trek
bin/upload
bin/ash
bin/status
bin/macaddr
bin/ls
bin/get_config
bin/fsync
bin/mlanevent
bin/playNote
bin/hostname
bin/mount
bin/rmdir
bin/ionice
bin/upload_sd
bin/dmesg
bin/iplink
bin/motion_app
bin/cp
bin/motion_cgi
bin/busybox
bin/lzop
bin/ping
bin/mlan2040coex
bin/photo
bin/vi
bin/iwconfig
bin/startup
bin/set_config
bin/kill
bin/iprule
bin/photolist
bin/pipe_progress
bin/ipaddr
bin/get_uap_ssid
bin/makemime
bin/scriptreplay
bin/htmlcgi
bin/more
bin/iwlist
bin/sender
bin/download
bin/df
bin/thumb_video
bin/sleep
bin/buzzer
bin/pwd
bin/replace_file_content
bin/upload_to_sd
bin/mpstat
bin/echo
bin/localization
bin/base64
bin/iproute
bin/datetime
bin/video
bin/rename
bin/mknod
bin/chmod
bin/mkdir
bin/run-parts
bin/power_up_app
bin/preview
bin/rm
bin/ifrename
bin/folderOpt
bin/flu_app
bin/download_multi
bin/sync
bin/dd
bin/wpa_supplicant
bin/sh
bin/serverUpload
bin/usleep
bin/netstat
bin/touch
bin/pwm
bin/ps
bin/uaputl
bin/connect_uap_sender
var
var/tmp
var/log
var/var
var/lib
var/lib/misc
var/lib/misc/udhcpd.lease
var/lock
var/run
lib
lib/gpio_i2c.ko
lib/ka2000-sdio.ko
lib/firmware
lib/firmware/sd8787_uapsta.bin
lib/ka2000-sdhc.ko
lib/sd8xxx.ko
lib/mlan.ko
sys
mnt
mnt/sd
mnt/mtd
www
www/sd
www/welcome.html
www/mtd
www/script
www/script/login.js
www/script/expand-collapse.js
www/script/input.js
www/script/control.js
www/script/menu.js
www/download.jar
www/image
www/image/browse.jpg
www/image/photos-chin.jpg
www/image/other-chin.jpg
www/image/save-jp.jpg
www/image/help.jpg
www/image/photos-jp_ori.jpg
www/image/download-grey-jp.jpg
www/image/download-grey.jpg
www/image/photos.jpg
www/image/download-grey-chin.jpg
www/image/download-jp.jpg
www/image/other.jpg
www/image/select-all-albums.jpg
www/image/select-all-chin.jpg
www/image/save-chin.jpg
www/image/clear-all-albums-chin.jpg
www/image/videos-chin.jpg
www/image/brought-to-you-by-trek.jpg
www/image/photos_ori.jpg
www/image/save.jpg
www/image/flucard-color1.jpg
www/image/quick-setup-jp.jpg
www/image/clear-all-albums.jpg
www/image/status-jp.jpg
www/image/select-all-albums-chin.jpg
www/image/folder.jpg
www/image/logo.jpg
www/image/logo-chin.jpg
www/image/select-all-albums-jp.jpg
www/image/upload-chin.jpg
www/image/back-jp.jpg
www/image/upload-grey-chin.jpg
www/image/status.jpg
www/image/photos-jp.jpg
www/image/status-chin.jpg
www/image/flucard-color.jpg
www/image/videos.jpg
www/image/select-all.jpg
www/image/next-chin.jpg
www/image/clear-all-albums-jp.jpg
www/image/clear-all-jp.jpg
www/image/next-jp.jpg
www/image/back.jpg
www/image/clear-all.jpg
www/image/blank.jpg
www/image/quick-setup-chin.jpg
www/image/quick-setup.jpg
www/image/select-all-jp.jpg
www/image/upload-grey.jpg
www/image/next.jpg
www/image/download.jpg
www/image/back-chin.jpg
www/image/upload-jp.jpg
www/image/videos-jp.jpg
www/image/upload-grey-jp.jpg
www/image/upload.jpg
www/image/file.jpg
www/image/clear-all-chin.jpg
www/image/help-page.jpg
www/image/other-jp.jpg
www/css
www/css/css_main.css
www/index.html
www/page
www/page/upload_sd.cfg
www/page/OkPage-chin.html
www/page/upload.htm
www/page/BadPage.html
www/page/upload.cfg
www/page/login-jp.htm
www/page/OkPage.html
www/page/quick_setup.htm
www/page/login-chin.htm
www/page/blank.htm
www/page/OkPage-jp.html
www/page/BadPage-jp.html
www/page/upload.log
www/page/login.htm
www/page/BadPage-chin.html
www/page/top.htm
www/page/menu.htm
www/page/upload_sd.htm
www/cgi-bin
www/cgi-bin/logpage
www/cgi-bin/input
www/cgi-bin/lsdir
www/cgi-bin/thumbNail
www/cgi-bin/output
www/cgi-bin/thumbRaw
www/cgi-bin/upload
www/cgi-bin/status
www/cgi-bin/playNote
www/cgi-bin/upload_sd
www/cgi-bin/motion_cgi
www/cgi-bin/photo
www/cgi-bin/photolist
www/cgi-bin/htmlcgi
www/cgi-bin/download
www/cgi-bin/thumb_video
www/cgi-bin/upload_to_sd
www/cgi-bin/datetime
www/cgi-bin/video
www/cgi-bin/rename
www/cgi-bin/preview
www/cgi-bin/folderOpt
www/cgi-bin/download_multi
www/downloadChin.jar
www/downloadJp.jar
usr
usr/bin
usr/bin/sha256sum
usr/bin/cmp
usr/bin/dirname
usr/bin/md5sum
usr/bin/microcom
usr/bin/lzopcat
usr/bin/arping
usr/bin/w3
usr/bin/seq
usr/bin/rcS7
usr/bin/fgconsole
usr/bin/rcS4
usr/bin/tftpd
usr/bin/telnet
usr/bin/env
usr/bin/volname
usr/bin/mount_sd
usr/bin/du
usr/bin/wall
usr/bin/uap
usr/bin/beep
usr/bin/w5
usr/bin/smemcap
usr/bin/lsusb
usr/bin/timeout
usr/bin/w2
usr/bin/udpsvd
usr/bin/xzcat
usr/bin/which
usr/bin/pmap
usr/bin/lspci
usr/bin/hexdump
usr/bin/xz
usr/bin/id
usr/bin/ifplugd
usr/bin/rcS2
usr/bin/dumpleases
usr/bin/pscan
usr/bin/refresh_sd
usr/bin/printf
usr/bin/ftpget
usr/bin/nslookup
usr/bin/tcpsvd
usr/bin/unlzop
usr/bin/flock
usr/bin/wget
usr/bin/clear
usr/bin/rcS6
usr/bin/w4
usr/bin/rcS1
usr/bin/renice
usr/bin/check_sta.sh
usr/bin/uap_sender
usr/bin/rcS5
usr/bin/pkill
usr/bin/mtdf
usr/bin/w2_receiver
usr/bin/copy_control_images_to_nor.sh
usr/bin/sha512sum
usr/bin/w1
usr/bin/w3es
usr/bin/showkey
usr/bin/mtdm
usr/bin/.copy_control_images_to_nor.sh.swp
usr/bin/ftpput
usr/bin/tftp
usr/bin/nc
usr/bin/softlink
usr/bin/unxz
usr/bin/top
usr/bin/autorun.sh
usr/bin/rcS3
usr/bin/restore_all_control_images.sh
usr/bin/readahead
usr/bin/uptime
usr/bin/w0
usr/bin/test_wireless1.sh
usr/bin/test_wireless2.sh
usr/bin/mt
usr/sbin
usr/sbin/setfont
usr/sbin/nbd-client
usr/sbin/dnsd
usr/sbin/flash_lock
usr/sbin/ntpd
usr/sbin/udhcpd
usr/sbin/httpd
usr/sbin/flash_unlock
usr/sbin/inetd
usr/sbin/ftpd
usr/sbin/telnetd
usr/sbin/flashcp
usr/sbin/flash_eraseall
usr/sbin/fakeidentd
usr/sbin/popmaildir
usr/sbin/dhcprelay
usr/sbin/rdev
root
sbin
sbin/tunctl
sbin/arp
sbin/ifdown
sbin/bootchartd
sbin/fdisk
sbin/mdev
sbin/udhcpc
sbin/vconfig
sbin/init
sbin/blockdev
sbin/route
sbin/mkdosfs
sbin/halt
sbin/acpid
sbin/sysctl
sbin/zcip
sbin/ifconfig
sbin/poweroff
sbin/devmem
sbin/blkid
sbin/mkfs.ext2
sbin/insmod
sbin/setconsole
sbin/modinfo
sbin/modprobe
sbin/fsck
sbin/reboot
sbin/depmod
sbin/rmmod
sbin/mke2fs
sbin/ifup
sbin/ifenslave
sbin/mkfs.vfat
sbin/nameif
sbin/start-stop-daemon
sbin/lsmod
proc
etc
etc/uaputl_sender.conf
etc/udhcpd.conf
etc/inittab
etc/uaputl.conf
etc/dnsd.conf
etc/dhcp.script
etc/wpa.conf
etc/init.d
etc/init.d/rcS.e
etc/init.d/rcS
etc/init.d/rcS.p
etc/udhcpd_uap.conf
etc/fstab
etc/wep.conf
linuxrc
8819 blocks
$

まぁ、良くあるinitramfsの中身、という感じ。
そして、wpa_supplicantとかbusyboxとか、ある意味おなじみのものがずらずらと・・・

/etc/inittabを見ると、/etc/init.d/rcS を起動している。
rcSからではいろいろ処理をやっているが、流れとしては以下の様な感じ。
・/usr/sbin/rcS1(=telnetd)を呼び出している。
・/usr/sbin/rcS2(=httpd)を呼び出している。
・SDカード上(=Flucard上)のautorun.shを実行。
・WiFiの設定をする

ただし、2012/03時点でのfirmwareでは、/usr/sbin/rcS1内のteletd起動はコメントアウトされているので、標準ではtelnetdが起動していない。

さて・・・ここまでの調査結果で言えることは・・・
・アップデータ自体に細工をすることは、おそらく可能
・initramfsを変更することでシステムファイルを置き換えることができる
・initramfsの書き換えに失敗して起動しなくなった場合の復旧方法は不明
・autorun.shは起動時に実行される。
・autorun.shは意図的に削除しない限り残るので毎回実行される
・ソフトを追加したいのであればautorun.shを使って処理をさせるのが一番

といったところか。

無線LANの接続性問題が出てきたりしたら、以下のようなバイナリを出力させれば置き換えも可能そうなので、なんとか対処しようがあるかなぁと楽観視。

$ file busybox wpa_supplicant
busybox:        ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
wpa_supplicant: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
$

そんなわけで、とりあえず、発注してみました。
届くのが楽しみです。

Amazon Trek2000ストア
楽天 Trek2000ストア
送料無料! Wifi機能付きSDカード ...

送料無料! Wifi機能付きSDカード …
価格:4,700円(税込、送料込)

送料無料! Wifi機能付きSDカード Flucard16GB

送料無料! Wifi機能付きSDカード Flucard16GB
価格:9,890円(税込、送料込)

  1. こんにちわ!このページをfacebookで知り、昔組み込みLinuxで遊んだことを思い出して懐かしく、思わずflu-card買っちゃいました!

    すでにお気づきかもしれませんが、initramfs.gzなどのヘッダですが、いろんなバージョンを見ていて、その書式がわかりました(多分、、、)

    先頭4バイト:4B 41 47 5A ”KAGZ”固定
    後続4バイト:追加ヘッダ8バイトを削除した元ファイルのサイズ

    これが正しいとなると、autorun.shで差し替えを行っているファイルを元のファイルに差し込んでgzipをかけ、そのサイズと”KAGZ”を追加すると新しいシステムが完成することになりそうです。

    もう少し調べてみます。

    • ありゃ、チェックサムでも入ってるのかな、と思ってたんですが、サイズだけっぽいですか
      ちょっと予想外だったなぁ

      で、直接書き換えなんですが、うまく、起動してこなかった場合のリカバリ方策が
      思いつかなかったので、あまり調べてないんですわ

      • 私も最初はチェックサムかMD5かなと思ったのですが、似たサイズ、かつ4バイト目が今のところ”00″になっているのでピンときました。

        確かに!リカバリ策は難しいですね。PC linuxからroot file systemがmountできると元に戻せそうな気もしますが、ちょっと危険な匂いもしますね。

        KeyASICのHPによればJTAG ICEもつながるとなっているので、環境があればbootメカニズムを解明できるかもしれませんが、、、、

  2. 意味なし追加推定:KAGZは”Key ASIC gzip”ではないかと思っています。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>