スタッフのブログです。個以上あるコメントは受け付けない設定になってます。)2009年08月24日AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その1)前回はgoldfishのCPUをarm1136に置き換えました。今度はarmv7アーキテクチャのcortex-A8への置き換えに成功したのでその方法を紹介します。armv7だとNEONのSIMD命令とかThumb2とか色々と面白そうです。2009年11月のEclairのソースリリースでだいぶ状況が変わっています。こちらも参照してください。ポイント先にポイントになるところを説明します。gccは4.4.0を使用する。4.2.1ではまだarmv7アーキテクチャに対応していないので新しいものを使います。カーネルは2.6.29をベースにする。2.6.27ではarmv7アーキテクチャでの動作実績はなさそうです。CPU_V7を有効にしてビルドすると単純なスペルミスでコンパイルエラーになります。TLSレジスタを使わないようにする。実はこれがわからずにハマりました。理由はよくわかりませんが、OMAP3530用のソースではTLSレジスタを使わないようになっていたので、それと同じにしてみたら無事に起動するようになりました。kernel以外は変更の必要がない。ユーザーランドのイメージはSDKのものをそのまま使います。以下に順を追って手順を説明します。カーネルのソースの入手gitでカーネルソースを持ってきて、android-goldfish-2.6.29のブランチに切り替えます。origin/android-goldfish-2.6.29カーネルソースの修正まずは環境変数ARCHとCROSS_COMPILEの設定をMakefileの中に書き込んでしまいます。コンパイラは4.4.0を使用します。$(ARCH)次にGoldfishのCPUの指定をARM926TからV7に変更します。このあたりのファイル構成は2.6.27から変更されています。以下のように2箇所のKconfigを書き換えます。最後にHAS_TLS_REGの設定が有効にならないようにします。エミュレータの起動まずは普通にSDKのemulatorが起動することを確認します。AVDは適当に作成してください。my_avd次に、今ビルドしたカーネルに差し替えて起動します。以降のオプションはすべてそのままqemuに送られるので、-qemu以降のオプションは最後に追加してください。neonも有効になっているようです。Windowsに持っていってWindows上のemulatorに食わせても多分同じように動くと思います。長くなってしまったので今回はここまでにします。次回はNDKを使ってNEONのSIMD命令をつかった共有ライブラリを作り、それをJNI経由で呼び出して動作することを確認したことを紹介します。追記)続きを書きました。13:42おお!でも肝心のqemuの方はFPU命令で8バイトアクセスでバスエラーする件はまだのようです。Thumb2命令の実行も怪しい感じだし。goldfish_armv7を動かす人が増えれば、すぐにそれらも直ることでしょう。最新コメント「最新トラックバック」は提供を終了しました。(2)タグクラウドABCadbaidlAndroidARMarmv7asmbinderbionicBootbuildbuildrootbuiltinbusyboxcccacheCELFcelfjpClangcortex-a8Cortex-A9cpuinfodalvikvmDebiandebuggerdDMAelcembeddedemulatorEventexeGCCFlashfpufroyogccGDBGingerbreadgoldfishIceCreamSandwichinitinitrdinterpreterJAVAjavacjavapjitK&Rkernelkeykzm-a9-dualKZM-A9-GTkzm-ca9-01LinarolinuxLLVMloglogcatltsimingwMIPSmultiarchndkneonnetinstallnfsnon-stopobjdumppartnerPARTNER-JetportingpowermanagementprintfpropertyPyMitepythonqemuQTQTextCodecrootstockrubysdServiceSHsimdsmpTCGtuninguartubootUbuntuuclibcUNIXUSBv8vlinkwakelockwirelessx86zygote計測QRコード京都マイクロコンピュータ。