Odroid-U3板子到手

此前已经有Odroid-XU3(2块)、Odroid-C1到手了,现在是最后一块Odroid-U3的板子。这个板子使用Exynos 4412 SoC作为主控。Exynos 4412是samsung在2012年就推出的一颗基于Cortex-A9x4和Mali-400MP4的SoC芯片。虽然比较老,但也是一颗非常经典的4核A9处理器,而且还是相对较为完善的软件系统。

利用DS-5工具中ARM提供的gator驱动获取PMU数据,我录了一段视频,在这里:

(视频暂时没找到了)

odroid-u3-500x264

我们主要还是希望用到A9中的PMU单元,做性能的定量分析与实测参数提取工作。所以直接开始吧(其官网在这里):

1. 准备带gato的新Kernel

Odroid官方在管理Linux Kernel上还是做得不错的,所有其支持的板子都在同一个git下,完成下载后,只需要简单的git checkout所需要的branch就可以了。

1.1 按官方defconfig编译运行一次

先注意一下交叉编译器的使用,应该用arm-eabi-gcc,所以最好先看看版本对不对:

yangzhang@alin3:~/project/odroid/linux$ arm-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-eabi-gcc
COLLECT_LTO_WRAPPER=/home/project/project/user/yangzhang/src/arm-eabi-4.6/bin/../libexec/gcc/arm-eabi/4.6.x-google/lto-wrapper
Target: arm-eabi
Configured with: /tmp/android-15472/src/build/../gcc/gcc-4.6/configure --prefix=/usr/local --target=arm-eabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/android-15472/obj/temp-install --with-mpfr=/tmp/android-15472/obj/temp-install --with-mpc=/tmp/android-15472/obj/temp-install --without-ppl --without-cloog --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --with-abi=aapcs --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 --with-gdb-version=7.3.x --with-arch=armv5te --with-sysroot=/tmp/android-15472/install/sysroot --with-prefix=/tmp/android-15472/install --with-gold-version=2.21 --enable-gold --disable-gold --disable-multilib --program-transform-name='s&^&arm-eabi-&'
Thread model: single
gcc version 4.6.x-google 20120106 (prerelease) (GCC)
此前我们在上手Odroid-XU3的时候已经git clone了整个Linux的kernel源,所以:
git checkout odroid-3.0.y-android
make ARCH=arm CROSS_COMPILE=arm-eabi- odroidu_android_442_defconfig
make ARCH=arm CROSS_COMPILE=arm-eabi- -j4
make ARCH=arm CROSS_COMPILE=arm-eabi- modules
然后把生成的zImage从服务器上下载下来:
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/arch/arm/boot/zImage
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/drivers/gator/gator.ko
 最后,将zImage烧入系统的boot分区,如下:
adb remount
adb shell
mkdir /data/gator/
exit
adb push zImage /system/lib/modules
adb push gator.ko /data/ga/
adb shell
cd /system/lib/modules
busybox dd conv=notrunc seek=2455 bs=512 if=zImage of=/dev/block/mmcblk0
sync
exit
adb reboot
adb shell
insmod /data/ga/gator.ko

如果可以正常启动,就可以进入下一步,也就是定制内核了。

1.2 修改defconfig,加入硬件PMU驱动

make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
General setup->Kernel performance counters
             ->OProfile system profiling
由于gator有Kernel版本和DS-5版本双重依赖的问题,需要上传DS-5中对应的driver到linux kernel,并编译这部分,所以需要:
1)保存原生git下来的gator驱动源码(该源码的版本与kernel适配,但与最新版本的DS-5不适配)
ssh yangzhang@$alin3
cd /home/yangzhang/project/odroid/linux/drivers/
mv gator gator-back
2)将DS-5工具中自带的gator驱动源码上传到Kernel代码目录中:
cd /PATH-TO-DS-5-install-dir/arm/gator/driver-src
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/drivers/
put gator-driver.tar.gz
ssh yangzhang@$alin3
cd /home/yangzhang/project/odroid/linux/drivers/
tar xvf gator-driver.tar.gz
cp media/video/samsung/mali_r4p0/linux/mali_linux_trace.h ../include/
cd gator/
make ARCH=arm CROSS_COMPILE=arm-eabi- -C ../../ M=`pwd` modules
上述操作后,就能生成即满足kernel版本适配,又满足DS-5版本适配的gator.ko文件了,然后下载下来:
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/drivers/gator/gator.ko

然后把该ko文件以及配套使用的daemon程序都adb push到板子上去,如下:

adb push gator.ko /data/gator/
adb push /PATH-TO-DS-5-install-dir/arm/gator/gatord /data/gator/
最后,就可以准备连接host端的DS-5工具了,如下:
adb shell
busybox ifconfig
读取到板子当前的IP地址...
cd /data/gator/
chmod 1777 gatord
./gatord &
在host端,打开eclips(DS-5工具套件),切换到Streamline界面,填写板子IP地址后,并点击下图中“方块”图标(Couter configuration):

7af46061-5f4e-4909-9400-d80f03bfaa18

这样应该就能连接到板子的gatord这个daemon程序了,然后就可以配置你需要的PMU counter。注意:由于硬件限制,每次对CPU核的counter,只能同时跟踪7个。如果是对L2 Cache的跟踪,则只能同时跟踪2个;如果是对Mali GPU中Fragment Shader跟踪,则只能同时跟踪8个counter,对Mali GPU中Vertex Shader跟踪,则只能同时跟踪2个counter。

由于存在上述限制,我们需要反复运行被测试程序,然后把所有counter的值读出来,如下图所示:
68d9295b-81c2-4ca6-9aed-3295e5a99522

在完成了上述过程后,就可以进入Matlab的数据分析部分,在这里

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s