PQI Air Pen、OpenWrt化(未開封編)
2016年12月23日(金) 00:58 JST
閲覧数 11,098
ファームウェアを書き換えた場合、サポートの対象外となります。また、ファームウェアを書き換えた状態での電波出力は電波法違反となります。
ファームウェア書換えは、自己責任とご認識下さい。
2016/12/23 1:00時点で、ntt-xにて再度税込980円なった様なので、みなさん3枚買ってみてはどうでしょうか?
PQI Air Pen 6W41-0000R2 ホワイト
PQI Air Pen 6W41-0000R1 ブラック
で、未開封でのOpenWrt化ですが、100%書換えを保障するものではないので、失敗し文鎮化したとしても、自己責任とご認識下さい。
書換えは、1回では完了できず、1段階踏み台を用意する形になります。
また、純正ファーム状態で、uImage、rootfs側が使われている前提で手順を紹介します。
uImage2、rootfs2が使用されている場合は、逆を行う必要があります。
# cat /proc/mtd dev: size erasesize name mtd0: 00040000 00010000 "u-boot" mtd1: 00010000 00010000 "u-boot-env" mtd2: 00010000 00010000 "ART" mtd3: 00010000 00010000 "NVRAM" mtd4: 00140000 00010000 "uImage" mtd5: 00280000 00010000 "rootfs" mtd6: 00140000 00010000 "uImage2" mtd7: 00280000 00010000 "rootfs2" mtd8: 00010000 00010000 "CONF"
以下は、OpenWrt trunk r50015のパッチとバイナリです。
PQIAirPen_trunk_r50015.patch
openwrt-ar71xx-generic-pqi-air-pen-factory-kernel.bin
openwrt-ar71xx-generic-pqi-air-pen-factory-rootfs.bin
openwrt-ar71xx-generic-pqi-air-pen-initramfs-kernel.bin
openwrt-ar71xx-generic-pqi-air-pen-squashfs-sysupgrade.bin
踏み台用として使用する、~factory-kernel.bin、~factory-rootfs.binは、以下の様に、~initramfs-kernel.binから切り出します。
# dd if=openwrt-ar71xx-generic-pqi-air-pen-initramfs-kernel.bin of=openwrt-ar71xx-generic-pqi-air-pen-factory-kernel.bin bs=1024 count=1280 # dd if=openwrt-ar71xx-generic-pqi-air-pen-initramfs-kernel.bin of=openwrt-ar71xx-generic-pqi-air-pen-factory-rootfs.bin bs=1024 skip=1280この分割したファイルをマウントされていない領域の、uImage2、rootfs2に書き込む事で、ubootから起動してしまおうという訳です。
注意する点としては、rootfs2を超えてCONF領域を潰してしまわない様にする事。
CONF領域まで使用するイメージをCONF領域を潰して書き込んだ場合、起動できなくなります。
書き込むファームウェアデータが準備できたら、実機での書換えに進みます。
telnetでアクセスしてください。(管理画面でパスワードを設定済みであえばtelnetでアクセスできます)
ログインは、root/pqiapです。
書き込むファイルは、uSDにでも入れて刺しておけばいいでしょう。
書き込み作業に入る際、uImage、rootfsが使用されている事を確認した上で書換えを行う必要があります。
マウントした状態で書換えを行うと壊れます。
かならず、rootfs側がマウントされている事を確認してください。
# df Filesystem 1k-blocks Used Available Use% Mounted on /dev/mtdblock5 2384 2384 0 100% / /dev/sda1 1928992 22944 1906048 1% /tmp/www/ftp/sda1
イメージの書き込みは、ddでべたっと書き込みます。
~ # flash_erase /dev/kernel2 cnt 0x14 Erase Total 20 Units Performing Flash Erase of length 65536 at offset 0x130000 done ~ # ~ # dd if=/tmp/www/ftp/sda1/openwrt-ar71xx-generic-pqi-air-pen-factory-kernel.bin of=/dev/mtdblock6 2560+0 records in 2560+0 records out ~ # ~ # flash_erase /dev/fs2 cnt 0x28 Erase Total 40 Units Performing Flash Erase of length 65536 at offset 0x270000 done ~ # ~ # dd if=/tmp/www/ftp/sda1/openwrt-ar71xx-generic-pqi-air-pen-factory-rootfs.bin of=/dev/mtdblock7 4042+1 records in 4042+1 records out再起動前に、CONF領域の1バイト目を書き換えます。
これにより、uImage2側がブートされる形になります。
~ # echo -ne "\x01" | dd of=/dev/mtdblock8 conv=notrunc bs=1 count=1 seek=0 1+0 records in 1+0 records out ~ # ~ # reboot再起動後、OpenWrtがramfsでuImage2側(0x9f7f0000)の領域から起動してきます。
次に、本来あるべき位置に再度OpenWrtイメージを書き込みを行います。
書換える際に、sysupgradeをそのまま実行すると、壊れてしまったuImage2を起動させる形となる可能性があるので、注意してください。(運よく領域が壊されず残っていれば、同じ状態が起動してきますが。。。)
sysupgrade前に実行しなくてはいけないのは、次回ブートをuImage側の領域から起動する様に戻す事です。
CONF領域の1バイト目を元の0x00に書き戻す必要があります。
root@OpenWrt:~# echo -ne "\x00" | dd of=/dev/mtdblock8 conv=notrunc bs=1 count=1 seek=0 1+0 records in 1+0 records out最後にsysupgradeを実行し、OpenWrt化が完了します。
root@OpenWrt:~# sysupgrade -n /tmp/openwrt-ar71xx-generic-pqi-air-pen-squashfs-sysupgrade.bin killall: watchdog: no process killed Sending TERM to remaining processes ... dnsmasq ubusd askfirst logd rpcd netifd uhttpd ntpd Sending KILL to remaining processes ... askfirst ntpd Performing system upgrade... Unlocking firmware ... Writing fromto firmware ... Upgrade completed Rebooting system...
ここで紹介した手順は、手持ち環境で確認した手順であり、ファームウェアの状態等により挙動が異なる可能性があります。
書換えは自己責任となります。
また、電波法は守ってハックを愉しむ事をお奨めします。
ファームウェア書換え後の電波出力等による電波法違反についても自己責任となります。