嵌入式開發(fā):將Android操作系統(tǒng)移植到嵌入式平臺的最佳實踐
Android是流行的智能手機操作系統(tǒng),它正在接管平板電腦、汽車、智能電視、可穿戴設備、家用電器、游戲機市場等。它為嵌入式開發(fā)平臺提供了獨特而熟悉的體驗,從最小的智能手表屏幕到可折疊和chromebooks上的更大顯示屏,到車載娛樂系統(tǒng),再到最大的電視屏幕?;贏ndroid操作系統(tǒng)的醫(yī)療設備在醫(yī)療保健行業(yè)也被廣泛接受。因此,將Android操作系統(tǒng)移植到嵌入式平臺最近引起了很多關注。
但是,在執(zhí)行Android操作系統(tǒng)移植之前,請遵循下面提到的實踐,以確保高效和成功的Android移植。
1.遵循Linux內核編碼標準和Android編碼標準
有各種各樣的過程被認為是軟件開發(fā)的基本屬性。這些過程用于特定的編程語言、編程風格、方法等。編碼標準確保開發(fā)人員遵循特定的指導方針來處理項目。在做Android移植的驅動定制時,需要遵循Linux/Android編碼標準。這確保了無錯誤和易于維護的驅動程序。還有必要檢查代碼是否沒有未使用的變量。
編碼時保持一致性對于程序的質量至關重要。此外,在系統(tǒng)的不同層次上普遍遵循指導方針,以避免相互矛盾。完成的程序代碼應該由單個嵌入式開發(fā)人員在單個會話中管理,或者看起來像是由單個開發(fā)人員編寫的。
2.開發(fā)安全引導和映像認證
安全引導是設備安全架構的構建模塊。從技術上講,安全引導是一個引導序列,其中每個軟件映像都在設備上加載和執(zhí)行。此外,該軟件映像是使用軟件授權的。該序列旨在通過在執(zhí)行前檢查所有代碼來防止運行未經(jīng)授權或修改的代碼。
所有圖像加載都遵循相同的一般過程,稱為“加載器”加載程序分配一個安全的內存區(qū)域來加載“ELF頭”、“程序頭”和“散列段”。加載程序通過檢查映像元數(shù)據(jù)、根證書、證書鏈和哈希表來驗證哈希段。加載程序通過對ELF段進行散列并將散列值與哈希表中的相等條目進行比較來驗證加載的ELF段。如果任何一個計算出的哈希值有差異,圖像將被拒絕。該嵌入式開發(fā)過程確保加載器永遠不會用從不可信的存儲器加載的圖像數(shù)據(jù)意外地覆蓋存儲器中的重要數(shù)據(jù)(包括加載器的代碼和數(shù)據(jù))。

3.開發(fā)經(jīng)驗證的引導
驗證啟動確保所有執(zhí)行的代碼來自可信來源(通常是設備原始設備制造商)。它從引導分區(qū)、受硬件保護的信任根和引導加載程序到其他經(jīng)過驗證的分區(qū)(包括系統(tǒng)、供應商和可選的OEM分區(qū))創(chuàng)建完整的信任權限鏈。在設備啟動期間,每個階段都會在移交執(zhí)行之前驗證下一階段的完整性和真實性。
之后,驗證啟動檢查具有回滾保護的Android的正確版本,因為回滾保護通過確保設備僅更新到較新版本的Android來幫助防止可能的利用變得持續(xù)。此外,驗證啟動還允許Android設備與用戶交流其完整性狀態(tài)。
4.為Android移植Linux內核:
Android操作系統(tǒng)移植
移植Linux內核是移植Android最重要的因素之一。從kernel.org下載合適的Linux版本,并將Linux移植到你的目標板上。這個內核被稱為你的目標板。找一個與參考內核版本相同的Android內核,或者使用最接近的版本來簡化過程。在嵌入式開發(fā)中,將參考內核和Android內核合并為一個合并的內核,該內核將被移植到目標板上。集成到Android Linux內核中的一些新組件是調試器、AshMem、Open Binder、電源管理器、低內存殺手和記錄器。
要為Android正確配置合并的內核,你必須通過從合并的源代碼構建內核映像,用Linux根文件系統(tǒng)測試已知的工作配置。
注意:參考內核和Android內核的版本不匹配可能會導致花費更多的時間進行合并和調試。
5.配置升級(即OTA)服務器的能力
OTA(空中下載)是Android用于Android設備中系統(tǒng)級更新的機制,如操作系統(tǒng)更新。建議堅持讓移植公司使用Android OTA升級機制,而不是自主開發(fā)的升級系統(tǒng)。接下來,你可以將OTA升級服務器配置為你選擇的服務器。這將使你能夠控制更新過程,并控制何時向你的客戶提供錯誤修復。它還為Android消費設備提供了一致的用戶體驗。

移植Android 11時需要考慮的事情
Android 11包含了與分區(qū)布局相關的各種變化,可以支持動態(tài)分區(qū)——一種用于Android的用戶空間分區(qū)系統(tǒng),可以在空中(OTA)更新期間創(chuàng)建、調整或銷毀分區(qū)。這些動態(tài)分區(qū)消除了供應商管理各個分區(qū)(如系統(tǒng)、供應商和產(chǎn)品)大小的痛苦。相反,在嵌入式開發(fā)中,設備會分配一個超級分區(qū)和可以在其中動態(tài)調整大小的子分區(qū)。
當所有特定于供應商的信息都從引導分區(qū)中提取出來并重新定位到供應商引導分區(qū)中時,就可以使用GKI(通用內核映像)輕松引導任意設備?,F(xiàn)在,供應商引導分區(qū)包含以前包含在引導分區(qū)中的信息(如閃存頁面大小、內核、內存磁盤加載地址、DTB本身)。為了在移植Android 11的同時成功完成引導,引導加載程序必須能夠訪問引導和供應商引導分區(qū)以獲得足夠的數(shù)據(jù)。
在非A/B設備的恢復映像上,恢復映像應包含來自設備樹blob (DTB)或高級配置和電源接口(ACPI)覆蓋映像的信息。當這樣的設備引導進入恢復模式時,引導加載程序可以加載與恢復映像兼容的覆蓋映像。支持A/B(無縫)更新的設備應使用恢復作為引導,而不是單獨的恢復分區(qū),通用內核映像(GKI)必須使用主引導頭版本3,以與供應商引導分區(qū)兼容。
遵循中的上述實踐嵌入式工程,你可以確保在嵌入式開發(fā)平臺上高效、成功地移植Android,增強現(xiàn)有連接設備的功能,或者從頭開始設計新系統(tǒng),而不會有太多麻煩。