這篇文檔給出使用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
