2從手機中獲得內核配置文件和Android init.rc啟動腳本 現在,可以開始正式工作了。
編譯Linux內核前,通過USB電纜連接Android設備與PC,然后在終端窗口內獲得如下的內核配置文件:
$ cd /path/to/android-sdk/tools
$ ./adb pull /proc/config.gz
$ gunzip ./config.gz
$ cp config /path/to/kernel/.config
從手機的Android根文件夾中獲得init.rc啟動腳本:
$ cd /path/to/android-sdk/tools
$ ./adb pull /init.rc
3 編譯Linux內核和gator模塊
下一步,將Linux內核源代碼包解壓至PC的工作文件夾。將目錄更改為剛剛解壓的內核文件夾,然后輸入此命令進入內核配置菜單。
$ make ARCH=arm menuconfig
使用箭頭鍵到達目標子菜單,然后按下“Enter”。以下所列出的每個子菜單內包含了所需要的動作說明。
保存並退出配置菜單后,必須重新編譯內核和相關模塊,如下所示:
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage -j4
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules -j4
要在Android目標手機使用Streamline,還必須構建gator內核模塊gator.ko。gator內核模塊源代碼位於DS-5安裝文件夾:
installdir/arm/gator/driver-src/gator-driver.tar.gz
在安裝DS-5 CE Eclipse時,可通過Help(幫助)->ARM Extras…(ARM附加選項)菜單來確定源文件的位置。將源代碼包轉移至工作文件夾,並進行解壓。輸入下列命令來編譯gator模塊:
$ make -C <path/to/kernel/source> M=`pwd` ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi- modules
要在Android系統上使用Streamline,還需運行gator守護程序。預先編譯好的gatord二進制程序位於DS-5安裝文件夾:
installdir/arm/gator/android/gatord
在DS-5 CE中,通過再次選擇Help(幫助)->ARM Extras…(ARM附加選項)菜單來確定源文件的位置。要在Android文件系統運行該程序,將gatord復制到Android手機,並放置在相同路徑(例如:/system/xbin 或/system/bin)下作為gator驅動程序gatord.ko即可。
(可選)要Android手機啟動時啟用gator服務,則必須修改init.rc腳本文件,該文件可從Android設備中的根目錄獲得。並在該文件末尾添加下列行
service ds5_gatord /system/xbin/gatordexec /system/xbin/gatord &oneshot
如果不希望在啟動時運行gatord的守護程序,也可以在Android設備啟動后再運行gatord。例如,可以在啟動后使用adb shell命令來運行/system/xbin/gatord&。
4創建Android update.zip程序包來刷機
update.zip放置於SD卡根文件夾上的壓縮文件,在手機啟動時由Android恢復系統加載。該文件通常具有供應商的數字簽名,在緊急情況或系統升級時使用該文件可用來恢復系統。Android手機處於解鎖狀態時,則可以使用自定義的壓縮包來升級系統。現在,我向您展示如何創建update.zip程序包來更新Linux內核和init.rc腳本。
#!/sbin/sh
# repleace init.rc in ramdisk
mkdir /tmp/newramdisk
cd /tmp/newramdisk
busybox gunzip -c /tmp/boot.img-ramdisk.gz | busybox cpio -i
busybox cp /tmp/init.rc /tmp/newramdisk/
chmod 750 /tmp/newramdisk/init.rc
busybox find . | busybox cpio -o -H newc | busybox gzip > /tmp/newramdisk.gz
cd /tmp
rm -r /tmp/newramdisk
# generate createnewboot.sh
echo \#!/sbin/sh > /tmp/createnewboot.sh
echo /tmp/mkbootimg --kernel /tmp/zImage --ramdisk /tmp/newramdisk.gz --cmdline \"$(cat /tmp/boot.img-cmdline)\" --base $(cat /tmp/boot.img-base) --output /tmp/newboot.img >> /tmp/createnewboot.sh
chmod 777 /tmp/createnewboot.sh
/tmp/createnewboot.sh
return $?
ui_print("Extracting system files...");
package_extract_dir("system", "/system");
set_perm(0, 0, 0755, "/system/xbin/gatord");
unmount("/system");
ui_print("Building new boot.img...");
run_program("/tmp/dd", "if=/dev/block/mmcblk0p20", "of=/tmp/boot.img");;
run_program("/tmp/unpackbootimg", "/tmp/boot.img", "/tmp/");
run_program("/tmp/mkbootimg.sh");
注意!在繼續操作前,請為手機充滿電!!!
關閉手機電源,然后以HBOOT模式開啟。(同時按下電源按鈕和音量調低按鈕)
進入Recovery(恢復)菜單。系統會提示您,並自動進行更新。
在重新啟動后,Streamline准備就緒,可進行性能分析。
5使用Streamline對Android手機進行性能分析
Streamline支持通過以太網與目標手機的連接。使用Android Debug Bridge (ADB)實用程序,可通過USB連接將TCP端口從目標手機網絡轉發到PC localhost本機網絡。ADB也可配置用於以太網或Wi-Fi環境。有關Android SDK以及ADB設置的詳細信息,請參見Android網站。一旦設置好了ADB,就使用下列命令將Streamline使用的網絡端口轉發到localhost網絡上。
adb forward tcp:8080 tcp:8080
現在運行PC上的DS-5程序,並打開Streamline數據視圖窗口。如果在Window(窗口)->Show View(顯示視圖)菜單處未顯示,則選擇Window(窗口)->Show View(顯示視圖)->Other(其他),在對話框中找到“ARM Streamline”,然后打開ARM Streamline Data(數據采集對話框)。在Eclipse或DS-5的ARM Streamline數據視圖的Capture Options (采集選項)對話框中輸入設備的以太網地址。如果通過USB使用Android Debug Bridge (ADB)來轉發端口,則在地址字段中輸入localhost,如圖2所示。
圖2 ARM Streamline Data數據采集對話框
最后,按照ARM網站上的 ARM DS-5 Using ARM Streamline使用說明,使用Streamline對Android手機開始進行性能分析。圖3是使用Streamline對Android手機進行性能分析的截圖。
圖3 Streamline性能分析窗口
6 總結
Streamline是一款功能強大、經濟高效的解決方案,用於對ARM Linux和Android平台進行系統級性能分析。希望本文能助您一臂之力,通過Streamline加快您的Android開發工作。一旦開始使用,您很快會喜歡上這款工具。如需進一步了解使用Streamline的方法,請訪問 ARM Streamline website 和 ARM DS-5 info center
編譯Linux內核前,通過USB電纜連接Android設備與PC,然后在終端窗口內獲得如下的內核配置文件:
$ cd /path/to/android-sdk/tools
$ ./adb pull /proc/config.gz
$ gunzip ./config.gz
$ cp config /path/to/kernel/.config
從手機的Android根文件夾中獲得init.rc啟動腳本:
$ cd /path/to/android-sdk/tools
$ ./adb pull /init.rc
3 編譯Linux內核和gator模塊
下一步,將Linux內核源代碼包解壓至PC的工作文件夾。將目錄更改為剛剛解壓的內核文件夾,然后輸入此命令進入內核配置菜單。
$ make ARCH=arm menuconfig
使用箭頭鍵到達目標子菜單,然后按下“Enter”。以下所列出的每個子菜單內包含了所需要的動作說明。
- General Setup(常規設置),確保啟用了Profiling Support (分析支持)選項。
- Kernel Hacking(內核開發),在子菜單中,導航至Tracers子菜單,然后按下“Enter”。確保啟用Trace進程上下文開關選項。
- Kernel Features(內核功能),確保啟用High Resolution Timer Support (高分辨率定時器支持)。如果正在使用對稱多處理器(SMP)設備,則啟用Use local timer interrupts (使用本地定時器中斷)。
保存並退出配置菜單后,必須重新編譯內核和相關模塊,如下所示:
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage -j4
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules -j4
要在Android目標手機使用Streamline,還必須構建gator內核模塊gator.ko。gator內核模塊源代碼位於DS-5安裝文件夾:
installdir/arm/gator/driver-src/gator-driver.tar.gz
在安裝DS-5 CE Eclipse時,可通過Help(幫助)->ARM Extras…(ARM附加選項)菜單來確定源文件的位置。將源代碼包轉移至工作文件夾,並進行解壓。輸入下列命令來編譯gator模塊:
$ make -C <path/to/kernel/source> M=`pwd` ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi- modules
要在Android系統上使用Streamline,還需運行gator守護程序。預先編譯好的gatord二進制程序位於DS-5安裝文件夾:
installdir/arm/gator/android/gatord
在DS-5 CE中,通過再次選擇Help(幫助)->ARM Extras…(ARM附加選項)菜單來確定源文件的位置。要在Android文件系統運行該程序,將gatord復制到Android手機,並放置在相同路徑(例如:/system/xbin 或/system/bin)下作為gator驅動程序gatord.ko即可。
(可選)要Android手機啟動時啟用gator服務,則必須修改init.rc腳本文件,該文件可從Android設備中的根目錄獲得。並在該文件末尾添加下列行
service ds5_gatord /system/xbin/gatordexec /system/xbin/gatord &oneshot
如果不希望在啟動時運行gatord的守護程序,也可以在Android設備啟動后再運行gatord。例如,可以在啟動后使用adb shell命令來運行/system/xbin/gatord&。
4創建Android update.zip程序包來刷機
update.zip放置於SD卡根文件夾上的壓縮文件,在手機啟動時由Android恢復系統加載。該文件通常具有供應商的數字簽名,在緊急情況或系統升級時使用該文件可用來恢復系統。Android手機處於解鎖狀態時,則可以使用自定義的壓縮包來升級系統。現在,我向您展示如何創建update.zip程序包來更新Linux內核和init.rc腳本。
- 為加快工作速度,先下載一個內核更新包作為模板。對於HTC Sensation 4G手機,可通過Google來查找某些kernel update packages(內核更新包)。
- 將其解壓至工作文件夾<workdir>
- 用重新編譯的內核文件zImage來替換<workdir>/kernel文件夾中的zImage文件。
- 將init.rc復制到<workdir>/kernel 文件夾
- 在<workdir>/kernel文件夾中編輯或創建mkbooting.sh腳本來更新啟動鏡像
#!/sbin/sh
# repleace init.rc in ramdisk
mkdir /tmp/newramdisk
cd /tmp/newramdisk
busybox gunzip -c /tmp/boot.img-ramdisk.gz | busybox cpio -i
busybox cp /tmp/init.rc /tmp/newramdisk/
chmod 750 /tmp/newramdisk/init.rc
busybox find . | busybox cpio -o -H newc | busybox gzip > /tmp/newramdisk.gz
cd /tmp
rm -r /tmp/newramdisk
# generate createnewboot.sh
echo \#!/sbin/sh > /tmp/createnewboot.sh
echo /tmp/mkbootimg --kernel /tmp/zImage --ramdisk /tmp/newramdisk.gz --cmdline \"$(cat /tmp/boot.img-cmdline)\" --base $(cat /tmp/boot.img-base) --output /tmp/newboot.img >> /tmp/createnewboot.sh
chmod 777 /tmp/createnewboot.sh
/tmp/createnewboot.sh
return $?
- 將重新編譯的內核模塊(wifi驅動程序)復制到<workdir>/system/lib/modules文件夾
- 將gator.ko和gatord復制到<workdir>/system/xbin 文件夾
- 在<workdir>/META-INF/com/google/android/updater-script文件夾中編輯updater-script文件。添加下列行來更新系統分區,並將gatord程序的權限設置成可執行。
ui_print("Extracting system files...");
package_extract_dir("system", "/system");
set_perm(0, 0, 0755, "/system/xbin/gatord");
unmount("/system");
- 在<workdir>/META-INF/com/google/android/updater-script文件夾中編輯updater-script文件。添加下列行來更新啟動分區(內核及init.rc)。
ui_print("Building new boot.img...");
run_program("/tmp/dd", "if=/dev/block/mmcblk0p20", "of=/tmp/boot.img");;
run_program("/tmp/unpackbootimg", "/tmp/boot.img", "/tmp/");
run_program("/tmp/mkbootimg.sh");
- 將<workdir>文件夾壓縮為update.zip文件。請注意!切勿將<workdir>文件夾本身包括在內。
- 將update.zip文件復制到目標手機的SD卡根文件夾下。
注意!在繼續操作前,請為手機充滿電!!!
關閉手機電源,然后以HBOOT模式開啟。(同時按下電源按鈕和音量調低按鈕)
進入Recovery(恢復)菜單。系統會提示您,並自動進行更新。
在重新啟動后,Streamline准備就緒,可進行性能分析。
5使用Streamline對Android手機進行性能分析
Streamline支持通過以太網與目標手機的連接。使用Android Debug Bridge (ADB)實用程序,可通過USB連接將TCP端口從目標手機網絡轉發到PC localhost本機網絡。ADB也可配置用於以太網或Wi-Fi環境。有關Android SDK以及ADB設置的詳細信息,請參見Android網站。一旦設置好了ADB,就使用下列命令將Streamline使用的網絡端口轉發到localhost網絡上。
adb forward tcp:8080 tcp:8080
現在運行PC上的DS-5程序,並打開Streamline數據視圖窗口。如果在Window(窗口)->Show View(顯示視圖)菜單處未顯示,則選擇Window(窗口)->Show View(顯示視圖)->Other(其他),在對話框中找到“ARM Streamline”,然后打開ARM Streamline Data(數據采集對話框)。在Eclipse或DS-5的ARM Streamline數據視圖的Capture Options (采集選項)對話框中輸入設備的以太網地址。如果通過USB使用Android Debug Bridge (ADB)來轉發端口,則在地址字段中輸入localhost,如圖2所示。
圖2 ARM Streamline Data數據采集對話框
最后,按照ARM網站上的 ARM DS-5 Using ARM Streamline使用說明,使用Streamline對Android手機開始進行性能分析。圖3是使用Streamline對Android手機進行性能分析的截圖。
圖3 Streamline性能分析窗口
6 總結
Streamline是一款功能強大、經濟高效的解決方案,用於對ARM Linux和Android平台進行系統級性能分析。希望本文能助您一臂之力,通過Streamline加快您的Android開發工作。一旦開始使用,您很快會喜歡上這款工具。如需進一步了解使用Streamline的方法,請訪問 ARM Streamline website 和 ARM DS-5 info center