第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标准,但是和硬件平台无关。