导航:首页 > 源码编译 > 安卓源码单独编译内核

安卓源码单独编译内核

发布时间:2024-05-02 09:06:01

Ⅰ 自己可以编译安卓源码

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    Ⅱ 我需要编译内核,内核源码在哪里

    kernelsource目录/Arch/CPU类型/Boot/里面,比如arch/arm/boot。要编译以后,才能找到。

    Ⅲ 如何从android源码中编译webkit

    android本来自带了webkit浏览器,但是要对其进行custom就需要android源代码才行, 但是在没有源码的情况下,那么就需要用到ndk了,比如,我是在xoom上做custom webkit的。
    1、虽然ndk提供的库很少,而且没有skia,但是好在有bitmap,这样显示慢了点,没有硬加速,但不是不可能。
    2、webkit需要的第三方库,freetype,png,jpeg,sqlite3等虽然android源码中有,但是ndk没有开放,因此所有的第三方库,freetype,png,jpeg,sqlite3,cairo,curl,fontconfig,pixman,iconv等都需要用ndk cross-compile成静态库,然后链接到最终的动态库中。
    3、选择iconv是icu太大,而且没有多语言的需求,选择cairo+pixman是skia的移植性不好,而且cairo支持很多种backend。
    4、编译第三方库需要用到autoconfig,ndk中有如何生成交叉编译链的文档,然后在configure时使用这个工具链就可以了,但是android用到的是bionic库,因此会有很少的地方需要修改,有些库也不能生成test程序,但是静态库是没问题的。
    5、利用ndk生成的交叉工具链,在加上webkit自带的cmake编译系统,生成webkit的动态库是没有问题的,当然是webkit的内核,而且有些平台相关的部分代码需要修改。
    6、但是只要是以linux平台为基础,修改还是很容易的,我移植的webkit是先移植到linux平台上,然后移植到android平台上的,所以修改相对少了很多,但是修改大多都在WebCore/platform下,在选择了的平台相关库后,做相应的配置和修改。
    7、其次是在WebKit目录,这个主要是支持和使用WebCore,因此在需求不是整个浏览器,而只是正常地显示网页时,还是可以写的比较简单的。

    Ⅳ 如何编译一个内核

    一、 下载新内核的源代码

    目前,在Internet上提供Linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。笔者是从站点www.kernelnotes.org上下载了Linux的最新开发版内核2.3.14的源代码,全部代码被压缩到一个名叫Linux-2.3.14.tar.gz的文件中。

    二、 释放内核源代码

    由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-2.2.5的子目录。该目录下存放着内核2.2.5的源代码。此外,还会发现一个指向该目录的链接linux。删除该连接,然后将新内核的源文件拷贝到/usr/src目录中。

    (一)、用tar命令释放内核源代码

    # cd /usr/src

    # tar zxvf Linux-2.3.14.tar.gz

    文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包含了内核2.3.14的全部源代码。

    (二)、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。

    # cd /usr/include

    # rm -Rf asm linux

    # ln -s /usr/src/linux/include/asm-i386 asm

    # ln -s /usr/src/linux/include/linux linux

    # ln -s /usr/src/linux/include/scsi scsi

    (三)、删除源代码目录中残留的.o文件和其它从属文件。

    # cd /usr/src/linux

    # make mrproper

    三、 配置内核

    (一)、启动内核配置程序。

    # cd /usr/src/linux

    # make config

    除了上面的命令,用户还可以使用make menuconfig命令启动一个菜单模式的配置界面。如果用户安装了X window系统,还可以执行make xconfig命令启动X window下的内核配置程序。

    (二)、配置内核

    Linux的
    内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内
    核;"m"表示将相应特性的支持或设备驱动程序编译成可加载 模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序
    的支持。由于内核的配置选项非常多,本文只介绍一些比较重要的选项。

    1、Code maturity level options(代码成熟度选项)

    Prompt for development and/or incomplete code/drivers
    (CONFIG_EXPERIMENTAL) [N/y/?]
    如果用户想要使用还处于测试阶段的代码或驱动,可以选择“y”。如果想编译出一个稳定的内核,则要选择“n”。

    1、 Processor type and features(处理器类型和特色)

    (1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 选择处理器类型,缺省为Ppro/6x86MX。

    (2)、Maximum Physical Memory (1GB, 2GB) [1GB] 内核支持的最大内存数,缺省为1G。

    (3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 协处理器仿真,缺省为不仿真。

    (4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]

    选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供X server使用。

    (5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 选择“y”,内核将支持对称多处理器。

    2、 Loadable mole support(可加载模块支持)

    (1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 选择“y”,内核将支持加载模块。

    (2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 选择“y”,内核将自动加载那些可加载模块,否则需要用户手工加载。

    3、 General setup(一般设置)

    (1)、Networking support (CONFIG_NET) [Y/n/?] 该选项设置是否在内核中提供网络支持。

    (2)、PCI support (CONFIG_PCI) [Y/n/?] 该选项设置是否在内核中提供PCI支持。

    (3)、PCI access mode (BIOS, Direct, Any) [Any] 该选项设置Linux探测PCI设备的方式。选择“BIOS”,Linux将使用BIOS;选择“Direct”,Linux将不通过BIOS;选择“Any”,Linux将直接探测PCI设备,如果失败,再使用BIOS。

    (4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 选择“y”,内核将支持平行口。

    4、 Plug and Play configuration(即插即用设备支持)

    (1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 选择“y”,内核将自动配置即插即用设备。

    (2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 选择“y”,内核将自动配置基于ISA总线的即插即用设备。

    5、 Block devices(块设备)

    (1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 选择“y”,内核将提供对软盘的支持。

    (2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 选择“y”,内核将提供对增强IDE硬盘、CDROM和磁带机的支持。

    6、 Networking options(网络选项)

    (1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 选择“y”,一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议。

    (2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 选择“y”,内核将支持防火墙。

    (3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 选择“y”,内核将支持TCP/IP协议。

    (4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 选择“y”,内核将支持IPX协议。

    (5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 选择“y”,内核将支持Appletalk DDP协议。

    8、SCSI support(SCSI支持)

    如果用户要使用SCSI设备,可配置相应选项。

    9、Network device support(网络设备支持)

    Network device support (CONFIG_NETDEVICES) [Y/n/?] 选择“y”,内核将提供对网络驱动程序的支持。

    10、Ethernet (10 or 100Mbit)(10M或100M以太网)

    在该项设置中,系统提供了许多网卡驱动程序,用户只要选择自己的网卡驱动就可以了。此外,用户还可以根据需要,在内核中加入对FDDI、PPP、SLIP和无线LAN(Wireless LAN)的支持。

    11、Character devices(字符设备)

    (1)、Virtual terminal (CONFIG_VT) [Y/n/?] 选择“y”,内核将支持虚拟终端。

    (2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]

    选择“y”,内核可将一个虚拟终端用作系统控制台。

    (3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]

    选择“y”,内核将支持串行口。

    (4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]

    选择“y”,内核可将一个串行口用作系统控制台。

    12、Mice(鼠标)

    PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用户使用的是PS/2鼠标,则该选项应该选择“y”。

    13、Filesystems(文件系统)

    (1)、Quota support (CONFIG_QUOTA) [N/y/?] 选择“y”,内核将支持磁盘限额。

    (2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 选择“y”,内核将提供对automounter的支持,使系统在启动时自动 mount远程文件系统。

    (3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 选择“y”,内核将支持DOS FAT文件系统。

    (4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]

    选择“y”,内核将支持ISO 9660 CDROM文件系统。

    (5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]

    选择“y”,用户就可以以只读方式访问NTFS文件系统。

    (6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系统运行状态的虚拟文件系统,该项必须选择“y”。

    (7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的标准文件系统,该项也必须选择“y”。

    14、Network File Systems(网络文件系统)

    (1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 选择“y”,内核将支持NFS文件系统。

    (2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)

    选择“y”,内核将支持SMB文件系统。

    (3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)

    选择“y”,内核将支持NCP文件系统。

    15、Partition Types(分区类型)

    该选项支持一些不太常用的分区类型,用户如果需要,在相应的选项上选择“y”即可。

    16、Console drivers(控制台驱动)

    VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 选择“y”,用户就可以在标准的VGA显示方式下使用Linux了。

    17、Sound(声音)

    Sound card support (CONFIG_SOUND) [N/y/m/?] 选择“y”,内核就可提供对声卡的支持。

    18、Kernel hacking(内核监视)

    Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 选择“y”,用户就可以对系统进行部分控制。一般情况下选择“n”。

    四、 编译内核

    (一)、建立编译时所需的从属文件

    # cd /usr/src/linux

    # make dep

    (二)、清除内核编译的目标文件

    # make clean

    (三)、编译内核

    # make zImage

    内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件zImage。如果编译的内核很大的话,系统会提示你使用make bzImage命令来编译。这时,编译程序就会生成一个名叫bzImage的内核映像文件。

    (四)、编译可加载模块

    如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。

    # make moles

    # make modelus_install

    编译成功后,系统会在/lib/moles目录下生成一个2.3.14子目录,里面存放着新内核的所有可加载模块。

    五、 启动新内核

    (一)、将新内核和System.map文件拷贝到/boot目录下

    # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14

    # cp /usr/src/linux/System.map /boot/System.map-2.3.14

    # cd /boot

    # rm -f System.map

    # ln -s System.map-2.3.14 System.map

    (二)、配置/etc/lilo.conf文件。在该文件中加入下面几行:

    default=linux-2.3.14

    image=/boot/vmlinuz-2.3.14

    label=linux-2.3.14

    root=/dev/hda1

    read-only

    (三)、使新配置生效

    # /sbin/lilo

    (四)、重新启动系统

    # /sbin/reboot

    新内核如果不能正常启动,用户可以在LILO:提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。

    安卓怎么使用修改过的源码编译程序

    1、Android的文件系统结构是怎样的,我们安装的程序放在那里?
    编译Android源码之后,在out/target/proct/generic一些文件:
    ramdisk.img、system.img、userdata.img、 system、 data、root
    其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。

    ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。

    2、Android SDK和android源码能为我们提供什么工具?
    AndroidSDK提供有很多工具,如adb,ddms,emulator,aapt等,并提供kernel-qemu、ramdisk.img、system.img、userdata.img。因此,只要有android SDK,我们就可以在模拟器上把android跑起来。
    Android源码可以编译出android SDK、adb等工具、android文件系统,以及ADT插件,也就是说,我们可以从android源码编译出所有android相关的东西。

    3、 把Android源 码”make”之后会生成许多工具和android文件系统(system.img等),我们又可以使用“makesdk”来生成android SDK,android
    SDK也包括有工具和android文件系统(system.img等),而原来安装的时候我们也安装了androidSDK,那么我们在开发时应该使用那些工具和android文件系统呢?

    Ⅵ 单独编译内核和设备树

    source /opt/fsl-imx-xwayland/4.19-warrior/environment-setup-aarch64-poky-linux
    export ARCH=arm64
    make -j 16
    生成的Image 和dtb在下面的路径
    ~/imx-yocto-bsp/build-imx8mmevk/tmp/work/imx8mmevk-poky-linux/linux-imx/4.19.35-r0/git/arch/arm64/boot

    Ⅶ 怎么修改Android 的Linux内核

    Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式。这两者在Android下是直接合并在一起取名为boot.img,会放在一个独立分区当中。这个分区格式是Android自行制定的格式。

    Android开发时,最标准的做法是重新编译于内核和根文件系统,然后调用Android给的命令行文件mkbootimg(out/host/linux-x86/bin/)来打包。

    在制作手机ROM时,有时会单独编译内核或抽出根文件进行修改内容,比如我只编译内核,其余的地方不变。这样重新安装巨大的Android开发环境实在不划算。因此很多boot.img解包工具被人开发出来,这一些工具都是把内核和根文件系统从一个现成的boot.img抽取出来,修发后再次打包还原。

    一.常见的解包工具

    因为boot.img的格式比较简单,它主要分为三大块(有的可能有四块)

    因此很多人开发分析工具,有是linux shell脚本,比如repack-zImage,也有人采用perl,还有C语言编写的 unbootimg,

    我使用的是在源码位置system/core/mkbootimg/ 下的 mkbootimg。为了简化,蓝点工坊把与mkbootimg中打包工具和解包工具以及所包含的libmincrpty库抽出来,并且重写一个Makefile,作为开源项目。
    使用者只需要在linux(需安装gcc,make,一般是标配)或windows(需要安装mingw)的命令行执行make,即可产生可执行文件mkbootimg ,unpackbootimg。

    二.解/打包工具使用

    解包工具:unpackbootimg

    常见格式
    unpackbootimg -i .\tmp\boot.img -o .\out

    这一句命令行表示把boot.img解包,所有文件输出到out目录下

    它会解压出如下文件:
    boot.img-zImage (内核文件)
    boot.img-ramdisk.gz (根文件系统打包文件)
    boot.img-cmdline (mkbootimg cmdline参数)
    boot.img-pagesize (mkbootimg pagesize参数)

    boot.img-base (mkbootimg base参数)

    打包工具:mkbootimg (Android自带)

    常见的命令格式:
    ./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img --base 02e00000
    这句含义是把内核文件zImage和boot目录下的根文件压缩包 boot.img-ramdisk.gz打包成boot.img.
    其中cmdline和base的值均来源于unpackbootimg的结果

    Ⅷ android源码怎么编译生成recovery.img

    recovery.img生成过程
    L630-L637 依赖关系
    (From: build/core/Makefile)630 $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) /631 $(INSTALLED_RAMDISK_TARGET) /632 $(INSTALLED_BOOTIMAGE_TARGET) /633 $(recovery_binary) /634 $(recovery_initrc) $(recovery_kernel) /635 $(INSTALLED_2NDBOOTLOADER_TARGET) /636 $(recovery_build_prop) $(recovery_resource_deps) /637 $(RECOVERY_INSTALL_OTA_KEYS)

    INSTALLED_RECOVERYIMAGE_TARGET 为我们的编译目标:

    584 INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img

    它依赖很多其它目标:
    1.MKBOOTFS, MINIGZIP, MKBOOTIMG,PC端工具软件:(From build/core/config.mk)265 MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX)266 MINIGZIP := $(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX)267 MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)

    2.INSTALLED_RAMDISK_TARGET,标准根文件系统 ramdisk.img:

    326 BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img328 # We just build this directly to the install location.329 INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) 3.INSTALLED_BOOTIMAGE_TARGET, 即boot.img,标准内核及标准根文件系统:362 INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img

    4. recovery_binary, Recovery可执行程序,源码位于:bootable/recovery

    590 recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery

    5. recovery_initrc,recovery模式的init.rc, 位于 bootable/recovery/etc/init.rc

    586 recovery_initrc := $(call include-path-for, recovery)/etc/init.rc

    6. recovery_kernel, recovery 模式的kernel, 同标准内核

    587 recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system

    7.INSTALLED_2NDBOOTLOADER_TARGET,我们不用。

    8. recovery_build_prop, recovery 模式的build.prop, 同标准模式。589 recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET)

    9. recovery_resource_deps, recovery 模式使用的res, 位于:recovery/custom/{proct_name}/res, 以及设备自定义部分(我们没用到)

    591 recovery_resources_common := $(call include-path-for, recovery)/custom/$(TARGET_PRODUCT)/res592 recovery_resources_private := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery/res))593 recovery_resource_deps := $(shell find $(recovery_resources_common) 594 $(recovery_resources_private) -type f) 10. RECOVERY_INSTALL_OTA_KEYS, ota 密钥:

    618 # Generate a file containing the keys that will be read by the619 # recovery binary.620 RECOVERY_INSTALL_OTA_KEYS := /621 $(call intermediates-dir-for,PACKAGING,ota_keys)/keysL638-L655 准备内容
    638 @echo ----- Making recovery image ------639 rm -rf $(TARGET_RECOVERY_OUT)640 mkdir -p $(TARGET_RECOVERY_OUT)641 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)642 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc643 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp

    准备recovery目录:out/target/proct/{proct_name}/recovery 及其子目录:

    ./root

    ./root/etc

    ./root/tmp644 echo Copying baseline ramdisk...645 cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)646 echo Modifying ramdisk contents...647 rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res

    从标准根文件系统拷贝所有文件, 删除其res 目录。

    648 cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/649 cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ 拷贝recovery 模式的核心文件 init.rc 及 recovery 650 cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/651 $(foreach item,$(recovery_resources_private), /652 cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/)653 cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys 拷贝资源文件及密钥文件。 654 cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) /655 > $(TARGET_RECOVERY_ROOT_OUT)/default.prop 生成属性文件 default.prop, 它包含了标准根文件系统的default.prop (out/target/proct/{proct_name}/root/default.prop)以及system分区的build.prop (out/target/proct/{proct_name}/system/build.prop) L656-L661 最终生成recovery.img
    656 $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) 压缩recovery根文件系统 657 build/quacomm/mkimage $(PRODUCT_OUT)/ramdisk-recovery.img RECOVERY > $(PRODUCT_OUT)/ramdisk_recovery.img 加一个标识头(RECOVERY) 658 mv $(PRODUCT_OUT)/ramdisk_recovery.img $(PRODUCT_OUT)/ramdisk-recovery.img659 $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@660 @echo ----- Made recovery image -------- $@661 $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)

    和内核一起,生成recovery.img附:Recovery 根文件系统目录结构


    $ tree

    .

    ├── advanced_meta_init.rc

    ├── data

    ├── default.prop

    ├── dev

    ├── etc

    ├── init

    ├── init.factory.rc

    ├── init.goldfish.rc

    ├── init.quacomm.rc

    ├── init.rc

    ├── meta_init.rc

    ├── proc

    ├── res

    │ ├── images

    │ │ ├── icon_error.png

    │ │ ├── icon_installing.png

    │ │ ├── indeterminate1.png

    │ │ ├── indeterminate2.png

    │ │ ├── indeterminate3.png

    │ │ ├── indeterminate4.png

    │ │ ├── indeterminate5.png

    │ │ ├── indeterminate6.png

    │ │ ├── progress_empty.png

    │ │ └── progress_fill.png

    │ └── keys

    ├── sbin

    │ ├── adbd

    │ ├── advanced_meta_init

    │ ├── meta_init

    │ ├── meta_tst

    │ └── recovery

    ├── sys

    ├── system

    └── tmp

    阅读全文

    与安卓源码单独编译内核相关的资料

    热点内容
    易语言新进程监视源码 浏览:937
    turbo码译码算法 浏览:954
    stc11f16xe单片机 浏览:282
    linuxupdate命令行 浏览:578
    pdf转化成wps 浏览:765
    php抛出错误 浏览:159
    买车看车用什么app 浏览:656
    dos怎么清除屏幕上的命令 浏览:813
    压缩裤冬天 浏览:449
    潭州学院python 浏览:822
    下载文件夹不用卸载 浏览:237
    怎样删除手机内不用的英文文件夹 浏览:83
    android获得屏幕宽度 浏览:308
    单片机根据波形写代码 浏览:673
    应届生程序员怎么投简历 浏览:727
    数学建模算法与应用ppt 浏览:101
    远程怎么访问端游服务器 浏览:106
    打电话定位置的源码 浏览:650
    即时通讯平台源码 浏览:457
    安卓自助app怎么转到苹果手机 浏览:329