官术网_书友最值得收藏!

第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標準,但是和硬件平臺無關。

主站蜘蛛池模板: 巍山| 乳山市| 合川市| 晋江市| 江西省| 天全县| 晋城| 茶陵县| 盐山县| 临清市| 曲靖市| 宁河县| 靖州| 屯留县| 榆社县| 三都| 宜宾县| 丘北县| 手游| 翼城县| 太湖县| 北安市| 读书| 金塔县| 马尔康县| 林芝县| 南部县| 林口县| 越西县| 监利县| 枝江市| 五华县| 奉化市| 山丹县| 孟州市| 方山县| 舞阳县| 屯门区| 莱州市| 苗栗市| 利辛县|