源码编译CWM Recovery
生活随笔
收集整理的這篇文章主要介紹了
源码编译CWM Recovery
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
說明:本教程以中興的[N881F]為例,Android源碼為CyanogenMod 10.1
地址:https://github.com/Gaojiquan/android_device_zte_N881F
*1 準(zhǔn)備Ubuntu作為您的操作系統(tǒng),筆者的版本是12.04_amd64。*2 準(zhǔn)備 Android 源碼的編譯環(huán)境,主要是安裝一些編譯用到的lib庫,以及同步源碼的一些工具,如GIT,CURL,REPO等。具體可參考:http://source.android.com/source/index.html[source.android.com]*3 在確保環(huán)境已準(zhǔn)備妥當(dāng)之后,接下來開始下載 Android 源碼,此文以cm 10.1 源碼為例。1).創(chuàng)建一個用于存放源碼的目錄,如:jellybean/systemmkdir –p jellybean/system2).切換到該目錄cd jellybean/system3).初始化cm-10.1的分支repo init -u git://github.com/CyanogenMod/android.git -b cm-10.14).同步源碼repo sync –j30*4 適配你的Vendor1).前提條件* 已root;* 有boot.img或者recovery.img2).手動建立Vendor文件夾:device/ZTE/N881F,規(guī)則為“device/device_manufacturer_name/device_name”,這里 “device_manufacturer_name” 指的是你要編譯的設(shè)備的廠商(如ZTE,HTC,MOTO等),“device_name” 指的是你的設(shè)備名稱。mkdir –p device/ZTE/N881F3).獲取boot.imgadb連接手機(jī)狀態(tài)下,輸入adb shell進(jìn)入shell模式,保證手機(jī)已root,輸入 su,轉(zhuǎn)入root權(quán)限,輸入cat /proc/mtd查看有recovery(和/或)boot路徑,如果存在,分別執(zhí)行dd if=/your_boot_partition of=/your_sdcard_if_exists/boot.imgdd if=/your_recovery_partition of=/your_sdcard_if_exists/recovery.imgyour_boot_partition 是mtd文件中記載的boot的路徑,your_sdcard_if_exists 是你的sdcard路徑,recovery同理,完成后退出shell,在終端或命令行下執(zhí)行adb pull /your_sdcard_if_exists/boot.img d:\boot.imgadb pull /your_sdcard_if_exists/recovery.img d:\recovery.img這樣就獲取了boot.img和recovery.img文件如果cat /proc/mtd 提示 No such file or directory,請?jiān)赼db shell的root權(quán)限下執(zhí)行mount在輸出中查找 system,userdata,cache的路徑,通常情況下,boot,recovery路徑會和他們保持一致,一個可能的輸出是root@edison:/ # mountmountrootfs / rootfs ro,relatime 0 0tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0devpts /dev/pts devpts rw,relatime,mode=600 0 0proc /proc proc rw,relatime 0 0sysfs /sys sysfs rw,relatime 0 0none /acct cgroup rw,relatime,cpuacct 0 0tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0none /dev/cpuctl cgroup rw,relatime,cpu 0 0/dev/block/system /system ext3 ro,relatime,barrier=1,data=ordered 0 0/dev/block/pds /pds ext3 rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=1,data=ordered 0 0/dev/block/preinstall /preinstall ext3 rw,nosuid,nodev,noatime,nodiratime,barrier=1,data=ordered 0 0/dev/block/userdata /data ext3 rw,relatime,errors=continue,barrier=0,data=ordered 0 0/dev/block/cache /cache ext3 rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=1,data=ordered 0 0/dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0/dev/block/vold/179:97 /mnt/external1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0分析內(nèi)容發(fā)現(xiàn),沒有boot,沒有Recovery分區(qū)。。。不急,咱們找規(guī)律。 /dev/block/cache,/dev/block/userdata,/dev/block/system。。。這樣是不是boot和recovery分區(qū)路徑為/dev/block/boot和/dev/block/recovery?此時(shí)查看 /dev/block 目錄root@edison:/ # ls /dev/blockls /dev/blockbootcachecdromcid...recovery...真有,那么 boot 和 recovery 即是我們要尋找的文件,接下來,同樣使用 dd 命令導(dǎo)出它們到sdcard,再使用adb pull命令導(dǎo)出到本地磁盤4).生成vendorsource build/envsetup.shmake -j4 otatoolsbuild/tools/device/mkvendor.sh device_manufacturer_name device_name /your/path/to/the/boot.img實(shí)際命令如下:source build/envsetup.shmake -j4 otatoolsbuild/tools/device/mkvendor.sh ZTE N881F boot.img上述命令假設(shè)你的boot.img存放于源碼目錄下。5).提取recovery.fstab。經(jīng)過第4)步驟后,會生成一份默認(rèn)的recovery.fstab到你的N881F目錄下,這時(shí)我們需要獲取一份屬于你機(jī)器的掛載點(diǎn),這時(shí)候有兩種辦法:* 直接查看手機(jī)里的“/cache/recovery/last_log”,如果該文件存在,則查找如下內(nèi)容:recovery filesystem table=========================如果有上述內(nèi)容,那就將它拷貝粘貼至recovery.fstab。* 解包recovery.img,解壓后的etc目錄下有此文件,直接拷過來用。文件內(nèi)容:mount point fstype device [device2]/boot emmc /dev/block/mmcblk0p8/cache ext4 /dev/block/mmcblk0p15/data ext4 /dev/block/mmcblk0p13/misc emmc /dev/block/mmcblk0p17/recovery mtd /dev/block/mmcblk0p16/sdcard vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1/system ext4 /dev/block/mmcblk0p12/sdcard2 vfat /dev/block/mmcblk0p206).準(zhǔn)備 recovery.rcimport /init.recovery.${ro.hardware}.rcon early-initstart ueventdon initexport PATH /sbinexport ANDROID_ROOT /systemexport ANDROID_DATA /dataexport EXTERNAL_STORAGE /sdcardsymlink /system/etc /etcmkdir /bootmkdir /recoverymkdir /sdcardmkdir /internal_sdmkdir /external_sdmkdir /sd-extmkdir /datadatamkdir /emmcmkdir /systemmkdir /datamkdir /cachemount /tmp /tmp tmpfschown root shell /tmpchmod 0775 /tmpwrite /sys/class/android_usb/android0/enable 0#可能會修改的地方write /sys/class/android_usb/android0/idVendor 19d2write /sys/class/android_usb/android0/idProduct 1361write /sys/class/android_usb/android0/functions mass_storage,adbwrite /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}write /sys/class/android_usb/android0/iProduct ${ro.product.model}write /sys/class/android_usb/android0/iSerial ${ro.serialno}on bootifup lohostname localhostdomainname localdomainclass_start defaultservice ueventd /sbin/ueventdcriticalservice recovery /sbin/recoveryservice adbd /sbin/adbd recoverydisabled# Always start adbd on userdebug and eng buildson property:ro.debuggable=1write /sys/class/android_usb/android0/enable 1start adbdsetprop service.adb.root 1# Restart adbd so it can run as rooton property:service.adb.root=1write /sys/class/android_usb/android0/enable 0restart adbdwrite /sys/class/android_usb/android0/enable 17).修改 recovery.rc這份文件大致是通用的,可能需要修改的地方單獨(dú)指出來了,如若Recovery編譯完后USB大容量不能正常掛載,則可去手機(jī)里查看“/sys/class/android_usb/android0/idVendor”和“/sys/class/android_usb/android0/idProduct”這兩個文件的內(nèi)容,然后依次填入上述可修改處的值(如 idVendor 19d2,把“19d2“換成“/sys/class/android_usb/android0/idVendor”對應(yīng)的值即可)。在Ubuntu下還可以用lsusb命令查看這兩個值:focus@ubuntu:/media/linux/jellybeanplus/system$ lsusbBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching HubBus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching HubBus 001 Device 003: ID 064e:d20c Suyin Corp.Bus 002 Device 003: ID 046d:c52b Logitech, Inc. Unifying ReceiverBus 003 Device 013: ID 19d2:1361 ZTE WCDMA Technologies MSM最后一行的19d2和1361即為idVendor和idProduct。8).重寫按鍵對應(yīng)的c文件 recovery_ui.c9).提取設(shè)備的根文件系統(tǒng)的rc或sh文件,如init.qcom.usb.rc,init.qcom.usb.sh。(僅在根文件系統(tǒng)的目錄下有這些文件的情況下成立,如無則忽略)10).查看內(nèi)核基址,ramdisk文件的offset偏移量等11).提取system.propadb pull /system/build.prop從手機(jī)里pull過來build.prop后,拷貝到N881F目錄,打開文件,將文件內(nèi)容拷貝至system.prop,然后將build.prop文件刪除。*5 開始編譯1).設(shè)置源碼環(huán)境變量gedit ~/.bashrc添加如下環(huán)境變量:# Android environmentexport TARGET_ARCH=armexport ANDROID_SDK_TOOLS=<YOUR_ANDROID_SDK_DIR>/toolsexport ANDROID_TOOLCHAIN=<YOUR_SOURCE_CODE_DIR>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/binexport PATH=${ANDROID_SDK_TOOLS}:${ANDROID_TOOLCHAIN}:$PATH# Java environmentJAVA_HOME=<YOUR_JAVA_SDK_DIR>export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH執(zhí)行命令使環(huán)境變量生效:source ~/.bashrc2).編譯你的Vendorcd <源碼目錄>source build/envsetup.shlunch cm_N881F-engmake -j4 recoveryimage參考:http://www.cnblogs.com/hellopojun/archive/2012/11/23/2784650.html總結(jié)
以上是生活随笔為你收集整理的源码编译CWM Recovery的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【输入法】迄今为止,居然有这么多汉字输入
- 下一篇: 计算机一级插入页眉,计算机一级考试,设置