红米Note7 Pro使用LineageOS 16问题备忘录

红米Note7 Pro使用LineageOS 16过程中遇到了若干问题,经过摸索后问题已解决,这里给自己备忘一下,同时也能方便其他同学少走弯路或一起讨论更好的解决方法。

1. TWRP无法启动
状态:已解决
现象:解除Bootloader锁后,使用fastboot刷入官方TWRP后,TWRP启动卡住。
原因:MIUI系统的userdata分区(包括/data和/sdcard)默认使用了加密的f2fs,官方的TWRP目前不能直接挂载加密的/data和/sdcard,导致recovery系统初始化失败。
修复:TWRP启动卡住时,使用adb shell访问设备,使用命令清除userdata分区并重启:

dd if=/dev/zero of=/dev/block/bootdevice/by-name/userdata bs=1m count=10

2. LineageOS无法启动
状态:已解决
现象:刷入LineageOS后,首次启动卡在系统启动动画界面。
原因:LineageOS(device violet)对userdata分区的文件系统默认为f2fs,并且启用了加密,不匹配导致了/data无法读写。
修复:修复方案可能有两种:
1. 使用TWRP重建userdata分区的文件系统为f2fs并且启用加密。
2. 使用TWRP重建userdata分区为f2fs但关闭加密,修改LineageOS的/vendor/etc/fstab.qcom同样关闭加密。

方案1没有验证过,我直接采用了方案2,具体步骤为:
1. TWRP中“清除数据”,“高级选项”,“变更文件系统”,将data分区初始化为f2fs。
2. TWRP中挂载vendor分区,修改/vendor/etc/fstab.qcom的userdata挂载配置。

-/dev/block/bootdevice/by-name/userdata                  /data                    f2fs    noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier    latemount,wait,check,fileencryption=ice,wrappedkey,reservedsize=128M
+/dev/block/bootdevice/by-name/userdata                  /data                    f2fs    noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier    latemount,wait,check,wrappedkey,reservedsize=128M

3. LineageOS、TWRP相互干扰启动
状态:已解决
现象:刷入LineageOS后TWRP无法启动
原因:violet设备将内核的devicetree配置放在独立的分区dtbo中,官方TWRP的内核是与MIUI同源的,而与LineageOS不同,所以在刷入LineageOS的dtbo.img后,TWRP内核就没有匹配的devicetree配置。
修复:使用官方TWRP时,要先刷入MIUI线刷包中的dtbo.img;使用LineageOS系统时,要先刷入LineageOS线刷包中的dtbo.img。

4. LineageOS系统普通App调用su(root)失败
状态:已解决
现象:刷入su addon后,在普通App(例如terminal)中调用su命令有段错误。
原因:su命令中有map操作,但在SELinux的配置中未允许普通App(untrusted_app)的map访问。
修复:解决该问题需要修改LineageOS的源代码,详见补丁,争取推到上游社区中。

5. 听筒输出的通话中,对方听到回音
状态:已解决
现象:在使用听筒输出声音的通话中,对方有明显的回音干扰。
原因:ro.vendor.audio.sdk.fluencetype配置为none。
修复:解决该问题有两种方案:1. 直接编辑/vendor中的build.prop文件。2. 修改LineageOS源代码。详见补丁

6. VoLTE视频无法连接
状态:已解决
现象:使用VoLTE通话过程中,视频信道无法正常建立连接。
原因:LineageOS默认的apns-conf.xml中不包含中国三大运营商的ims类型APN配置。
修复:手工创建一个新的APN,名称为IMS,APN为:ims,APN类型为:ims。

修复上述问题的预编译版
下载:http://hev.cc/sftp/lineage/

boot.img     // 内核
dtbo.img     // DeviceTree
recovery.img // TWRP (已适配LineageOS的dtbo.img)
system.img   // 系统
vbmeta.img   // Verify-Boot元数据
vendor.img   // Vendor

安装方法:
1. 使用fastboot刷入对应分区。
2. 启动至recovery,清除cache,清除或重建Data分区,文件系统格式为f2fs。

Over!