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

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

主站蜘蛛池模板: 屏边| 黔西县| 潜江市| 滕州市| 延边| 东辽县| 彰化县| 永修县| 望城县| 洛隆县| 仙游县| 措美县| 澄江县| 米林县| 通山县| 新泰市| 肥西县| 宿州市| 建昌县| 开鲁县| 普洱| 武隆县| 马山县| 乌海市| 邯郸县| 行唐县| 惠水县| 山西省| 贡觉县| 沈阳市| 皮山县| 卢氏县| 长治市| 永川市| 辽宁省| 石首市| 铅山县| 蓝田县| 静安区| 贡觉县| 曲周县|