歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android之Goldfish

Android之Goldfish

日期:2017/3/1 10:10:25   编辑:Linux編程

一. 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=指定交叉編譯工具的路徑。
編譯結果:
  1. LD vmlinux
  2. SYSMAP system.map
  3. SYSMAP .tmp_system.map
  4. OBJCOPY arch/arm/boot/Image
  5. Kernel: arch/arm/boot/Image is ready
  6. AS arch/arm/boot/compressed/head.o
  7. GZIP arch/arm/boot/compressed/piggy.gz
  8. AS arch/arm/boot/compressed/piggy.o
  9. CC arch/arm/boot/compressed/misc.o
  10. LD arch/arm/boot/compressed/vmlinux
  11. OBJCONPY arch/arm/boot/zImage
  12. 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,這個文件的一些片斷如下所示:
  1. CONFIG_ARM=y
  2. #
  3. # System Type
  4. #
  5. CONFIG_ARCH_GOLDFISH=y
  6. #
  7. # Goldfish options
  8. #
  9. CONFIG_MACH_GOLDFISH=y
  10. # CONFIG_MACH_GOLDFISH_ARMV7 is not set
由於GoldFish是arm處理器,因此CONFIG_ARM宏需要被使能,CONFIG_ARCH_GOLDFISH和CONFIG_MACH_GOLDFISH宏是GoldFish處理器這類機器使用的配置宏。

goldfish_defconfig中的幾個與android系統相關的宏如下:
  1. # android
  2. #
  3. CONFIG_ANDROID=y
  4. CONFIG_ANDROID_BUNDER_IPC=y #binder ipc驅動程序
  5. CONFIG_ANDROID_LOGGER=y #log記錄器驅動程序
  6. # CONFIG_ANDROID_RAM_CONSOLE is not set
  7. CONFIG_ANDROID_TIMED_OUTPUT=y #定時輸出驅動程序框架
  8. CONFIG_ANDROID_LOW_MEMORY_KILLER=y
  9. CONFIG_ANDROID_PMEM=y #物理內存驅動程序
  10. CONFIG_ASHMEM=y #匿名共享內存驅動程序
  11. CONFIG_RTC_INTF_ALARM=y
  12. CONFIG_HAS_WAKELOCK=y 電源管理相關的部分wakelock和earlysuspend
  13. CONFIG_HAS_EARLYSUSPEND=y
  14. CONFIG_WAKELOCK=y
  15. CONFIG_WAKELOCK_STAT=y
  16. CONFIG_USER_WAKELOCK=y
  17. CONFIG_EARLYSUSPEND=y
goldfish_defconfig配置文件中,另外有一個宏是處理器虛擬設備的“驅動程序”,其內容如下:
  1. CONFIG_MTD_GOLDFISH_NAND=y
  2. CONFIG_KEYBOARD_GOLDFISH_EVENTS=y
  3. CONFIG_GOLDFISH_TTY=y
  4. CONFIG_BATTERY_GOLDFISH=y
  5. CONFIG_FB_GOLDFISH=y
  6. CONFIG_MMC_GOLDFISH=y
  7. CONFIG_RTC_DRV_GOLDFISH=y
在goldfish處理器的各個配置選項中,體系結構和goldfish的虛擬驅動程序基於標准linux的內容的驅動程序框架,但是這些設備在不同的硬件平台的移植方式不同;android專用的驅動程序是android中特有的內容,非linux標准,但是和硬件平台無關。
Copyright © Linux教程網 All Rights Reserved