BLOB的旧设备驱动程序将不适用于更新版本的Android

2020-08-04 10:52:13 来源: INeng财经

随着Android Oreo和许多设备的发布,例如小米Redmi Note 3,谷歌Nexus 5和其他非正式接收的文件,很可能会奇怪为什么开发人员在移植基于Android开放源代码项目(AOSP)的ROM时,相同的功能(通常是相机)会被破坏。您可能已经看过ROM的XDA论坛线程,并且上面列出了一长串损坏的功能。“什么有效”之后是一系列工作功能,然后向下到标志性的“什么不起作用?你告诉我!” 这是我们论坛上的两个受欢迎的限制,实际上已经成为Reddit和Twitter等地方的模因。

为什么每当开发人员尝试将AOSP ROM移植到他们的设备时,这么多的功能都会被破坏?基本答案是,由于功能会在不同版本的Android上发生变化,因此打包为BLOB的旧设备驱动程序将不适用于更新版本的Android,甚至无法与原始AOSP一起使用。为了克服这个问题,开发人员使用了所谓的“填充程序”,但是所涉及的过程非常棘手,耗时且有时很难调试。

在本文中,我们将概述垫片的工作原理,尤其是有关使相机在基于AOSP的ROM上正常工作的方面。我们将以OnePlus 3T为例。请注意,使这些功能正常工作所涉及的困难是特定于设备的。

什么是垫片或BLOB?

为了甚至开始理解开发人员正在做的事情的一部分,我们首先需要解释一些事情。尽管Android OS是开源的(有一个原因将其称为Android Open Source Project),但数千个Android设备上附带的软件(不含内核)却不是。开发人员无法访问Samsung Experience,EMUI,OxygenOS或其他任何第三方的Android版本的源代码。

现在,将股票AOSP移植到非Google设备的开发人员可能不再关心这些Android皮肤的源代码,因为它们将不会修改和构建这些ROM。如果不是因为一个很大的原因,那将是正确的:使相机正常工作所需的部件(主要是相机HAL(硬件抽象层))也是封闭源代码。

不仅具有相机HAL而且具有ROM封闭源的问题在于,致力于将AOSP移植到其设备上的开发人员将无法工作。封闭源OEM ROM能够很好地与摄像机HAL交互,因为OEM可以访问摄像机HAL源。相机HAL是允许ROM与相机硬件“对话”的要素—没有它,相机将无法运行。将相机HAL视为汽车的方向盘和踏板。方向盘/踏板通过为驾驶员(ROM)提供外部接口以利用内部部件来控制车辆的内部部件。

随着摄像机硬件变得越来越复杂(例如,双摄像机的问世),访问摄像机HAL源将使AOSP ROM与功能摄像机的移植变得更加容易。

但是,由于各种原因,OEM无法提供对摄像机HAL源的访问。首先,如果他们不拥有相机HAL的所有所有权(例如,当他们合并其他公司的知识产权时),那么他们将无法分发源。其次,释放相机的HAL来源可能会损害其自身的知识产权。最后,公司没有提供此源代码的法律义务(不同于根据GPL必须发布的内核源代码),因此,它们没有动力来发布它。因此,在没有访问摄像机HAL源的情况下,开发人员如何才能使摄像机在AOSP ROM上正常工作?答案是BLOB,填充程序以及大量调试。

设备BLOB(二进制大对象)包含预打包的二进制文件,这些二进制文件是软件的编译形式。在这种情况下,摄像机的HAL源代码由OEM编译,并作为二进制文件发送到设备上。当开发人员谈论BLOB时,他们指的是能够提取的实时设备上附带的那些二进制文件。现在,“相机BLOB”这一话题困扰了OnePlus数月之久,但事实是开发人员始终可以使用相机BLOB。虽然相机HAL源代码对于这里的开发人员来说是金牌,但是由于它将使OnePlus之类的公司陷入法律危险之中,因此永远不会发布。

因此,希望将AOSP引入设备的开发人员只留给了相机HAL的BLOB,而他们无法访问源代码。开发人员很少能将他们的AOSP ROM代码与相机HAL BLOB配对,并期望它能正常工作,因此,为了弥合两者之间的差距,开发人员创建了所谓的“ 垫片”。

“填隙”是“楔入(某物)或填满空间”。这实际上是开发人员在编写填充程序时所做的工作-他们添加了代码以允许BLOB与他们正在使用的AOSP源代码进行交互。垫片用于使各种类型的BLOB与AOSP一起使用,但是通常,相机BLOB所需的垫片最多。正如我们之前提到的,填充不仅需要将较新版本的Android移植到设备(例如所有非官方的Android Oreo ROM)上,而且在将相同Android版本的AOSP移植到该设备​​上时也需要填充。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。