Oprofile 移植到Android

來源:互聯網
上載者:User
Oprofile 移植到Android
oprofileandroid模擬器 Oprofile 移植

工具的編譯參考
http://blog.csdn.net/louieuser/article/details/6152175

工具使用:
1.建立一個AVD,啟動模擬器時,用我們編譯好的kernel替換SDK內建的kernel
C:\Users\maricoliu>emulator @android2.3 -partition-size 300 -kernel ~\kernel-qemu

注:由於要向系統中push我們的程式,請分配足夠的大小,否則會出現no space left on device錯誤,用-partition-size指定大小

2.安裝busybox,Oprofile
將我們編譯好的busybox和Oprofile裝入模擬器
進入adb shell中,建立兩個檔案夾
#mkdir /data/busybox
#mkdir /data/oprofile
在控制台執行如下命令:
C:\Users\maricoliu>adb push ~\busybox /data/busybox/
Oprofile工具只要將以op開頭的檔案裝入模擬器就可以:
C:\Users\maricoliu>adb push ~\oprofile\opcontrol /data/oprofile/
C:\Users\maricoliu>adb push ~\oprofile\opannotate /data/oprofile/
……(其餘不再列出)
回到shell中,安裝busybox,增加Oprofile檔案的執行許可權
#cd /data/busybox
#chmod 777 busybox
#./busybox –install busybox
#cd /data/oprofile
#chmod 777 op*

3.運行Oprofile
#export PATH=$PATH:/data/busybox
#export PATH=$PATH:/data/oprofile
# mount -o remount rw /
# mount -o rw,remount -t yaffs2 /dev/mtdblock3 /system
#ln -s /proc/mounts /etc/mtab  (建立一個軟串連,後面有說明)
# opcontrol --init     //初始化,只需運行一次
# opcontrol --setup --callgraph=2 --session-dir=/result/ --no-vmlinux
# opcontrol --start
opcontrol --start
Using 2.6+ OProfile kernel interface.
Using log file /result/samples/oprofiled.log
Daemon started.
Profiler running.
# opcontrol --status
opcontrol --status
Daemon running: pid 773
Separate options: none
vmlinux file: none
Image filter: none
Call-graph depth: 2

運行你的程式

# opcontrol --dump   //收集採樣資料
# opcontrol --stop //停止profiler
Stopping profiling.
#opreport --session-dir=/result/       //查看報告

遇到的問題:
1.出現錯誤 :

test: not found
id: not found
test: not found
grep: not found
test: not found
grep: not found
test: not found
…………

這是由於 Android 提供的命令過於精簡,因此需要移植 busybox ,來運行 opcontrol 。按照上面的步驟安裝busybox後,任然出現此錯誤,google後得知,要修改 opcontrol 檔案如下:

BINDIR =”/data/busybox”
PATH 中加入 /data/busybox
查看opcontrol源碼後發下未加入/data/busybox,現以加入
2.出現錯誤
./opcontrol --init
grep: /etc/mtab: No such file or directory
grep: /etc/mtab: No such file or directory
Kernel support not available, missing opcontrol --init as root

# touch /etc/mtab
# ./opcontrol  --init
Kernel support not available, missing opcontrol --init as root ?

通過對 opcontrol 的分析發現它是通過對執行" grep oprofile /proc/modules >/dev/null " 的傳回值為判斷條件還進行操作的,開始由於 mtab 檔案裡沒有 oprofile 的相關資訊,所以要執行 "mount -t oprofilefs nodev /dev/oprofile >/dev/null" 而linux 標準檔案系統在執行了此命令之後將會與之相關的 mount 資訊寫入 /etc/mtab 中,而執行了umount 之後相關資訊將從/etc/mtab檔案中刪除,而通過相關的操作之後發busybox系統中的
mtab 檔案並無任何改變,通過google 之後知道原來新的busybox 使用 /proc/mounts 代替了 /etc/mtab,故在/etc 下建一個指 /proc/mounts 名為 mtab 的連結就繞過這個問題    

# ln –s /proc/mounts /etc/mtab
可能會遇到link failed file exists錯誤,請確保/etc/目錄下面沒有mtab檔案,有的話刪除  工具在本人csdn上傳資源中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.