FT701Wのファームウェアを覗いてみたらu-boot に fastboot という文字列があったので、どうすれば fastboot のモードに入れるのか色々試してみました。
ですが、そもそもFT701Wにはハードウェアキーが電源キーしかないので、長押しで電源入れるくらいしかバリエーションがありません。
メニューキーやホームキーはタッチセンサなので、静電センサの性格上、押したまま電源入れるというのも考えにくいです。
で、一通り試してみたものの、やっぱりというか、FastBoot モードには入れませんでした。
そこで、u-bootを解析してみることにしました。
文字列のアドレスから色々とアタリをつけながら解析していくと、以下の関数が真を返せばFastbootモードに入れるらしいことがわかりました。
80e8973c: e59f3124 ldr r3, [pc, #292] ; 80e89868 <_binary_bootloader_start+0x9868>
80e89740: e92d4017 push {r0, r1, r2, r4, lr}
80e89744: e5934038 ldr r4, [r3, #56] ; 0x38
80e89748: e3540000 cmp r4, #0
80e8974c: 0a00000d beq 80e89788 <_binary_bootloader_start+0x9788>
(省略)
80e8985c: eb002b11 bl 80e944a8 <_binary_bootloader_start+0x144a8>
80e89860: e1a00004 mov r0, r4
80e89864: e8bd801e pop {r1, r2, r3, r4, pc}
アドレスを見てもらうとわかりますが、そこそこ長い関数になります。
ですが、SDドライバで培った逆コンパイル手法で力業で解析すると、こんな感じの関数になりました。
int func_80e8973c()
{
if (readl(0x4a31c038) != 0) {
if (readl(0x4a31c044) != 0x800)
retrun 1;
printf(" Green key press == Recovery mode \n");
while ((tmp = readl(0x4a31c018) != 0))
writel(tmp, 0x4a31c018);
goto l97bc;
}
ret = func_80e88ea4();
*(u8 *)(0x80eaf42c + 0x38) = ret;
tmp = (ret - 2) & 0xff;
if (tmp > 1)
return 0;
if (ret == 3) {
printf("System go into recovery mode\n");
printf("\n Case: \%reboot recovery\n");
l97bc:
printf("\n Starting recovery img...\n");
//長いので省略
printf("fastboot: Error: Invalid recovery img\n") ;
return 0;
}
printf("\n");
printf("System go into normal mode\n");
printf("\n");
return 0;
}
真を返すのは、readl(0x4a31c038) != 0 と readl(0x4a31c044) != 0x800 が成り立った時のみのようです。
アドレスが物理アドレスと仮定すると、0x4a31c000 〜 0x4a31cfff は "keyboard" らしいです。(OMAP4430 のマニュアルより)
さすがにキーの配線がどこに接続されているは回路図がないと追えません。
そもそもデバッグボードにしかないキーかもしれないですし。
ひとまず、Linux で上記アドレスを使用しているドライバがあるか調べてみます。
# cat /proc/iomem
40100000-401f13ff : omap-aess-audio
(省略)
4a314000-4a31407f : omap_wdt
4a314000-4a31407f : omap_wdt
4a318000-4a31807f : omap_timer.1
4a318000-4a31807f : omap_timer
4c000000-4c0000ff : omap_emif.0
(省略)
使ってるドライバは無いようです。
つまり、少なくとも起動中に使えているタッチスイッチ等は "keyboard" のデバイスではないと言うことです。
ということは、キーの組み合わせなどの操作で fastboot mode や recovery mode には入れないということになります。デバッグボードか何かにあるキーなのでしょう。残念。