Android之Goldfish

本文介绍了Android中的Goldfish虚拟处理器及其在Linux内核中的实现。讲解了如何下载、查看和管理Android内核版本,包括通过git获取特定版本的Linux内核源码,以及使用repo命令获取不同版本的Android源码。
摘要由CSDN通过智能技术生成

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



参考文章:
http://liangbing8612.blog.51cto.com/2633208/664447  《Android之Goldfish介绍》
http://hyb757.blog.163.com/blog/static/337191012011222101446891/  《Android的Goldfish内核概述》





一.Android版本与Linux内核的关系

英文名

中文名

Android版本

Linux内核版本

No

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值