- Android系統級深入開發
- 韓超 梁泉
- 11字
- 2018-12-29 13:39:31
第4章 Android的GoldFish內核和驅動
4.1 GoldFish內核概述
GoldFish是一種虛擬的ARM處理器,在Android的仿真環境中使用。在Linux的內核中,GoldFish作為ARM體系結構的一種“機器”。在Android的發展過程中,GoldFish內核的版本也從Linux 2.6.25升級到了Linux 2.6.29。這個處理器的Linux內核和標準的Linux內核的差別有以下幾個方面:
GoldFish機器的移植
GoldFish一些虛擬設備的驅動程序
Android中特有的驅動程序和組件
提示:GoldFish處理器有ARMv5和ARMv7兩個版本,在通常情況下,使用ARMv5的版本即可。
從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=中指定交叉編譯工具的路徑。
Goldfish處理器的編譯結果,最后的內容如下所示:
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 OBJCOPY 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/目錄中的kernel-qemu文件,即可以使用這個內核。
GoldFish處理器的config文件的路徑為arch/arm/configs目錄中的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_BINDER_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標準,但是和硬件平臺無關。