一. Goldfish介紹
Goldfish是一種虛擬的ARM處理器,在Android的仿真環境中使用。Android模擬器通過運行它來運行arm926t指令集(arm926t屬於armv5構架,goldfish處理器有ARMv5和ARMv7兩個版本,在一般情況下,使用ARMv5的版本即可)。
編譯生成的linux內核鏡像在android的模擬器中使用。啟動模擬器時,Linux Kernel鏡像默認使用:prebuilt/android-arm/kernel目錄下的kernel-qemu文件。
在linux的內核中,Goldfish作為ARM體系結構的一種“mach”,它的核心內容存放在:arch/arm/mach-goldfish。
goldfish_defconfig 位置:kernel/arch/arm/configs
在android的發展過程中,Goldfish內核的版本也從linux2.6.25升級到了linux2.6.29.這個處理器的linux內核和標准的linux內核的差別有以下幾方面:
1. goldfish機器的移植。
2. goldfish一些虛擬設備的驅動程序。
3. android中特有的驅動程序和組件。
二. 編譯Goldfish內核
從android開源工程的代碼倉庫中,使用git工具得到goldfish內核的方式為:
$ git clone git://android.git.kernel.org/kernel/common.git
在其linux源代碼的根目錄中,配置和編譯goldfish內核的過程如下所示:
$make ARCH=arm goldfish_defconfig .config
$make ARCH=arm CROSS_COMPILE={path}/arm-none-linux-gnueabi-
其中,在CROSS_COMPILE=指定交叉編譯工具的路徑。
編譯結果:
- LD vmlinux
- SYSMAP system.map
- SYSMAP .tmp_system.map
- OBJCOPY arch/arm/boot/Image
- Kernel: arch/arm/boot/Image is ready
- AS arch/arm/boot/compressed/head.o
- GZIP arch/arm/boot/compressed/piggy.gz
- AS arch/arm/boot/compressed/piggy.o
- CC arch/arm/boot/compressed/misc.o
- LD arch/arm/boot/compressed/vmlinux
- OBJCONPY arch/arm/boot/zImage
- Kernel: arch/arm/boot/zImage is ready
vmlinux是linux進行編譯和連接之後生成的Elf格式的文件,Image是未經過壓縮的二進制文件,piggy是一個解壓縮程序,zImage是解壓縮程序和壓縮內核的組合。
在android源代碼的根目錄中vmlinux和zImage分別對應android代碼prebuilt中的預編譯的arm內核。
使用zImage,替換prebuilt中的prebuilt/android-arm/目錄中的goldfish_defconfig,這個文件的一些片斷如下所示:
- CONFIG_ARM=y
- #
- # System Type
- #
- CONFIG_ARCH_GOLDFISH=y
- #
- # Goldfish options
- #
- CONFIG_MACH_GOLDFISH=y
- # CONFIG_MACH_GOLDFISH_ARMV7 is not set
由於GoldFish是arm處理器,因此CONFIG_ARM宏需要被使能,CONFIG_ARCH_GOLDFISH和CONFIG_MACH_GOLDFISH宏是GoldFish處理器這類機器使用的配置宏。
goldfish_defconfig中的幾個與android系統相關的宏如下:
- # android
- #
- CONFIG_ANDROID=y
- CONFIG_ANDROID_BUNDER_IPC=y #binder ipc驅動程序
- CONFIG_ANDROID_LOGGER=y #log記錄器驅動程序
- # CONFIG_ANDROID_RAM_CONSOLE is not set
- CONFIG_ANDROID_TIMED_OUTPUT=y #定時輸出驅動程序框架
- CONFIG_ANDROID_LOW_MEMORY_KILLER=y
- CONFIG_ANDROID_PMEM=y #物理內存驅動程序
- CONFIG_ASHMEM=y #匿名共享內存驅動程序
- CONFIG_RTC_INTF_ALARM=y
- CONFIG_HAS_WAKELOCK=y 電源管理相關的部分wakelock和earlysuspend
- CONFIG_HAS_EARLYSUSPEND=y
- CONFIG_WAKELOCK=y
- CONFIG_WAKELOCK_STAT=y
- CONFIG_USER_WAKELOCK=y
- CONFIG_EARLYSUSPEND=y
goldfish_defconfig配置文件中,另外有一個宏是處理器虛擬設備的“驅動程序”,其內容如下:
- CONFIG_MTD_GOLDFISH_NAND=y
- CONFIG_KEYBOARD_GOLDFISH_EVENTS=y
- CONFIG_GOLDFISH_TTY=y
- CONFIG_BATTERY_GOLDFISH=y
- CONFIG_FB_GOLDFISH=y
- CONFIG_MMC_GOLDFISH=y
- CONFIG_RTC_DRV_GOLDFISH=y
在goldfish處理器的各個配置選項中,體系結構和goldfish的虛擬驅動程序基於標准linux的內容的驅動程序框架,但是這些設備在不同的硬件平台的移植方式不同;android專用的驅動程序是android中特有的內容,非linux標准,但是和硬件平台無關。