本文转载自:http://luckytcl.blog.163.com/blog/static/14258648320130165626644/

recovery的移植,这方面的资料真实少之又少啊,谷歌了几天,文章也就那几篇而已,更别提国内的资料了。
你让我们热爱学习的小白情何以堪。于是乎就开始动手了,编译的过程中,自己做了一些随笔的记录。
把自己遇到的一些问题和解决办法都记录了下了,放在自己的笔记里了。今天整理出来,和大家共享一下。
 
   本教程是针对有一定基础的人。如果你不会Ubuntu,不会环境的搭建。那你还是先学习一下吧。
装Ubuntu各种各样的教程,网上一找一大堆。
 
   教程所用的系统为Ubuntu12.04,示例机型为中兴N880E。源码目录为~/android/system/。
 
  码字不容易,你懂的。。。。。。。
 
 
 
源码的同步大家可以看官方文档,教程直接从源码同步完后开始。
 
1、同步源码到最新,我同步的源码目录为~/android/system/,要改为自己的源码目录,下面每一步也一样。
 
1.cd ~/android/system/
2.repo sync -j16
 
2、更新完成后,执行下面命令,完成环境的安装
 
1../build/envsetup.sh
输出结果:
 

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

 
1.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
5、从官方包中,别人的ROM包也可以,拿出boot.img。我放到了~/android/目录。
 
6、开始建立我们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.

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

一个个排除定位出来的。

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

下一步命令,编译开始:

make -j4 recoveryimage
最后成功时输出结果:
输出的目录为:out/target/product/n8880e/recovery.img文件,就是我们要的。
 
注意事项:
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 这个文件里面是手机各按键对应的按键值,这样写入之后才能正确选择按键。

对按键的修改根据不同的机型具体分析吧。

Android系统之Recovery移植教程 【转】的更多相关文章

  1. Android系统Recovery工作原理之使用update.zip升级过程分析(一)

    通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...

  2. Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)

    目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本 ...

  3. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7399822 这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过 ...

  4. Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465603       Android系统Recovery工作原理之使用update.zip ...

  5. Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)

    Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...

  6. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

  7. 浅谈Android系统移植、Linux设备驱动

    一.Android系统架构 第一层:Linux内核 包括驱动程序,管理内存.进程.电源等资源的程序 第二层:C/C++代码库 包括Linux的.so文件以及嵌入到APK程序中的NDK代码 第三层:An ...

  8. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  9. 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器

    作者:唐老师,华清远见嵌入式学院讲师. 1.   编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...

随机推荐

  1. 5.29clone项目地址

  2. amcharts简单demo(仪表盘)

    最近项目中展示数据有用到amcharts,一个小demo例子. <script src="<%=basePath%>amchart/amcharts.js" ty ...

  3. 【SQL】数值型函数

    1. CEIL 语法:CEIL(n) 作用:取大于等于数值n的最小整数 SQL> select ceil(9.1),ceil(9.9),ceil(9) from dual; CEIL(9.1)  ...

  4. 几段Python小程序

    程序片段1 第一个需求是需要生成一些随机的时间,例如需要随机生成从一年前到现在的一些时间,刚开始折腾了半天,最后的代码如下: from datetime import timedelta from d ...

  5. dubbo之线程模型

    事件处理线程说明 如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识,则直接在IO线程上处理更快,因为减少了线程池调度. 但如果事件处理逻辑较慢,或者需要发起新的IO请求 ...

  6. C# 遍历文本框

    #region 文本框指定位置加入回车符 private void button1_Click(object sender, EventArgs e) { #region // 查询首字母位置 //s ...

  7. phtoshop CC2018破解简单过程

    1.下载adobe photoshop cc 2018(可以用360安全卫士下载)-->并安装2.下载破解补丁,破解补丁下载地址:http://www.xue51.com/soft/1377.h ...

  8. [转载]Linux内存高,触发oom-killer问题解决

    最近遇到两起Linux的内存问题,其一是触发了oom-killer导致系统挂 首先确认该系统的版本是32位 #uname -a Linux alarm 2.6.9-67.ELsmp #1 SMP We ...

  9. js对比for、forEach、map遍历数组速度

    function a() { var arr = new Array(1000000); for(var i = 0; i < arr.length;i ++) { arr[i] = i; } ...

  10. Docker学习总结(16)——当当网Docker应用实践

    随着Docker成为当下热门的容器技术,各大公司以及中小团队都开始选择Docker来进行应用部署,从原有部署方式迁移到Docker方式过程中难免会遇到各种问题,本次分享主要介绍当当网个性化推荐组应用D ...