为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决
小米4是Cyanogenmod官方支持的Device,所以编译无需我们做Device specific适配,我们只需要提取代码(Android 与Kernel),获取proprietary binary files即可编译。
小米4以及小米3的设备名字都是cancro,CM对于这两款设备的WIki位于:
https://wiki.cyanogenmod.org/w/Build_for_cancro
步骤与错误解决
1. breakfast VS proprietary files
先获取proprietary binary files然后再breakfast,否则会出现错误。
2. 提取proprietary file的错误解决
提取有两种方法:
一种是手机刷入cm12.1系统后使用adb pull获取
一种是直接解压cm编译的ota包,然后从里面的system.new.dat中获取
其中第二种方法更为方便,但是我们需要将system.new.dat转换成system.img
sparse
new.dat与默认的system.img的区别
主要在于一个是为了减小size而对内部中的内容进行了压缩,而system.img则没有压缩。
new.dat与默认的system.img的转换方法
解压OTA
因为是zip包,在linux下面我们使用unzip来完成
unzip -d cm12.1 cm-12.1-20151117-SNAPSHOT-YOG7DAO1K6-cancro.zip
Archive: cm-12.1-20151117-SNAPSHOT-YOG7DAO1K6-cancro.zip
signed by SignApkextracting: cm12.1/system.patch.dat inflating: cm12.1/META-INF/com/android/metadata inflating: cm12.1/META-INF/com/google/android/update-binary inflating: cm12.1/META-INF/com/google/android/updater-script inflating: cm12.1/META-INF/org/cyanogenmod/releasekey inflating: cm12.1/boot.img inflating: cm12.1/file_contexts inflating: cm12.1/install/bin/backuptool.functions inflating: cm12.1/install/bin/backuptool.sh inflating: cm12.1/install/bin/nfcchecker.sh inflating: cm12.1/install/bin/otasigcheck.sh inflating: cm12.1/install/bin/resize2fs_static inflating: cm12.1/system.new.dat inflating: cm12.1/system.transfer.list inflating: cm12.1/system/build.prop inflating: cm12.1/META-INF/com/android/otacert inflating: cm12.1/META-INF/MANIFEST.MF inflating: cm12.1/META-INF/CERT.SF inflating: cm12.1/META-INF/CERT.RSA
转换
使用python脚本sdat2img来完成
sdat2img.py system.transfer.list system.new.dat system.img
Skipping command erase
Copying 32767 blocks into position 0...
Copying 2 blocks into position 32768...
Copying 2 blocks into position 32809...
Copying 32212 blocks into position 33323...
Copying 2 blocks into position 65536...
Copying 20457 blocks into position 66050...
Copying 2 blocks into position 98304...
Copying 2 blocks into position 98345...
Copying 32212 blocks into position 98859...
Copying 2 blocks into position 131072...Done! Output image: /home/hexiongjun/android/CM_XiaoMi4/cm12.1/system.img
这样就有了我们需要的system.img文件了
mount到system目录
sudo mount -t ext4 system.img system
拷贝Proprietary Files
脚本extract-files.sh本身就有从local directory拷贝的功能,但是实际上我们运行的时候会有错误
./extract-files.sh -d /home/hexiongjun/android/CM_XiaoMi4/cm12.1/system
cp: cannot stat ‘/home/hexiongjun/android/CM_XiaoMi4/cm12.1/system/system/vendor/lib/libthermalioctl.so’: No such file or directory
提示说找不到某某某文件,我们可以find一下
$ find -name libthermalioctl.so
./system/vendor/lib/libthermalioctl.so
认真细看一下就知道其实是路径问题
因此我们更改前面使用的方式
]$ ./extract-files.sh -d /home/hexiongjun/android/CM_XiaoMi4/cm12.1/
cp: cannot stat ‘/home/hexiongjun/android/CM_XiaoMi4/cm12.1//system/vendor/lib/rfsa/adsp/libscveT2T_skel.so’: No such file or directory
可以看到前面的已经找到了,但是还是有其他文件找不到,同样的find之后我们知道也是路径问题,因此我们可以直接更改device-proprietary-files.txt文件来修正这个问题,也可以手动拷贝。
当然还有更为容易解决的方式
查看脚本,我们可以知道它的路径都是按照实机来的,而实机中像vendor这种目录是位于/vendor中,且这个vendor是/system/vendor的soft link,同样的还有etc等目录:
shell@flo:/ $ ll /
drwxr-xr-x root root 2016-05-31 15:30 acct
drwxrwx--- system cache 2016-04-18 22:59 cache
lrwxrwxrwx root root 1969-12-31 13:00 charger -> /sbin/healthd
dr-x------ root root 2016-05-31 15:30 config
lrwxrwxrwx root root 2016-05-31 15:30 d -> /sys/kernel/debug
drwxrwx--x system system 2016-05-31 15:30 data
-rw-r--r-- root root 297 1969-12-31 13:00 default.prop
drwxr-xr-x root root 2016-05-31 15:30 dev
lrwxrwxrwx root root 2016-05-31 15:30 etc -> /system/etc
-rw-r--r-- root root 19494 1969-12-31 13:00 file_contexts
drwxrwx--x system system 2016-05-31 15:30 firmware
-rw-r----- root root 3464 1969-12-31 13:00 fstab.flo
-rwxr-x--- root root 422740 1969-12-31 13:00 init
-rwxr-x--- root root 8288 1969-12-31 13:00 init.cm.rc
-rwxr-x--- root root 1075 1969-12-31 13:00 init.environ.rc
-rwxr-x--- root root 162 1969-12-31 13:00 init.flo.diag.rc
-rwxr-x--- root root 6831 1969-12-31 13:00 init.flo.power.rc
-rwxr-x--- root root 13544 1969-12-31 13:00 init.flo.rc
-rwxr-x--- root root 7640 1969-12-31 13:00 init.flo.usb.rc
-rwxr-x--- root root 22264 1969-12-31 13:00 init.rc
-rwxr-x--- root root 318 1969-12-31 13:00 init.superuser.rc
-rwxr-x--- root root 1927 1969-12-31 13:00 init.trace.rc
-rwxr-x--- root root 3885 1969-12-31 13:00 init.usb.rc
-rwxr-x--- root root 301 1969-12-31 13:00 init.zygote32.rc
drwxrwxr-x root system 2016-05-31 15:30 mnt
lstat '//persist' failed: Permission denied
dr-xr-xr-x root root 1969-12-31 13:00 proc
-rw-r--r-- root root 3151 1969-12-31 13:00 property_contexts
drwxr-xr-x root root 1969-12-31 13:00 res
drwx------ root root 2016-03-20 19:39 root
drwxr-x--- root root 1969-12-31 13:00 sbin
lrwxrwxrwx root root 2016-05-31 15:30 sdcard -> /storage/emulated/legacy
-rw-r--r-- root root 725 1969-12-31 13:00 seapp_contexts
-rw-r--r-- root root 61 1969-12-31 13:00 selinux_version
-rw-r--r-- root root 140844 1969-12-31 13:00 sepolicy
-rw-r--r-- root root 10574 1969-12-31 13:00 service_contexts
drwxr-x--x root sdcard_r 2016-05-31 15:30 storage
dr-xr-xr-x root root 2016-05-31 15:30 sys
drwxr-xr-x root root 2016-05-24 16:50 system
lrwxrwxrwx root root 2016-05-31 15:30 tombstones -> /data/tombstones
-rw-r--r-- root root 2819 1969-12-31 13:00 ueventd.flo.rc
-rw-r--r-- root root 7514 1969-12-31 13:00 ueventd.rc
lrwxrwxrwx root root 2016-05-31 15:30 vendor -> /system/vendor
因此我们可以手动建立软链接来快速解决这个问题:
ln -s system/etc etc
ln -s system/vendor/ vendor
但是最终我们发现有一些文件就是不存在与cm的OTA zip包中,这个时候我们还是需要从设备中pull上来。
同时还需要注意的是一些bin文件本身对others没有读权限,因此可以在adb shell中使用find找到,却无法pull上来,这个时候就需要将adb切成root:
adb root
然后再执行脚本。
同时因为脚本中配置了
set -e
因此一些文件不在/system/lib等目录不会再到/system/vendor/lib中去查找了,因此,我们需要将这行去掉。
编译错误
因为前面二进制文件的路径不正确,编译的时候会有类似下面的错误:
make: *** No rule to make target `vendor/xiaomi/cancro/proprietary/app/qcrilmsgtunnel.apk', needed by `/home/hexiongjun/android/cm13.1/out/target/product/cancro/obj/APPS/qcrilmsgtunnel_intermediates/package.apk'. Stop.
make: *** Waiting for unfinished jobs....
make: Leaving directory `/home/hexiongjun/android/cm13.1'#### make failed to build some targets (02:11 (mm:ss)) ####
对此我们需要手动mv对应文件到正确位置才能继续编译。
为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决相关推荐
- 小米电视3 android,小米3代/小米电视今日发布!-小米3代,5寸,1080p,Tegra 4,骁龙800,小米电视,47寸, ——快科技(驱动之家旗下媒体)--科技改变未来...
传了许久的小米3代将会在今天下午两点正式跟大家见面. 从目前曝光的情况来看,小米3代的外形十分方正,并且机身有多个色彩版本,外观设计与诺基亚Lumia系列风格很相似,其会有两个版本,而它们配备的都是5 ...
- android o 小米note 3,小米 Note 3 MIUI 10 安卓 8.0 内测开启
IT 之家6 月 25 日消息 今天,小米 Note 3 手机终于迎来了 MIUI 10 & Android O 开发版内测,相关用户现在起可以进行报名参与内测.当然,如果拥有内测 F 码的话 ...
- 小米8对一加6打开软件速度测试,买一加6还是小米8?小米8和一加6区别对比
买一加6还是小米8?据相关媒体报道,继一加6后,小米前些天也推出了同样搭载骁龙845处理器的最新旗舰--"小米8".值得一提的是,小米8还被官方称为"8周年的代表之作&q ...
- 小米 android 8,小米华为们谁最良心?10大手机厂商安卓8.0升级情况盘点
3月8日,谷歌放出了首个安卓9.0开发者预览版的固件包,不出意外的话,它的正式版会在今年正式亮相. 但对广大安卓用户来说,想要立刻用上最新系统并非易事.目前来说,安卓碎片化问题依然严重,我们不妨现实点 ...
- android miui ios,从iOS到Android——小米11及小米生态实际使用体验
从iOS到Android--小米11及小米生态实际使用体验 2021-02-22 15:29:56 93点赞 155收藏 131评论 创作立场声明:文中的设备均为自购,无任何特定立场. 2021年2月 ...
- 电脑pro,大师屏幕,小米归来!小米笔记本Pro 15 OLED首发评测
2016 年 7 月,小米正式杀入笔记本市场,推出了两款轻薄本.在当时主流的轻薄本市场都用着低色域 TN 屏和塑料机身的情况下,小米用高素质的屏幕和金属 CNC 一体化机身搅动了整个市场.遗憾的是,小 ...
- mix2s 升级android p,小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗?...
原标题:小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗? 今天上午,小米推送了小米MIX2S的稳定版更新,版本号为MIUI V10.0.4.0,体积为2GB,这一次更新将系统底层更 ...
- 小米6android版本更新,小米6正式迎来了安卓9.0稳定版升级,一代神机继续创造辉煌...
原标题:小米6正式迎来了安卓9.0稳定版升级,一代神机继续创造辉煌 此前,小米6已经经过了好几个月的Android P(安卓9.0)开发版内测,很多已经是开发版的小伙伴早已经升级体验了,总得来,本次由 ...
- 小米6报价参数_对小米11系列你了解多少,你更看好小米11还是小米11pro
大家好,这里是回收老司机. 伴随着12月初骁龙888处理器发布会之后,各家手机厂商新品都想抢占商机.但最终新旗舰骁龙888的处理器首发毫无悬念的被小米拿下,小米11系列的渲染图也在数码圈评论吐槽,有人 ...
- 小米5s升级Android8,小米5s、小米5s Plus升级8.0提前,好消息!
小米MIUI早前发布公告表示:小米5s升级 Android 8.0 遇到技术难点,为保证稳定性,预计升级时间为11月.如今,最新消息显示,小米5s.小米5s Plus将提前升级Android 8.0. ...
最新文章
- 从websphere6.1迁移到weblogic10.3的问题总结--转
- cache性能分析实验 北邮_北邮人又获奖啦快来点赞!
- 让云×××—微软虚拟化远程直播
- bzoj1679[Usaco2005 Jan]Moo Volume 牛的呼声*
- 做.NET开发多年,公司要我转Java...
- C++:函数指针是个什么玩意儿?
- pandas使用dataframe读写mysql数据库
- 独立完成一个城市选择组件(阿里前端题目,内附知识点、思路)
- android studio 2.2.3 ndk 添加 C 和 C++ 代码
- Springboot之Thymeleaf 表单提交
- postgresql学习笔记(五)备份与恢复
- 动态规划实战15 leetcode-256. Paint House
- .NET中XML 注释 SandCastle 帮助文件.hhp 使用HTML Help Workshop生成CHM文件
- php分界符,c# – 如何使用openxml添加分节符下一页?
- python调用scp上传目录_python执行scp命令拷贝文件及文件夹到远程主机的目录方法...
- 反催收凉透 马上、平安普惠、招联、中银消费金融等联手打击
- Windows把桌面改到D盘 Win11怎么把桌面文件路径改到D盘
- oracle行转列实践
- 微信小游戏开发能否突破4M限制
- MySQL中如何定义一个自己写的函数