systemtap在android、pandaboard上的移植
systemtap是一個非常好用的linux除錯工具,systemtap從版本1.0開始變支援arm處理器,但是隻支援OMAP的,pandaboardES上的處理器是OMAP 4460,由於“工作”需要將systemtap移植到執行android的pandaboard ES上(執行ubuntu的pandaboard直接apt安裝就行)。官方資料http://omappedia.org/wiki/Systemtap個人感覺寫得不太好,下面簡述一下自己的移植過程。
搭建主機編譯環境
編譯成功的主機環境是ubuntu10.04 32bit,在ubuntu 64位上編譯報了幾個不好解決的錯誤,索性就在虛擬機器中安裝32位的ubuntu來作為host主機。
下載systemtap原始碼
不同的android核心對應著不同的systemtap版本(systemtap在OMAP上沒有做到向下相容),我的pandaboard上執行的kernel是omap-pand-3.0(linux kernel3.0),對應的systemtap版本是1.5,從http://sourceware.org/systemtap/ftp/releases/下載對應的版本。
編譯systemtap安裝在ubuntu
systemtap要在OMAP上執行,需要在ubuntu主機上生成執行在OMAP上的模組,因此ubuntu主機上也應該有systemtap,在ubuntu上安裝systemtap可以採用apt-get的方式(若只是編譯執行在OMAP上的模組,則不需要ubuntu的debuginfo資訊),也可以採用自己編譯的方式
apt-get build_dep systemtap
make clean
./configure --exec-prefix=/mnt/work/pandaboard/systemtap-1.5-ubuntu--prefix=/mnt/work/pandaboard/systemtap-1.5-ubuntu
make install
編譯systemtap安裝在pandaboard
在systemtap1.5的原始碼中執行如下命令,交叉編譯systemtap(需要安裝交叉編譯器,apt-get install gcc-arm-linux-gnueabi)。
ac_cv_file__usr_include_avahi_common=noac_cv_file__usr_include_avahi_client=no ac_cv_file__usr_include_nspr=noac_cv_file__usr_include_nspr4=no ac_cv_file__usr_include_nss=noac_cv_file__usr_include_nss3=no ac_cv_func_malloc_0_nonnull=yes ./configure --exec-prefix=/mnt/work/pandaboard/systemtap-1.5-macharm--prefix=/mnt/work/pandaboard/systemtap-1.5-macharm--host=arm-none-linux-gnueabi CXXFLAGS=-static CFLAGS=-static--disable-translator --disable-docs --disable-refdocs --disable-grapher--without-rpm
編譯omap-pand-3.0
修改omap-pand-3.0的Makefile:
ARCH= arm,CROSS_COMPILE=/mnt/work/pandaboard/arm-eabi-4.4.3/bin/arm-eabi-
編譯核心的交叉編譯器並不是編譯systemtap的交叉編譯器,而是跟編譯android原始碼的編譯器一樣(使用systemtap的交叉編譯器也可以編譯通過,但是執行到pandaboard上會出現滑鼠、網絡卡等不能使用的情況,原因還不知道),這個可以直接從自己下載的android原始碼中拷貝到ubuntu主機中。
修改完Makefile,執行以下命令,生成.config檔案
makepanda_defconfig
systemtap的執行需要核心開啟相關除錯資訊(debug info)選項,我們的systemtap要在pandaboard上執行,因此omap-pand-3.0的kenrel需要開啟如下選項:
CONFIG_KPROBES: General Setup -> Kprobes
CONFIG_RELAY: General Setup -> user spacerelay support
CONFIG_PROFILING: General Setup -> Profilingsupport (EXPERIMENTAL) + General Setup -> Oprofile system profiling(EXPERIMENTAL)
修改kernel/arch/arm/include/asm/ptrace.h檔案如下:
#defineinterrupts_enabled(regs) \
(!((regs)->ARM_cpsr & PSR_I_BIT))
#definefast_interrupts_enabled(regs) \
(!((regs)->ARM_cpsr & PSR_F_BIT))
++ #define condition_codes(regs) \
++ ((regs)->ARM_cpsr &(PSR_V_BIT|PSR_C_BIT|PSR_Z_BIT|PSR_N_BIT))
/* Are thecurrent registers suitable for user mode?
* (used to maintain security in signalhandlers)
*/
接下來便可以執行make –j2來編譯omap-pand-3.0的核心了。
編譯android
將編譯生成的arch/arm/boot/zImage檔案,替換掉android原始碼中的device/ti/panda/kernel檔案,然後重新編譯android原始碼,結束後將相關檔案燒寫到pandaboard上,詳情參見:http://blog.csdn.net/lzuzhp06/article/details/7716452。
交叉編譯systemtap指令碼
Systemtap指令碼的名字叫syscall_all.stp,在ubuntu主機上交叉編譯的命令如下:
stap -gv -a arm -BCROSS_COMPILE=arm-none-linux-gnueabi- -r /mnt/work/pandaboard/omap -msyscall_all.ko syscall_all.stp
/mnt/work/pandaboard/omap是omap-pand-3.0原始碼所在的檔案。
向pandaboard拷貝交叉編譯檔案
由於採用的是virtualbox虛擬機器,因此我先用scp命令將交叉編譯systemtap生成的檔案systemtap-1.5-macharm、交叉編譯生成的模組syscall_all.ko拷貝到64位的物理主機上,然後使用adb的push命令將systemtap-1.5-macharm檔案push到開發板的/data目錄下,將syscall_all.ko檔案push到/data/local目錄下。
adb push kprobes/systemtap-1.5-macharm /data/
adb push ./kprobes/syscall_all.ko /data/local/
重新掛在pandaboard的根分割槽為可讀寫分割槽:
mount -o remount,rw rootfs /
然後建立檔案及軟連結:
mkdir –p /mnt/work/pandaboard/
ln –s /data/ systemtap-1.5-macharm /mnt/work/pandaboard/ systemtap-1.5-macharm
使用staprun命令執行syscall_all.ko模組:
/data/ systemtap-1.5-macharm/bin/staprun/data/local/syscall_all.ko
pandaboard的串列埠輸出結果如下:
…
adbd(110) sys_write
InputReader(156) sys_clock_gettime
InputReader(156) sys_read
adbd(110) sys_read
InputReader(156) sys_writev
InputReader(156) sys_write
InputReader(156) sys_epoll_wait
adbd(110) sys_read
InputReader(156) sys_write
InputReader(156) sys_nanosleep
adbd(110) sys_select
adbd(110) sys_read
…
如此你知道syscall_all.stp的內容了嗎?
probe kernel.function("sys_*"){
printf("%s(%d) %s\n",execname(),pid(),probefunc());
}
相關推薦
systemtap在android、pandaboard上的移植
systemtap是一個非常好用的linux除錯工具,systemtap從版本1.0開始變支援arm處理器,但是隻支援OMAP的,pandaboardES上的處理器是OMAP 4460,由於“工作”需要將systemtap移植到執行android的pan
一、在Tiny4412上移植3602代WIFI的AP模式
下文的ap模式,不需要hostaod就能產生熱點,目前只能讓其和手機連線,並且能夠ping通。(還沒支援上網@[email protected],後期可以在更新) 一、開發環境 宿主機 :redhat5.3 交叉編譯器 :arm-linux-gcc(4.5.1)
python基礎----socketserver多並發實現、FTP上傳多並發
span end 沒有 res hasattr ret net packet except 一、socketserver多並發 基於tcp的套接字,關
二、angularjs上傳圖片
() 狀態 bower 錯誤 測試 adf 操作 pattern accep 上傳圖片需要引入插件ngFileUpload,使用bower安裝方法: bower install ng-file-upload --save,安裝後需要在命名app的名字js文件中註入,如下所
WAF——針對Web應用發起的攻擊,包括但不限於以下攻擊類型:SQL註入、XSS跨站、Webshell上傳、命令註入、非法HTTP協議請求、非授權文件訪問等
授權 文件訪問 http協議 火墻 針對 str sql 包括 fire 核心概念 WAF Web應用防火墻(Web Application Firewall),簡稱WAF。 Web攻擊 針對Web應用發起的攻擊,包括但不限於以下攻擊類型:SQL註入、XSS跨站、Websh
【轉】stm32CubeMx上移植自己的printf()和scanf()函數
smi config 用戶 type 連接器 標準庫 can 修改 esp 要想printf()和scanf() 函數工作,我們需要把printf()和scanf() 重新定向到串口中。重定向是指用戶可以自己重寫C 的庫函數,當連接器檢查到用戶編寫了與C 庫函數相同名字的函
golang 2行代碼在基於arm linux的樹莓派、orangepi上運行http web服務
目標 開發板 server post fontsize alt main函數 handle 基於 go語言(golang)簡化了跨平臺交叉編譯步驟,支持在windows系統下交叉編譯基於arm+linux平臺的應用,運行時無需其它依賴庫。以下以一個簡單的http serve
嵌入式Linux上移植unzip工具
16px 文件 bsp ont div 嵌入 for .gz .tar.gz 由於busybox編譯出來的unzip不支持有密碼的壓縮包解壓,因此基於unzip60源碼包,交叉編譯一個嵌入式Linux上的unzip工具。 1.下載地址是: http://sourcefo
html5、django上傳文件
http html django 上傳文件 前端代碼: <!DOCTYPE html><html><head><title>uploadFile</title> </head> <body> <
5、ORTP庫移植
工作目錄 man RM inux 交叉 libtool hub ptp XP 1、ORTP的引入 為什麽要使用RTP:http://blog.51cto.com/ticktick/462746 RTP協議分析:http://www.xuebuyuan.com/739929.
Java面試題:switch能否作用在byte、long、String上?
1.7 季節 spa name fault des lte false 枚舉類 switch可作用於char byte short int switch可作用於char byte short int對應的包裝類 switch不可作用於long double fl
動態添加、刪除上傳域(可限制添加條數)
device child clas scale this DDM doc tex puts 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <met
Java框架-SpringMVC的應用(json資料互動、控制器方法返回值、檔案上傳)
1. 搭建SpringMVC開發環境 1.1 建立專案,新增依賴 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" x
◮ R語言筆記(七): 利用Apply()函式在二維資料行、列上進行統計
這裡的二維資料可以是矩陣的形式也可以是資料框的形式, 通過apply()函式的正確使用,可以在二位資料的行、列上進行自己想要的操作: 例如: 每一列/每一行的資料之和sum、中位數median、均值mean和方差var等; *******************
Java 自定義註解&通過反射獲取類、方法、屬性上的註解
反射 JAVA中的反射是執行中的程式檢查自己和軟體執行環境的能力,它可以根據它發現的進行改變。通俗的講就是反射可以在執行時根據指定的類名獲得類的資訊。 註解的定義 註解通過 @interface 關鍵字進行定義。 /** * 自定義註解 *
阿里、騰訊、百度、華為、京東、搜狗、滴滴 上10家試題彙總(史上最全)
瘋狂創客圈整理了數百道面試題, 不光是為了面試,如果能全部解答, JAVA的技術水平也是傲視群雄了。 後續還會不斷更新。有些題目挺難的,歡迎大家來交流答案。 [第一部分] JAVA基礎 [第一篇] 面向物件 [第1題] 面向物件是什麼? [第2題] 類載入的過程 [第3題] 類載入器有哪些 [第4題] 雙
五、Springmvc上傳圖片
springmvc.xml <!-- 上傳圖片配置實現類 注意:id不能變 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartReso
SprinMVC轉發、重定向、收集date資料、自定義轉換器、檔案上傳、json資料轉換
1.專案模組圖 2.完成SpringMVC的基本搭建 pom.xml(下載jar包的檔案) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.
Linux rz、sz 上傳、下載檔案
sz、rz 這兩個命令 傳輸 自己 簡單的檔案 可以用用,正式場合 不建議使用,後果自負 1、簡介 1.1 系統環境 本文測試環境為 Ubuntu 16.04 amd64 # lsb_release -a 1.2 軟體安裝
Linux rz、sz 上傳、下載文件
apt 兩個 測試環境 從服務器 strong 服務器 tro linux rz 6.0 sz、rz 這兩個命令 傳輸 自己 簡單的文件 可以用用,正式場合 不建議使用,後果自負 1、簡介 1.1 系統環境 本文測