歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android之Goldfish

一. 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