Android 是流行的智能手機操作系統(tǒng),它正在接管平板電腦、汽車、智能電視、可穿戴設備、家用電器、游戲機市場等。它為嵌入式平臺提供了獨特而熟悉的體驗,從最小的智能手表屏幕到可折疊和 chromebook 上的更大顯示器,再到車載娛樂系統(tǒng),再到最大的電視屏幕。Android OS 驅(qū)動的醫(yī)療設備在醫(yī)療保健行業(yè)也被廣泛接受。因此,Android OS 向嵌入式平臺的移植最近引起了很多關注。
但是,在執(zhí)行 Android 操作系統(tǒng)移植之前,請遵循以下做法以確保高效且成功地進行 Android 移植。
遵循 Linux 內(nèi)核編碼標準和 Android 編碼標準
有各種程序被認為是軟件開發(fā)的基本屬性。這些程序用于特定的編程語言、編程風格、方法等。編碼標準確保開發(fā)人員遵循特定的指導方針來處理項目。在進行 Android 移植的驅(qū)動程序定制時,必須遵循 Linux/Android 編碼標準。這確保了無錯誤且易于維護的驅(qū)動程序。還需要檢查代碼是否沒有未使用的變量。
在編碼時保持一致性對于程序的質(zhì)量至關重要。此外,在系統(tǒng)的不同級別上普遍遵循指導方針,以避免相互矛盾。完成的程序代碼應該由單個開發(fā)人員在單個會話中管理或看起來像是由單個開發(fā)人員編寫的。
開發(fā)安全啟動和映像身份驗證
安全啟動是設備安全架構的構建塊。從技術上講,安全啟動是在設備上加載和執(zhí)行每個軟件映像的啟動順序。此外,該軟件映像是使用軟件授權的。此序列旨在通過在執(zhí)行前檢查所有代碼來防止運行未經(jīng)授權或修改的代碼。
所有圖像加載都遵循稱為“加載器”的相同通用過程。加載器分配一個安全的內(nèi)存區(qū)域來加載“ELF Header”、“The Program Header”和“The hash segment”。加載程序通過檢查圖像元數(shù)據(jù)、根證書、證書鏈和哈希表來驗證哈希段。加載器通過散列它們并將散列值與散列表中的相等條目進行比較來驗證加載的 ELF 段。如果任何計算的哈希值存在差異,則圖像被拒絕。
這個過程確保加載器永遠不會意外地覆蓋內(nèi)存中的重要數(shù)據(jù)(包括加載器的代碼和數(shù)據(jù)),而圖像數(shù)據(jù)是從不受信任的存儲中加載的。
開發(fā)經(jīng)過驗證的引導
驗證啟動確保所有執(zhí)行的代碼都來自受信任的來源(通常是設備 OEM)。它創(chuàng)建從引導分區(qū)、受硬件保護的信任根和引導加載程序到其他經(jīng)過驗證的分區(qū)(包括系統(tǒng)、供應商和可選的 OEM 分區(qū))的完整信任鏈。在設備啟動期間,每個階段都會在移交執(zhí)行之前驗證下一個階段的完整性和真實性。
之后,驗證啟動會通過回滾保護檢查正確的 Android 版本,因為回滾保護通過確保設備僅更新到較新版本的 Android 來幫助防止可能的漏洞持續(xù)存在。此外,驗證啟動還允許 Android 設備與用戶交流其完整性狀態(tài)。
用于 Android 的端口 Linux 內(nèi)核:
安卓操作系統(tǒng)移植
移植 Linux 內(nèi)核是移植 Android 的最重要因素之一。從 kernel.org 下載適當?shù)?Linux 版本并將 Linux 移植到您的目標板。該內(nèi)核被稱為目標板的參考內(nèi)核。查找與參考內(nèi)核具有相同版本的 Android 內(nèi)核,或者使用最接近的版本來簡化過程。將參考內(nèi)核和 Android 內(nèi)核合并為一個合并的內(nèi)核,該內(nèi)核將被移植到目標板上。為 Android 集成到 Linux 內(nèi)核中的一些新組件是 Debugger、AshMem、Open Binder、Power Manager、Low memory killer 和 logger。
要為 Android 正確配置合并內(nèi)核,您必須使用 Linux 根文件系統(tǒng)通過從合并源構建內(nèi)核映像來測試已知的工作配置。
注意:參考內(nèi)核和 Android 內(nèi)核的版本不匹配可能會導致花費更多時間進行合并和調(diào)試。
配置升級(即OTA)服務器的能力
OTA(空中下載)是 Android 用于在 Android 設備中進行系統(tǒng)級更新的機制,例如操作系統(tǒng)更新。建議堅持移植公司使用Android OTA升級機制,而不是國產(chǎn)升級系統(tǒng)。接下來,您可以將 OTA 升級服務器配置為您選擇的服務器。這將使您能夠控制更新過程并控制何時向客戶提供錯誤修復。它還為 Android 消費設備提供一致的用戶體驗。
移植 Android 11 時需要考慮的事項
Android 11 包含與分區(qū)布局相關的各種更改,這些更改可以支持動態(tài)分區(qū) - 適用于 Android 的用戶空間分區(qū)系統(tǒng),可以在無線 (OTA) 更新期間創(chuàng)建、調(diào)整大小或銷毀分區(qū)。這些動態(tài)分區(qū)消除了供應商管理單個大小的分區(qū)(如系統(tǒng)、供應商和產(chǎn)品)的痛苦。相反,設備分配一個超級分區(qū),以及可以在其中動態(tài)調(diào)整大小的子分區(qū)。
當所有特定于供應商的信息都從引導分區(qū)中提取出來并重新定位到供應商引導分區(qū)中時,它可以使用 GKI(通用內(nèi)核映像)輕松引導任意設備?,F(xiàn)在供應商引導分區(qū)包含以前包含在引導分區(qū)中的信息(例如閃存頁面大小、內(nèi)核、ramdisk 加載地址、DTB 本身)。要在移植 Android 11 時成功完成引導,引導加載程序必須能夠訪問引導分區(qū)和供應商引導分區(qū)以獲得足夠的數(shù)據(jù)。
在非 A/B 設備的恢復映像上,恢復映像應包含來自設備樹 blob (DTB) 或高級配置和電源接口 (ACPI) 覆蓋映像的信息。當此類設備啟動恢復時,引導加載程序可以加載與恢復映像兼容的覆蓋映像。支持 A/B(無縫)更新的設備應使用恢復作為引導而不是單獨的恢復分區(qū),并且通用內(nèi)核映像 (GKI) 必須使用 3 的主引導標頭版本以與供應商引導分區(qū)兼容。
遵循上述嵌入式工程實踐,您可以確保在嵌入式平臺上高效成功地移植 Android,并增強現(xiàn)有連接設備的功能或從頭開始設計新系統(tǒng),而無需太多麻煩。
審核編輯:郭婷
-
嵌入式
+關注
關注
5086文章
19143瀏覽量
306094 -
Android
+關注
關注
12文章
3938瀏覽量
127545 -
Linux
+關注
關注
87文章
11319瀏覽量
209830
發(fā)布評論請先 登錄
相關推薦
評論