android 內核調試


這篇文檔給出使用android emulator 和 arm-linux-androideabi-gdb 調試 android kernel 的方法

 

1. checkout goldfish 源碼: 模擬器使用的kernel 是 goldfish 

 

git clone https://android.googlesource.com/kernel/goldfish.git git
checkout -t origin/android-goldfish-3.4 -b goldfish3.4

  

2. 設置環境變量,主要是為了指定交叉編譯器到path路徑: 下述幾句可以保存為一腳本,需要的時候在shell里執行

 

export PATH=$YOUR_ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make goldfish_armv7_defconfig

 

3. 增加內核config選項

 

默認的goldfish_armv7_defconfig配置沒有打開調試,也沒有使用HIGHMEM,這里我們手動打開 goldfish/.config 目錄,將下面的幾個配置打開:

 

CONFIG_HIGHMEM=y 打開這個選項后,啟動模擬器時 emulator -memory 參數才能發揮作用,否則模擬器的內存總是700多M
CONFIG_DEBUG_KERNEL=y 打開這個選項后,vmlinux 才有符號
CONFIG_KGDB=y 開啟kgdb

  

 

4. 開始編譯

make ARCH=arm CROSS_COMPILE=$YOUR_ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi- all

由於第3步開啟了幾個配置,所以編譯一開始會有提示讓選擇配置選項,記得相關的配置全部選Y就可以了 編譯之后在 goldfish/arch/arm/boot/zImage 出現,這個就是內核了

 

5. 啟動模擬器

 

emulator -no-window -no-audio -verbose -show-kernel -kernel goldfish/arch/arm/boot/zImage -memory 2048 -qemu -s -S

  

我一般調試內核不需要圖形界面,所以增加 -no-window, no-audio. 另外,希望看到內核的詳細輸出,增加了 -show-kernel, -verbose , 然后就是用 -kernel 參數指向剛剛編譯好的 zImage , -memory 設置內存,內存越大,調試起來性能好些, 最后是 -qemu -s -S 啟動調試監聽,就是內核啟動后會等待在 端口 1234 而不會一直啟動完畢,這時候需要在另外一個界面啟動gdb :

 

arm-linux-androideabi-gdb goldfish/vmlinux

  

然后在界面里執行遠程調試:

 

參考:

https://gbrownmozilla.wordpress.com/2015/02/13/more-memory-for-the-android-emulator/

http://www.kgdb.info/kgdb/use_kgdb/using_kgdb_base_qemu/

http://yabinc.blogspot.com/2015/03/build-and-run-android-linux-kernel-in.html

http://www.joenchen.com/archives/1093


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM