TF201でARM DS-5

2011/11末にARMのDeveloper Studio 5のCommunity Editionという無料版が公開された。TF201ではoprofileが有効化されているので、DS-5のStreamlineプロファイリングが出来るのではと淡く期待して作業してみた。


結論から言うと、出来なかった。Bootloaderのunlockソフトウェアも公開された*1ことだし、今後に期待してメモだけ残しておく。


まず、Ubuntuの32bit環境を用意する。64bit版では「filter is not applicable」というエラーが出てインストールが出来ない。Virtual BoxにUbuntuを普通にインストールして、Android SDKとNDKを普通にインストールして、DS-5を普通にインストールするだけ。


DS-5をインストールすると、Eclipseをインストールしたディレクトリの下に、

 $ ls plugins/com.arm.ds.collateral_5.8.0.20111129_133554/arm/gator/
 README_Streamline.txt  annotate/  daemon-src/  driver-src/  hrtimer_module/

というファイルがダウンロードされている。詳細な説明はREADMEに書かれているので一読する。


driver-src以下のソースコードをビルドして、カーネルモジュールを作る必要がある。従って、TF201のカーネルソースコードが必要になる。


ソースコードASUSダウンロードサイト*2NVIDIAのgitからダウンロード出来る。NVIDIAのgitは

 $ git clone git://nv-tegra.nvidia.com/linux-2.6.git

今回はASUSのサイトからダウンロードしたカーネルソースコードを使ったが、そのままではビルド出来なかった。

 $ cd kernel-3b434ee
 $ export ARCH=arm
 $ export PATH=/opt/arm-cc/bin:$PATH
 $ export CROSS_COMPILE=arm-none-linux-gnueabi-
 $ make tegra_cardhu_android_defconfig
 $ make zImage -j16
 arch/arm/mach-tegra/tegra3_tsensor.c:24: fatal error:
 devices.h: No such file or directory

tegra_cardhu_android_defconfigが実機のconfig.gzと同等であることは、.configと保存してあるconfig.gzとのdiffで確認した。ヘッダが足りないらしいので、

$ find . -name "devices.h"
./arch/arm/mach-tegra/devices.h
./arch/arm/mach-mx3/devices.h
./arch/arm/mach-ks8695/include/mach/devices.h
./arch/arm/mach-mmp/include/mach/devices.h
./arch/arm/mach-mx25/devices.h
./arch/arm/mach-cns3xxx/devices.h
./arch/arm/mach-ux500/include/mach/devices.h
./arch/arm/mach-mx5/devices.h
./arch/arm/mach-pxa/devices.h
./arch/arm/mach-imx/devices.h
./arch/arm/mach-msm/devices.h
./arch/arm/mach-mxc91231/devices.h
./include/config/misc/devices.h
./include/config/usb/announce/new/devices.h

mach-tegraにそれらしいのがあるので、arm/includeにコピーしておく。

 $ cp arch/arm/mach-tegra/devices.h arch/arm/include/
 $ make zImage -j16

今度は正常にビルド出来るので、READMEにあるように、

 $ cd gator-driver
 $ make -C /path/to/kernel-3b434ee M=`pwd` modules

これでgator.koが出来る。なんとかしてTF201に持って行き、

 $ su
 # insmod ./gator.ko
 insmod: init_module './gator.ko' failed (No such file or directory)

 # busybox insmod ./gator.ko
 insmod: can't insert './gator.ko': unknown symbol in module or invalid parameter

というわけでインストール出来ない。実は試す前から多分ダメだろうなと察しがついていた。READMEに詳細なカーネルコンフィギュレーションが書かれている。

Required Kernel Changes (depending on the kernel version, the location of these 
configuration settings within menuconfig may be different)
 - General Setup
  - [*] Profiling Support
 - Kernel hacking
  - [*] Tracers
    - [*] Trace process context switches and events
 - Kernel Features
  - [*] High Resolution Timer Support
  - [*] Use local timer interrupts (only required for SMP)

Kernel hackingの「Trace process context switches and events」がtegra_cardhu_android_defconfigではオフになっている。これをオンにしないと、実際にtraceデータを吐くモジュールがリンクされない。オンにして、DS-5 Readyなdefconfigとして保存して終了。

 $ make menuconfig
 $ make savedefconfig
 $ mv defconfig arch/arm/configs/tegra_cardhu_android_ds-5_defconfig


というわけで、無駄骨の複雑骨折でした。

*1:ただしICS専用なので国内版はまだunlock出来ない

*2:サイトが落てるので後日追記