android - lsetfilecon失败:传输端点上不支持该操作

标签 android c++ c recovery

我一直在尝试将Android 8 OTA更新并应用到运行Android 6的设备上,并且在OTA更新期间,我还试图设置SELinux安全上下文。我的Android 6构建没有任何SELinux策略。
如果我将Android 8完整更新(USB)应用于设备,则SELinux策略设置正确。
如果我通过A6应用Android 8移民更新(USB),则SELinux策略设置正确。
如果我在A6上应用Android 8 OTA,则会收到以下错误。
因此,这是“恢复”日志中的原始错误输出。

   :::
Extracted file "/system/vendor/lib/lib_H263_dec_v2_arm11_elinux.so"

Extracted 1678 file(s)
created [/system/priv-app/DefaultContainerService/lib]
created [/system/priv-app/DefaultContainerService/lib/arm]
created [/system/app/LatinIME/lib]
created [/system/app/LatinIME/lib/arm]
ApplyParsedPerms: lsetfilecon of /system/lost+found to u:object_r:system_file:s0 failed: Operation not supported on transport endpoint

ApplyParsedPerms: lsetfilecon of /system/lost+found to u:object_r:system_file:s0 failed: Operation not supported on transport endpointscript aborted: set_metadata_recursive: some changes failed
set_metadata_recursive: some changes failedE:unknown command [log]
E:unknown command [log]
E:Error in /ota/update.zip
(Status 7)
Installation aborted.
I:Saving locale "en_US"
Rebooting...
/ # SysRq : Emergency Remount R/O
reboot: Restarting system
我目前的理解是,USB更新使用软件包随附的恢复镜像。但是对于OTA更新,使用的是Android 6的“恢复”功能,因此发生了上述情况。如果我错了,请纠正我。
因此,我对上述错误有一些疑问:
  • 为什么 lsetfileconfig 失败? (此处的文档:https://man7.org/linux/man-pages/man3/lsetfilecon.3.html)
  • Android 6中的更新程序脚本反射(reflect)了Android8。Android8还在中使用 lsetfileconfig ApplyParsedPerms ,除了“恢复”图像不同之外,我还缺少什么?
  • 我可以保存这种情况吗,还是必须在OTA更新开始时用Android 8替换Android 6的“恢复”?
  • 最佳答案

    为了完整起见,我将回答我自己的问题。
    我并没有解决问题的方法,但是从总体上看,Android OTA更新依赖于设备本身的“恢复”镜像。在我的情况下,恢复镜像来自Android 6,我试图在其之上应用Android 8更新。在使用SELinux标签更新 / system 分区时,这导致了一些不兼容(我仍然无法解释)。
    我想出的解决方法是使用两步更新过程。这不是一个最初的想法,并且Google已经提供了代码(我为此目的对其进行了修改)。但是通过两步OTA,我先更新了 / boot / recovery 分区,然后重新引导回恢复。 OTA会重新开始,但是这次它正在使用Android 8恢复镜像,并通过更新 / system 分区来完成。该设备现已成功升级到Android 8。

    关于android - lsetfilecon失败:传输端点上不支持该操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62513104/

    相关文章:

    c++ - OpenCv findcontours() 轮廓太多

    c - 如何为 chroot 项目设置 ide

    c - 如何在 C 中获得多个 scanf 或 getchar 提示?

    Android Google map v2 删除自定义图 block 上的标签

    android - 从 Beacons 获取位置信息时如何使用 here api 设置 Indoorlocation

    android - 如何从第二屏回到第一屏

    c - 访问共享进程内存时出现段错误(核心转储)

    android - 由于 TypedArray 中缺少属性,导致 AppCompatButton 类膨胀时出错

    c++ - C++/CX 是否检测和解决对象循环?

    c++ - 无法在 QAbstractItemModel 的 dataChanged 信号槽中获取发送者对象