嵌入式开发:将Android操作系统移植到嵌入式平台的最佳实践

更新时间: 2023-03-14 15:32:57来源: 粤嵌教育浏览量:6709

  Android是流行的智能手机操作系统,它正在接管平板电脑、汽车、智能电视、可穿戴设备、家用电器、游戏机市场等。它为嵌入式开发平台提供了独特而熟悉的体验,从最小的智能手表屏幕到可折叠和chromebooks上的更大显示屏,到车载娱乐系统,再到最大的电视屏幕。基于Android操作系统的医疗设备在医疗保健行业也被广泛接受。因此,将Android操作系统移植到嵌入式平台最近引起了很多关注。

  但是,在执行Android操作系统移植之前,请遵循下面提到的实践,以确保高效和成功的Android移植。

  1.遵循Linux内核编码标准和Android编码标准

  有各种各样的过程被认为是软件开发的基本属性。这些过程用于特定的编程语言、编程风格、方法等。编码标准确保开发人员遵循特定的指导方针来处理项目。在做Android移植的驱动定制时,需要遵循Linux/Android编码标准。这确保了无错误和易于维护的驱动程序。还有必要检查代码是否没有未使用的变量。

  编码时保持一致性对于程序的质量至关重要。此外,在系统的不同层次上普遍遵循指导方针,以避免相互矛盾。完成的程序代码应该由单个嵌入式开发人员在单个会话中管理,或者看起来像是由单个开发人员编写的。

  2.开发安全引导和映像认证

  安全引导是设备安全架构的构建模块。从技术上讲,安全引导是一个引导序列,其中每个软件映像都在设备上加载和执行。此外,该软件映像是使用软件授权的。该序列旨在通过在执行前检查所有代码来防止运行未经授权或修改的代码。

  所有图像加载都遵循相同的一般过程,称为“加载器”加载程序分配一个安全的内存区域来加载“ELF头”、“程序头”和“散列段”。加载程序通过检查映像元数据、根证书、证书链和哈希表来验证哈希段。加载程序通过对ELF段进行散列并将散列值与哈希表中的相等条目进行比较来验证加载的ELF段。如果任何一个计算出的哈希值有差异,图像将被拒绝。该嵌入式开发过程确保加载器永远不会用从不可信的存储器加载的图像数据意外地覆盖存储器中的重要数据(包括加载器的代码和数据)。

  

  3.开发经验证的引导

  验证启动确保所有执行的代码来自可信来源(通常是设备原始设备制造商)。它从引导分区、受硬件保护的信任根和引导加载程序到其他经过验证的分区(包括系统、供应商和可选的OEM分区)创建完整的信任权限链。在设备启动期间,每个阶段都会在移交执行之前验证下一阶段的完整性和真实性。

  之后,验证启动检查具有回滚保护的Android的正确版本,因为回滚保护通过确保设备仅更新到较新版本的Android来帮助防止可能的利用变得持续。此外,验证启动还允许Android设备与用户交流其完整性状态。

  4.为Android移植Linux内核:

  Android操作系统移植

  移植Linux内核是移植Android最重要的因素之一。从kernel.org下载合适的Linux版本,并将Linux移植到你的目标板上。这个内核被称为你的目标板。找一个与参考内核版本相同的Android内核,或者使用最接近的版本来简化过程。在嵌入式开发中,将参考内核和Android内核合并为一个合并的内核,该内核将被移植到目标板上。集成到Android Linux内核中的一些新组件是调试器、AshMem、Open Binder、电源管理器、低内存杀手和记录器。

  要为Android正确配置合并的内核,你必须通过从合并的源代码构建内核映像,用Linux根文件系统测试已知的工作配置。

  注意:参考内核和Android内核的版本不匹配可能会导致花费更多的时间进行合并和调试。

  5.配置升级(即OTA)服务器的能力

  OTA(空中下载)是Android用于Android设备中系统级更新的机制,如操作系统更新。建议坚持让移植公司使用Android OTA升级机制,而不是自主开发的升级系统。接下来,你可以将OTA升级服务器配置为你选择的服务器。这将使你能够控制更新过程,并控制何时向你的客户提供错误修复。它还为Android消费设备提供了一致的用户体验。

  

  移植Android 11时需要考虑的事情

  Android 11包含了与分区布局相关的各种变化,可以支持动态分区——一种用于Android的用户空间分区系统,可以在空中(OTA)更新期间创建、调整或销毁分区。这些动态分区消除了供应商管理各个分区(如系统、供应商和产品)大小的痛苦。相反,在嵌入式开发中,设备会分配一个超级分区和可以在其中动态调整大小的子分区。

  当所有特定于供应商的信息都从引导分区中提取出来并重新定位到供应商引导分区中时,就可以使用GKI(通用内核映像)轻松引导任意设备。现在,供应商引导分区包含以前包含在引导分区中的信息(如闪存页面大小、内核、内存磁盘加载地址、DTB本身)。为了在移植Android 11的同时成功完成引导,引导加载程序必须能够访问引导和供应商引导分区以获得足够的数据。

  在非A/B设备的恢复映像上,恢复映像应包含来自设备树blob (DTB)或高级配置和电源接口(ACPI)覆盖映像的信息。当这样的设备引导进入恢复模式时,引导加载程序可以加载与恢复映像兼容的覆盖映像。支持A/B(无缝)更新的设备应使用恢复作为引导,而不是单独的恢复分区,通用内核映像(GKI)必须使用主引导头版本3,以与供应商引导分区兼容。

  遵循中的上述实践嵌入式工程,你可以确保在嵌入式开发平台上高效、成功地移植Android,增强现有连接设备的功能,或者从头开始设计新系统,而不会有太多麻烦。

免费预约试听课