目前一直在学习源码方面的知识,前段时间刚刚搞定了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 := 001000000

BOARD_RECOVERYIMAGE_PARTITION_SIZE := 001000000

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 019000000

BOARD_USERDATAIMAGE_PARTITION_SIZE := 0A0000000

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

声明:本文为平台用户投稿,不代表亿智蘑菇认同其观点。

0次打赏

Linux的recovery分区编译,Recovery移植之高级小白教程——Recovery的编译相关推荐

  1. uboot配置,编译,移植

    文章目录 前言 1.文件及文件夹 2.README文件 (1).配置及编译 (2).镜像格式 3.sd_fusing文件夹 4.主Makefile 总结 5.mkconfig 6.config.mk ...

  2. 小米11/红米K40/Note10系列virtualAB分区+TWRP刷入面具root完美教程

    小米红米刷机之前都需要解锁BL,解锁BL可以在ROM乐园找到对应的教程,一步步操作 都会会成功,这里不再和大家科普.推荐大家使用自己的小米账号绑定168小时进行解锁 租借账号等行为,可能会为后续救砖带 ...

  3. android分区知识,特别的recovery分区的构成

    第一部分,android的分区构成 1,分区介绍第二篇 1. bootloader   当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这中间发生了些什么呢,我们从下面这 ...

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

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

  5. Nubia Z5S(高通公司MSM8974) QHSUSB_BULK砖的方法节省模式(随着win7在恢复recovery分区案例)...

    Nubia Z5S在某些异常情况或按组合键进入QHSUSB_BULK状态, 这种模式的现象, 猜想windows(实例win7)即使在数据线, 它会出现在计算机n载,甚至会提示要格式化某些分区(这里要 ...

  6. linux ab双分区升级,AB 系统OTA升级

    A/B System 概述 Android从7.0开始,引入了新的OTA升级方式 A/B System Updates A/B系统是指设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用 ...

  7. linux给内存卡分区,Android系统手机内存卡分区详解

    这两天刷了2.2版本之后换了个内存卡,问题来了,需要把内存卡分区,下面就让把这两天分区的经验分享一下.不对的地方希望各位能指正,感谢.这里以我的国行G2作为说明,刷的是啊兴的2.2版本.参照了G1的分 ...

  8. linux 用dg分区,dg的奇怪问题终结和分区问题答疑

    今天来说几个问题,一个是对昨天<让我焦灼的四个问题>的升华,不能起博眼球的题目,技术分析给大家兜底了,你们看看有没有类似的问题. 还有几个小问题说说今天的感受和网友的问题解答. 首先是让我 ...

  9. 讯为开发板移植linux,迅为I.MX6ULL开发板移植Linux5.4内核教程

    4412上移植最新5.4内核的流程非常的简单,因为4412被Linux官方支持,那么我们来看一下怎么把官方5.4内核移植到我们的I.MX6ULL终结者开发板上. 平台:i.MX6ULL开发板 前言 本 ...

最新文章

  1. 阿里程序员每天都沮丧想离职!天天去厕所哭!求助心理医生!其他阿里员工:我们也这样!阿里究竟怎么了?...
  2. matlab optimvar
  3. echarts学习文档
  4. 让服务器apache/iis/nginx支持.apk/ipa文件下载
  5. 阿里京东带头打劫,下一个被干掉的就是你
  6. vue实现表格组件,带分页
  7. 限制CheckBoxList控件只能单选
  8. 彭博社:中企游说政府否决英伟达收购Arm
  9. [BZOJ 3173] [TJOI 2013] 最长上升子序列(splay)
  10. 软件工程师的十个“不职业”行为
  11. 如何像阿里巴巴一样高效跨企业项目协作
  12. Java容易搞错的知识点
  13. 如何获取目标软件的Docker镜像
  14. java异常体系_Java异常体系(Throwable、Error、Exception)
  15. SOA 普元EOS 工作流开发
  16. julia语言 python解释器_新一代科学计算语言Julia以及开发环境搭建教程
  17. 个人笔记-Minecraft阿里云服务器搭建
  18. 2016年腾讯实习生校园招聘-电面2
  19. Attributes as Operators
  20. android监控树莓派,树莓派定制为无线便携监控摄像头

热门文章

  1. org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart
  2. windows下快速安装nginx 并配置 开机自启动
  3. 硬件知识 网线传输原理
  4. 基于kubernetes平台的CICD持续集成
  5. mega盘要_[MEGA DEAL]支付您想要的:2018机器学习套件(99%折扣)
  6. 怎样营造更好的职场氛围?
  7. 密歇根大学计算机科学与工程,密歇根大学计算机专业有何独到之处
  8. 经典论文阅读(一)--NCF: Neural Collaborative Filtering
  9. java获取分贝_android 声音强度、分贝 大小检测 源码下载(as版)
  10. [Spring] 注入Bean属性