编译rec
A. 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
B. 什么是rec
REC 是计算机术语,全称是Regional Echomail Coordinator,区内会议信件协调人。
●数学运算符号(求极坐标到直角坐标系的点转化)与Pol相对。在计算器中一般是shift+Pol
●平面坐标转化:极坐标系的点转化到笛卡尔直角坐标系(即平面直角坐标系)。例如:极坐标系(r,θ)转化到笛卡尔直角坐标系(x,y)
■计算器转化运算结果为此点的横坐标x,因为极坐标已知半径,所以用勾股定理即可求得纵坐标y。
运算方法:例如 Rec(8,60)=8cos60°=4。即Rec(r,θ)=r cos θ。
●三维坐标转化(难点):球坐标系(r,θ,φ)转化到笛卡尔仿射坐标系(即空间三维直角坐标系)。本侠刚上初二,自己想了个办法转化:分成两步Rec,先把点到球心的连线投影到仰角φ为零°的平面,形成个射影,Rec(r的射影,θ)(跟极坐标一样)求出x和y(方法前面已经提到)。然后在【球径r所在且与φ为零的平面垂直】的平面上建立一个极坐标系,自然,0°—180°那条直线也要在原球坐标系φ=0°那个平面上(建与不建无所谓,就是你们好理解),Rec(r,φ),求出射影进而求出Z【其实也就是把射影利用勾股定理,这里啰嗦了,直观思维一下吧】,即转化完毕(x,y,z)其实也就是三步三角函数(射影长度求法:r cos φ)。
●拓展知识:三角函数,sin,cos,tan,cot,sec,csc,Arcsin,Arccos,Arctan,Arccot,Arcsec,Arccsc,射影定理
●其他简介
简写
REC = record,录制。
REC = receive,收到。
REC = receipt,收据。
REC = recreation,娱乐,仅用于复合词中。
REC在c++中也有出现,是微软在MFC中的一种封装函数类型
其他
REC,二进制资源文件,资源编译器编译资源定义后即生成RES文件。
C. 如何构建编译TWRP touch recovery
目前稳定的的分支是twrp2.4板本2.4.xx代码基地。如果你使用的CM10.1你*必须*使用twrp2.4分支。主分支代表TWRP2.2和JB-WIP TWRP2.3。选择任何你喜欢的分支,但唯一的分支越来越活跃的代码更改twrp2.4。
* CM7 ONLY*
更换整个CM7/build文件夹:
确保您获得twrp2.3分支和不是主分支。
*开始构建编译*
注意:如果您添加或更改任何标志,你将需要进行编译清除,然后再重新编译或标志更改将不被使用起。
现在,你的源代码,你需要设置或更改您的设备(S)的一些构建标志。查找BoardConfig.mk为您的设备,CM/devices/manufacturer/codename文件夹(例如CM/devices/hp/tenderloin/BoardConfig.mk)BoardConfig.mk。首先配置BoardConfig.mk的文件为
TARGET_RECOVERY_INITRC:=
如果您的设备有此行,将在恢复中使用一个自定义,预置init.rc的路径。最有可能的是,你将需要略微更改自定义init.rc。寻找recovery中的init.rc文件,并打开它。顶部附近,你会看到这样的信息:
on init
export PATH /sbin
export LD_LIBRARY_PATH .:/sbin
添加所需的最后一行。这条线是需要得到的链接器运行。 TWRP ClockworkMod不同,是一个动态链接的恢复。动态链接可以让我们节省了大量的空间,以帮助确保,TWRP恢复图像将适合在更多的设备。它也让我们使用动态链接的触摸屏上看到摩托罗拉Photon与Atrix和惠普的TouchPad,而无需 mount /system 的二进制文件。
还需要包括您的主板配置架构和平台设置。通常情况下,这些都已经包含了,如果你正在使用设备的configs别人创建的,但如果你创建你自己的,你可能需要添加他们。没有他们,往往会恢复故障段在启动过程中,你只会看到屏幕上一遍又一遍地典辉帘闪光。
D. 如何修改Recovery的字符串资源
1.recovery_l10n就是谷歌提供的制作字符串图片的APK,通过源码下的mmm编译,可以得到RecoveryLocalizer.apk。
2.打开文件recovery_l10n\res\values-zh-rCN\string.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="recovery_installing" msgid="7864047928003865598">"正在安装系统更新… 请勿断电"</string>
<string name="recovery_erasing" msgid="4612809744968710197">"正在清除… 请勿断电"</string>
<string name="recovery_no_command" msgid="1915703879031023455">"无命令。"</string>
<string name="recovery_error" msgid="4550265746256727080">"出错了!"</string>
</resources>
3.这里就可以看到需要用到的四个字符串,修改成需要的文字。
4.重新编译后,安装到对应的设备。打开apk,选择相应的字符串,执行Go。
5.通过adb命令既可拿到图片资源了。
6.拿到资源后,通过执行pngcrush来进行图片处理,因为读取pngcrush处理过的png比普通的png快,且内存小。
pugcrush -c 0 text_out.png output.png
至此我们就完成了字符串图片的创建。
最后,将字符串图片重新放入到bootable\recovery\res\image目录下,替换原来的图片,重新编译整个工程即可完成修改了。
E. 如何制作自己的recovery.img
首先,把手机硬启,手机不同其硬启方法也不同(大多是音量键+电源键),自己看说明书 1、如果你的手机已经S-OFF,就往下看,如果手机硬启后显示S-ON就不用看了,没戏。 2、用一张质量好的内存卡,在网上下载一个recovery程序(多为PG88IMG.zip) 3、手机硬启后,用音量键选择recovery,电源键确定,后手机自动找到安装文件,后提示是否安装,选择Y,确定,安装后重启即可。
F. 第三方刷机包怎样反编译在用官方rec刷
官方REC是刷不了第三方ROM的,验证是通不过的,只有官方出的ROM才能刷进去,你可以刷个第三方REC再刷ROM
G. 如何从源代码编译TWRP Recovery
目前稳定的的分支是twrp2.4板本2.4.xx代码基地。如果你使用的CM10.1你*必须*使用twrp2.4分支。主分支代表TWRP2.2和JB-WIP TWRP2.3。选择任何你喜欢的分支,但唯一的分支越来越活跃的代码更改twrp2.4。 * CM7 ONLY* 更换整个CM7/build文件夹
H. 如何针对特定机型,编译cwm recovery
你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章。
1,
安装所需要的包
2,
建立编译的环境,并同步CWM所需的源码,CyanogenMod源码中附带CWM源码
CWM
5
-
Gingerbread
CWM
6
-
Jellybean
3,
下面我们进入真正的编译阶段,确保你已经使用“repo
sync
”命令同步了最新的源码
进入源码的目录
放出以下命令:
make
-j4
otatools
3.5,
如果你的机型不被CM10官方支持,请执行这一步
在你的手机终端上执行以下命令,
mp_image
boot
/sdcard/boot.img
这将boot镜像导出到你手机的sdcard,复制该镜像至你的home目录下
为一款新设备编译android源码,需要建立相应的配置文件和makefile文件,这通常比较麻烦,如果仅仅编译recovery镜像,会容易的多。在android源码根目录下(假设已运行envsetup.sh),运行以下命令(使用适当的名称取代命令中的名称)
build/tools/device/mkvendor.sh
device_manufacturer_name
device_name
/your/path/to/the/boot.img
例如,你拥有Samsung
Galaxy
Ace这款设备,你应该使用以下这条命令
build/tools/device/mkvendor.sh
Samsung
cooper
~/boot.img
Please
note
that
Cooper
is
the
device
name.
Only
use
"~/boot.img"
if
you
have
the
boot
image
in
your
home
directory.
Or
else
please
specify
the
correct
path.
如果所有都工作正常,你将看到"Done!"这样的确认信息。mkvendor.sh脚本也将在你的android源码树中创建以下目录:
manufacturer_name/device_name
4,
现在你已经拥有相关的配置文件
在源码目录下,在terminal终端下键入以下命令
.
build/envsetup.sh
这一步将为你建立编译环境
现在使用这条命令
lunch
full_device_name-eng
这将为你的设备建立起build
system。用文件管理器或IDE打开目录,你应该拥有以下文件:
AndroidBoard.mk,
AndroidProcts.mk,
BoardConfig.mk,
device_.mk,
kernel,
system.prop,
recovery.fstab,
和
vendorsetup.sh
对你感兴趣的应该是recovery.fstab和kernel这两个文件,kernel这个文件是你之前从boot.img文件中提取出的。recovery.fstab将适用于大部分拥有
mtd,
emmc,或者其他分区的设备。如果没有,recovery.fstab将需要优化以支持加载这些点。例如
/sdcard被加载至/dev/block/mmcblk1p1,
你需要将下面这段加入到你的BoardConfig.mk文件中
/sdcard
vfat
/dev/block/mmcblk1p1
一旦recovery.fstab已经适当的装载,你可以开始下一步了
5,
现在,我们开始编译Recovery
make
-j4
recoveryimage
这个命令用于编译recovery镜像
你能使用这个命令
make
-j4
recoveryzip
用于建立一个临时的recovery.zip刷机包在你真实的设备上测试
你编译好的recovery可以在"your_source_directory/OUT/target/proct/device/recovery.img"目录下找到。而.zip刷机包可以在相同目录下的utilities文件夹下找到。
如果各项测试正常,就可以有一个成功的recovery
一旦你编译通过了recovery,通知"koush",在Github上,他就能根据你的编译文件发放官方版的CWM
Recovery,并使Rom
Manager提供相应的支持。
小贴士:
如果你想编译CWM6,使用以下命令同步jellybean分支源码
repo
init
-u
git://github.com/CyanogenMod/android.git
-b
jellybean
repo
sync
如果你改变了BoardConfig.mk文件,在编译期间运行"make
clobber",否则你做的更改就不会生效。
I. recovery是什么意思,怎么进入recovery
recovery
,用 关机键+音量+/- (依机型不同而不同,不过有些机型可能没有刷入recovery,可自行刷入。)即可进入recovery界面,在这个界面你可以直接用sd 卡上的zip格式的rom 升级或者备份你的系统,老版本的recovery
只有三个选项,但是无法备份系统,只能用update.zip这个文件名的文件升级,不能用任何文件名的zip文件升级。新版本已经多出很多选项可以供你操作。
recovery
,用 关机键+音量+/- (依机型不同而不同,不过有些机型可能没有刷入recovery,可自行刷入。)即可进入recovery界面,在这个界面你可以直接用sd 卡上的zip格式的rom 升级或者备份你的系统,老版本的recovery
只有三个选项,但是无法备份系统,只能用update.zip这个文件名的文件升级,不能用任何文件名的zip文件升级。新版本已经多出很多选项可以供你操作。
每部Android设备进入Recovery模式的方法不同。以Milestone为例:若bootloader为90.78,按住键盘的“X”键,再按电源键开机,看到moto的经典logo即可放开此2键。等待出现一个三角形图标,然后按住音量向上键+轻按拍照键,会出现四个选项。放开按键,可以用方向键选择一个选项。作用分别为重启,应用update.zip,清除所有数据至出厂状态、清除cache。
recovery模式可以做什么
您就可以通过这个恢复模式界面刷入或者备份你手机的安卓系统,由于recovery版本更新较快,老版本只有三个选项,因此无法备份系统,也只能通过一个叫做update.zip文件进入系统升级,大部分局限在三星旧机型,例如三星s5660.新版本更新后,舍弃了繁琐的操作,支持更加强大的备份还原等功能,你可以通过本站其它栏目进行了解。
recovery界面说明
1、Reboot system now——重启
2、USB-MS toggle——在recovery 模式下直接连接USB而不需要退出该模式
3、Backup/Restore——备份和还原
3-1、Nand backup——Nand 备份
3-2、Nand + ext backup——Nand 备份(系统和ext
分区一同备份)
3-3、Nand restore——还原(就是还原3-1、3-2 的最后一次备份)
3-4、BART backup——BART 备份 (包括系统和ext 分区)
3-5、BART restore——还原最后一次的BART备份
Nand 备份类似于系统的备份 而BART 则像是PC 上ghost 的备份。
Nand 备份 它不会备份ext 分区(就是第二分区 没有分区的可以不管这个)
所以你的如果app2sd 了 那么装在第二分区的程序用Nand
恢复是办不到的
BAR T则可以备份到ext 分区 用BART 恢复则可以恢复整个系统 可以使它和你备份前一模一样,
不会有一点文件信息的丢失(包括联系人、短信、图片、影音等,所以如果你装的东西比较多,那么备份和恢复会比较慢)
4、Flash zip from sdcard——从sd卡根目录的.zip ROM 刷机包刷机
5、Wipe——清除
5-1、Wipe data/factory reset——清除内存数据和缓存数据(刷机前建议清除此项)
5-2、Wipe Dalvik-cache——清除缓存数据 + ext 分区内数据(刷机前建议清除此项)
5-3、Wipe SD:ext partition——只清除ext 分区内数据(刷机前建议清除此项)
5-4、Wipe battery stats——清除电池数据(刷机前建议清除此项)
5-5、Wipe rotate settings——清除传感器内设置的数据(刷机前建议清除此项)
6、Partition sdcard——分区sd 卡
6-1、Partition SD——自动为sd 卡分区
6-2、Repair SD:ext——修复ext 分区
6-3、SD:ext2 to ext3——将ext2 分区转换为ext3
分区(推荐)
6-4、SD:ext3 to ext4——将ext3 分区转换为ext4 分区(C4
卡不推荐,C6 卡推荐)
7、Other——其它
7-1、Fix apk uid mismatches——修复apk 程序
7-2、Move apps+dalv to SD——移动程序和虚拟缓存到sd 卡(这个可不是 app2sd)
7-3、Move recovery.log to SD——移动刷机日志文件到sd 卡
(执行此操作后,sd 卡根目录会出现一个“recovery.log” 文件 即为刷机日志文件)
8、Power off——关机
中文触摸recovery介绍
1、基于CWM 5.0.2.7修改编译。
2、超大中文字体显示,美观大气。
3、完全兼容按键和触摸屏操作,轻松告别按键的束缚。
4、优化recovery功能,去掉了很少用到的功能,使操作更简单,刷机更轻松。
5、完美支持刷第三方ZIP包,可开启和关闭rom包验证功能,可视化显示,让你刷机一目了然。
6、支持系统备份和恢复,从此不再担心系统损坏。