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系统移植培训,Android系统之Recovery移植教程 【转】相关推荐

  1. Android系统的分区及img文件、移植烧写过程

    一.引言 本章介绍Android的几个分区,已经编译后生成的.img镜像文件,对于大家移植整个Android有一定的帮助.本人也首次接触Android,有不正确的地方,欢迎指正! 二.Android的 ...

  2. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)...

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  3. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  4. 在ubuntu系统下cocos2dx移植到android平台

    1.序 在网络上搜索cocos2dx移植到android的文章有很多, 本文也是参考根据网络上的文章移植成功的, 下面将本人的移植过程以及移植过程中遇到的问题记录下来以供今后参考和即将移植的新人一个参 ...

  5. 车牌识别,移植到android系统

    首先吐槽,搞了1天半,终于弄好了.自己android开发是小白,之前一门心思想在jni目录下读取xml文件,事实证明无论如何都不行的.好吧,后来发现资源文件应该都放在assets目录下,可是文件会被压 ...

  6. 双系统android,如何在Android手机上实现双系统

    1.必要工具和条件 分区软件.读卡器. 官方boot.img .boot解包打包工具.手机装了第三方recovery 2.原理 实现原理就是把sd卡分成4个区:1个正常存取文件区和3个系统区一样格式的 ...

  7. android 表情识别,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  8. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-7.App Widgets)...

    第7章 App Widgets App Widgets是一个应用程序的微型视图,可以嵌入到其他应用程序(如主屏幕)并且能够定期更新.你可以发布一个应用程序的App Widget,而这些视图称为窗口的用 ...

  9. android jmf,基于JMF与Android的无线视频监控系统的设计与实现

    摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...

最新文章

  1. Python3.5源码分析-sys模块及site模块导入
  2. Android Studio2.2.3 通过JNI引用ffmpeg库小结
  3. 网页的一般布局(标题和脚注100%,内容宽度固定宽度px)
  4. 坐标系旋转变换公式图解
  5. python网页保存为图片_使用Python保存网页上的图片或者保存页面为截图
  6. 为什么闲鱼不能搜索python_Python 分析后告诉你闲鱼上哪些商品抢手?
  7. 怎么修改db2服务器名字,服务器创建db2数据库实例名
  8. Xampp 配置出现403无法访问
  9. linux mount 原文件夹,window文件夹mount挂载Linux
  10. 计算机口令管理,农村信用社联合社计算机账户与口令管理办法
  11. java多线程编程--模拟龟兔赛跑过程
  12. [生存志] 第72节 夫差许越称臣
  13. 二、循环神经网络(RNN与LSTM)
  14. mac pycharm如何打开setting
  15. 个人学习(解决)练习ssm框架遇到的问题No qualifying bean of type ‘service.BookTypeService‘ available:
  16. WHQL认证资讯:关于Windows硬件开发者仪表盘
  17. ie的主页被修改了,改不过来怎么办??
  18. PTA“值班安排”的题没有思路?速来,这里有附带详细注释的代码!
  19. 【美股接口】新浪港股、美股行情接口
  20. Mysql中的回表查询

热门文章

  1. 2. 认识O(logN)的排序
  2. 首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?
  3. KY59 神奇的口袋【和某题相同原理!!】
  4. mysql数据库时差
  5. Life - 生活杂记
  6. java编写周易demo
  7. [经验分享]TL431的应用及其封装乱象
  8. stm32mp157和imx6ull比较,开发板选哪个好?一文看懂!
  9. 学生作品 | Indigo Design Awards获奖作品,可乐瓶的二次利用
  10. MODIS数据所有产品介绍与下载地址