目前一直在学习源码方面的知识,前段时间刚刚搞定了recovery的移植。这方面的资料真实少之又少啊,谷歌了几天,文章也就那几篇而已,更别提国内的资料了。你让我们热爱学习的小白情何以堪。于是乎就开始动手了,编译的过程中,自己做了一些随笔的记录。把自己遇到的一些问题和解决办法都记录了下了,放在自己的笔记里了。今天整理出来,和大家共享一下。

本教程是针对有一定基础的人。如果你不会Ubuntu,不会环境的搭建。那你还是先学习一下吧。装Ubuntu各种各样的教程,网上一找一大堆。

教程所用的系统为Ubuntu12.04,示例机型为中兴N880E。源码目录为~/android/system/。

码字不容易,你懂的。。。。。。。

教程开始:

源码的同步大家可以看官方文档,教程直接从源码同步完后开始。

1、同步源码到最新,我同步的源码目录为~/android/system/,要改为自己的源码目录,下面每一步也一样

  • cd ~/android/system/

  • repo sync -j16

2、更新完成后,执行下面命令,完成环境的安装

  • ./build/envsetup.sh

输出结果:

3、下一步,make我们后面要用到的工具

  • make -j4 otatools
    输出结果:

执行完成后的输出:

会生成out目录,在/out/host/linux-x86/bin中有后面要用到的工具。
4、将/out/host/linux-x86/bin加入环境变量,变量具体位置要改成你的:
gedit ~/.bashrc
在文本最后添加:
export PATH=$PATH: ~/android/system/out/host/linux-x86/bin

保存退出,执行下面命令,让刚加的环境变量生效:

source ~/.bashrc
4、从官方包中,别人的ROM包也可以,拿出boot.img。我放到了~/android/目录
5、开始建立我们N880E的device目录:
./build/tools/device/mkvendor.sh zte n880e ~/android/boot.img
命令参考:
./build/tools/device/mkvendor.sh device_manufacturer_name device_name /your/path/to/the/boot.img
命令输出为:

此时在/device/zte/中就会有你的机型n880e了,里面有你的配置文件:AndroidBoard.mk,AndroidProducts.mk, BoardConfig.mk, device_.mk, kernel, system.prop,recovery.fstab, and vendorsetup.sh.
6、修改配置文件:
在这里很重要的一个文件就是recovery.fstab,是你手机里各个设备分区对应的挂载点,可以理解为手机的分区表。如果这个文件有错误,那么进入recovery后,会提醒分区挂载失败。
这个文件我们可以从官方的recovery.img提取出来。也可以直接解包别人编译好的recovery,得到recovery.fstab
当然,我们也可以自己动手写。目前,自己也没发现什么简洁一点的办法。我是查看刷机包中的updater-script文件中各个分区的挂载点和
cat /proc/mount
输出结果:

cat /proc/partitions
输出结果:

一个个排除定位出来的。
大家有好的办法,可以共同探讨。
这里有一个分区表比较全的recovery.fstab,大家可以按照自己手机的分区表修改。
7、开始编译,执行命令:
./build/envsetup.sh && lunch full_n880e-eng
(把n880e替换为自己的机型)
输出结果:

下一步命令,编译开始:
make -j4 recoveryimage
最后成功时输出结果:

输出的目录为:out/target/product/n8880e/recovery.img文件,就是我们要的。

NOTE:
1、 编译时间:实体机,一两分钟的样子(i3-380、2GBDDR3)
2、 异常处理:(都是自己编译过程中遇到的笔录,非官方)
错误1:
执行
./build/envsetup.sh
命令后,提示某些设备文件不存在。
这是自己当初在CM7源码下编译出现的,因为自己没有把所有的设备的源码同步下来,一些设备自己在~/android/system/.repo/manifest.xml中用注释掉了,所以同步完源码后要修改vendor/cyanogen/products/AndroidProducts.mk 文件,把没有同步的设备删除掉。重新执行命令就行了。
错误2:
在编译的最后,提示出错 “Boot.img is too large”,自己当时的解决办法是修改BoardConfig.mk:
# fix this up by examining /proc/mtd on a running device
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x01000000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x01000000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x19000000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0xA0000000
BOARD_FLASH_BLOCK_SIZE := 131072
将后面的十六进制改为自己手机分区的大小,要把兆转换为KB,再转换为十六进制,然后替换0x后面的数字(0x表示十六进制)。
另一种解决办法,就在下面几篇参考文档中刚看的,未实践:
打开源码目录中的Build/Core/definitions.mk,将1688 – 1694行替换为:
# if [ "$total" -gt "$maxsize" ]; then \
# echo “error: $printname too large ($total > [$(2) - $reserve])”; \
# false; \
#el
if [ "$total" -gt $((maxsize - 32768)) ]; then \
echo “WARNING: $printname approaching size limit ($total now; limit $maxsize)”; \
fi \
然后保存。重新编译即可。
错误3:
执行7中的第一个命令时,提示lunch未安装:

解决办法:
执行
source build/envsetup.sh
再执行上面命令就OK 了。

更进一步,自己也在学习中,还未实践的:
recovery_ui.c 这个文件里面是手机各按键对应的按键值,这样写入之后才能正确选择按键。对按键的修改自己找了一些资料还在进一步学习中。
参考资料:
Porting CWM to other devices:

http://www.acsyndicate.net/how-to-porting-cwm-to-other-devices-windows/

Creating a custom ClockWorkMod (CWM)Recovery image:

http://www.twobitcoder.com/?p=158

Porting Clockwork Recovery to ourGarminfone:

http://mygarminfone.blogspot.com/2011/05/porting-clockwork-recovery-to-our.html

Porting Clockwork Recovery to New Devices:

http://www.koushikdutta.com/2010/10/porting-clockwork-recovery-to-new.html

移植recovery相关推荐

  1. Android系统之Recovery移植教程 【转】

    本文转载自:http://luckytcl.blog.163.com/blog/static/14258648320130165626644/ recovery的移植,这方面的资料真实少之又少啊,谷歌 ...

  2. Linux的recovery分区编译,Recovery移植之高级小白教程——Recovery的编译

    目前一直在学习源码方面的知识,前段时间刚刚搞定了recovery的移植.这方面的资料真实少之又少啊,谷歌了几天,文章也就那几篇而已,更别提国内的资料了.你让我们热爱学习的小白情何以堪.于是乎就开始动手 ...

  3. android系统移植培训,Android系统之Recovery移植教程 【转】

    recovery的移植,这方面的资料真实少之又少啊,谷歌了几天,文章也就那几篇而已,更别提国内的资料了. 你让我们热爱学习的小白情何以堪.于是乎就开始动手了,编译的过程中,自己做了一些随笔的记录. 把 ...

  4. 个人移植的酷派大神F2移动定制版Recovery

    酷派真是坑,官方出个移动版(硬件P2),又来个移动定制版(硬件P0),两个版本的硬件还不同,导致移动定制版刷了移动版的Recovery后进不了Recovery. 个人移植了叮咚Recovery,仅适用 ...

  5. recovery移植,转1

    植recovery 目前一直在学习源码方面的知识,前段时间刚刚搞定了recovery的移植.这方面的资料真实少之又少啊,谷歌了几天,文章也就那几篇而已,更别提国内的资料了.你让我们热爱学习的小白情何以 ...

  6. Android recovery支持adb shell

    Android recovery支持adb shell 最近开发过程注意到recovery不支持adb shell,为了便于调试方便,决定增加此功能. 刚开始我们采用的是user版本系统,进入reco ...

  7. OTA和Recovery系统升级流程介绍

    本文介绍了Android原生OTA和Recovery升级过程步骤. 进入升级 - 1.1 正常启动和进入Recovery的区别 下面给出了升级流程的简单示意图.    上图中的上下两个部分,上面一部分 ...

  8. Android ROM定制 入门到精通(含改机、移植、破解网络层、root原理、植入hook框架,反安全监测等)

    最近在定制一款ROM,拉取谷歌源码,解包.精简.修改.打包.想要实现MIUI一样的效果和国人常用的功能设置和手势. 在这个过程中遇到了很多疑难问题,也发现公司刚招来的这些小孩基础太差,而且他们根本不知 ...

  9. 移植U-Boot思路和实践 | 基于RK3399

    0. 背景介绍 我们手里这块RK3399开发板出厂时带的是2017.09版本的U-Boot. U-Boot 2017.09 (Sep 26 2021 - 08:53:15 +0000)Model: F ...

最新文章

  1. oracle创建数据库总结,oracle创建数据库和用户方法总结
  2. 如何使用Sublime Text 2重新格式化HTML代码?
  3. python人头识别_python+opencv实现人头检测
  4. 计算机无法搜索本地文件,电脑本地磁盘无法搜索文件。怎么处理?
  5. Nutch是个不错的选择
  6. 我使用过的Linux命令之hwclock - 查询和设置硬件时钟
  7. GetLocalTime
  8. Cocos2D研究院之CCNode详解(三)
  9. Hement:MVP架构设计(一)
  10. live writer 中注册博客园需要的设置
  11. Spring学习(一)Spring简介、SpringIOC
  12. CentOS 6.4 php环境配置以及安装wordpress
  13. 【Python】多线程下载韩寒博客文章
  14. 串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理
  15. 64位 atol c linux_Linux下c++中的atoi、atol、atoll、atof函数调用实例
  16. 高手进阶,终极内存技术指南——完整/进阶版 I
  17. java的23种设计模式法则(权威版)
  18. 这样充满青春活力的微信公众号图文排版,你见过吗?
  19. 第二部分 太阳能预测(半经验模型)
  20. 域名注册流程:如何选择购买合适的域名?

热门文章

  1. 6-5 从键盘读入一串字符后去除首尾字符后的字符串按降序排序 (10 分)请编写函数Sort函数,将字符串中除首、尾字符外的其余字符按降序排列。函数接口定义:void Sort( char *
  2. VLOOKUP 函数出现 #N/A 错误的 4 种情况(附解决方法)
  3. SAP案例教程FIAR应收会计前台操作
  4. 番禺:思科智慧城剑指千亿级
  5. 正弦余弦怎么用计算机计算公式,Excel 的正弦、余弦怎么编制计算公式?
  6. AI用于COVID-19的药物发现和疫苗开发
  7. Tiny Player for Mac(小而美的音乐播放器)
  8. 第十一讲:独立成分分析(Independent Components Analysis )
  9. 函数中微分与增量的区别与联系
  10. uV胶点胶机器人_UV胶点胶加工所用UV胶水的特点及优势