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のダウンロードサイト*2かNVIDIAの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
というわけで、無駄骨の複雑骨折でした。