導航:首頁 > 源碼編譯 > 安卓源碼單獨編譯內核

安卓源碼單獨編譯內核

發布時間: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

    閱讀全文

    與安卓源碼單獨編譯內核相關的資料

    熱點內容
    潭州學院python 瀏覽:814
    下載文件夾不用卸載 瀏覽:233
    怎樣刪除手機內不用的英文文件夾 瀏覽:81
    android獲得屏幕寬度 瀏覽:302
    單片機根據波形寫代碼 瀏覽:669
    應屆生程序員怎麼投簡歷 瀏覽:721
    數學建模演算法與應用ppt 瀏覽:99
    遠程怎麼訪問端游伺服器 瀏覽:106
    打電話定位置的源碼 瀏覽:642
    即時通訊平台源碼 瀏覽:457
    安卓自助app怎麼轉到蘋果手機 瀏覽:328
    雅馬哈迴音壁不能識別源碼 瀏覽:730
    python如何移植到安卓 瀏覽:29
    黃柱選股公式源碼 瀏覽:639
    教育系統源碼達標 瀏覽:888
    音效卡驅動安裝程序在哪個文件夾 瀏覽:62
    錢還完了銀行不給解壓 瀏覽:171
    linux的系統調用表 瀏覽:754
    php怎麼轉換頁面 瀏覽:548
    我的世界買了伺服器之後怎麼開服 瀏覽:830