联想K3-Note固件编译,牛扎糖或更进一步?

本文详细介绍了作者在编译联想K3-Note的牛扎糖固件过程中遇到的问题,如RIL类、相机、GPS、录音、编码解码器和WiFi等,并分享了解决方案和源码链接。目前大部分问题已修复,录音和录像功能仍存在问题。
摘要由CSDN通过智能技术生成

大概三个月前,我开始了 K3-Note 的研发,既有趣也有挑战性。最后几个小问题现在也解决了。目前所有重大的问题都已经修复,是时候转到其他机种的研发。如果发现些什么或当新的安桌系统发布,我可能会回来继续。

当初答应过会编译不同的固件,我现在加入 SlimRom 来兑现。有了 LineagoOS 的基础,不出一小时,我便准备好 Slim 的编译。出来后,再加入了一些调整,便是目前的版本。本来想再加入 CarbonROM ,发现需要额外的修改(已经发布)。我手头上还有 DU,但 DU 团队早前已经收回在 xda 上发布的许可。而 OmniROM 还停留在 7.1.1_r14,我的1G硬盘也差不多满。每次都要删除大量临时档才可以编译,已经无法再下载其他 ROM 的代码。如果那一位有兴趣接棒,可以联络我,我可以从旁引导。唯一条件是 — 你必须分享你的成果。微笑

这个帖的目的,并不是要发布某一个固件。我是希望能通过各种问题的解决方法,去启发更多人加入 K3-Note 开发。

xda-developers上的原帖: https://forum.xda-developers.com/k3-note/orig-development/rom-custom-nougat-roms-k-3-note-t3513466

自从发布完整的内核源码后,我很高兴有几个新内核的出现。本来是以为会有很多固件出现,但悲哀的是,联想和联发科技,对定制固件开发者,好像并不友善。也不可以说是故意,是联发科技对 AOSP 代码的修改,再加上各厂商各自加入的修改,以适应各自的界面和硬体。就是提供所有源码给你,要让专有库在新版本的安桌上正常工作,也不是件容易事。这大概就是为什么使用 MTK 芯片的牛扎糖官方固件,迟迟未有出现。估计很多厂商也在等待联发科技的新源码。
当我完才手头上的工作,我决定自己尝试一下。我之前开发过 CarbonROM CR-5.1(安桌7.1.1),代码已经准备好,所以我就先用它开始。编译出来,并不困难,几次尝试,便成功编译出我的第一个 K3-Note 定制固件。心中有数,肯定还有不少问题,RILD 不启动、没有音频和GPS、照相机闪退、等等... RIL的记录是默认关闭,我以为照相机比较容易,所以首先着手解决它,很快便证明我是过分乐观。经验告诉我 CyanogenMod(CM) 通常是快一步,所以在开始时,我已经同时下载 CM 的代码。是时候转到 CM 去继续了。经过一两周,我终于编译出一个勉强可以见人的版本。自从 K3-Note 的完整内核发布后,有几位国外的朋友,经常给我私信发问。我所听到的信息是,只要找对库,照相机、音频,等等都不是问题... 对于 K3-Note 的开发,我是新丁,但经过两周的研究和尝试,我就是无法想象如如何“不是问题”。我自叹不如,也没有耐性和经验去尝试现存的所有库。因此,上载了我的 CM-14.1,让他们去尝试。悲哀的是,信箱马上安静下来,到目前为止,还没有收到对此的任何回应。
虽然,除了内核(还是被阉割的!),联想并没有提供其他源码,但也可以在网上(github那些),找到一些其他接近机种的代码。还好,所需的部分也不太多(源码当然是越多越好)。目前能找到的,都是其他机种的 LP 源码。要移植到我们的机子,并用在新两代的牛扎糖,将会是颇大的挑战。经过一番煎熬,我终于成功修复了一部分问题。本来,我是极少在初步阶段发布,但私信的查询,实在是太多。我也没有太多时间和资源,在短期内,解决所有问题。寻求他人的意见,也不是坏事。
现在,我再一次,分享一下我的经验。欢迎大家使用或分享我的代码和方法,我只要求大家 不要留一手,把你们的,也同时分享
如果条件许可,我将会编译几个不同的定制固件。不过,不会有定期的每周或每月发布。希望这帖子能成为大家的踏脚石。
在这阶段,报错并不重要。请你们不需要重复已经提及的问题。谢谢!

现存问题:

I. 缺失的符号

解决库的符号缺失,我们可以用 shim 库,并在 init 加入 LD_PRELOAD 的定义。GCC 并不关心该符号是谁提供,只要载入,其他库便可以使用。好处是,这不用修改原来的代码。缺点是,每次呼叫 dlopen(),这个 shim 库都会被呼叫或检查一次。很明显这会增加运算、影响效率。我们的 K3-Note 的专有库,放到牛扎糖上,也会出现几个缺失的符号。
非不得以,我个人是不喜欢使用 LD_PRELOAD。如果许可,我通常会在 Android.mk 加入编译标志去编译一个新档案。
CM-14.1 已经增加了一个 MTK 专用的标志 BOARD_USES_MTK_HARDWARE,定义成 true 会产生一个通用标志 MTK_HARDWARE,所有c和cpp档都能调用
我这些直接修改源码的补丁都放到 device tree,目前分成四组:
1. system_core
1.1 liblog (加入 xlog 函数 __xlog_buf_printf() 和 强制调出 RLOG, 参考下一节)
1.2 libnetutils (加入 thermal 和 RIL 所需要的几个函数)。目前还可以直接使用官方固件的库。
2. framework_av
2.1 加入一个档 mtkaudio_stubs.cpp 补充音频库缺失的符号
2.2 加入缺失的一个 CameraParameteres
2.3 在 AudioPolicy 加入 MTK 的音频属性 (Media profiles) (2016/12/17)
2.4 修复 AudioFlinger 的录音部分  (2016/12/17)
3. framework_native
3.1 加入一个兼容 MM 库的符号
4. sepolicy - 非必需
联发科技好像从来也没有认真处理过 SEPolicy。目前能见的固件,都是使用容许 (permissive)。我希望最终可以使用强制 (enforcing),因此,一开始,我都不断加入适当的 SEPolicy。

II. 无线接口层 (RIL)
工具: 要探索原因,系统记录是必需的。我在 liblog 加入了一个新的编译属性 (build.prop) "persist.ril.log" 的补丁(参考上一节的1.1)。定义成 1 将会吧 RLOG 推送到主系统记录。
1
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值