Android SystemServer 對 Linux 驅動程式程式碼風格的影響,一個簡單的概念

jollen 發表於 July 8, 2010 12:02 AM

今天為一家國際手機廠進行 Android 底層相關的內訓,課堂中提到一個概念,就是基於 Android 的 SystemServer 架構,可以藉由「架構面」改善過去 Linux 驅動程式在 Rentrant Code 議題面的程式碼模式。藉由模式的調整,可改善程式碼的效率。

過去,多個 Process 同時(Concurrency)存取同一份 Linux 驅動程式時,若驅動程式進行 Re-scheduling 操作,驅動程式的 Driver Method 就會重覆進入,因此需要考量做同步控制。

若是藉由 SystemServer 的架構,也就是「Single Process 存取驅動程式」,就能簡化重覆進入的議題。如下圖所示。

android-linux-driver-model.png

這是一個很簡單的模型,在 Middleware 層面,透過「限制應用程式的模式」來達到簡化重覆進入的議題。以 Android 作業系統為例,SystemServer 可以扮演這個「Single Process」的角色。當然,也可以設計成一個獨立的「My SystemServer」,根據對問題的分析來決定要修改 SystemServer,或是建立 My SystemServer。

對應用程式來說,只需要透過 IPC 與 SystemServer 溝通即可。當 SystemServer 需要交付資料(Data)給應用程式(Clients)時,可以採取下列二種方式:

1. Message & Handler
2. 註冊 Listener、由 SystemServer Callback

目前,正在進行「Android HAL & Framework:軟硬整合實作訓練」課程的第三次修訂,將會加入這個主題,以實例介紹 Android 框架如何影響 Linux 驅動程式的程式碼寫作風格,希望能在驅動程式的程式碼優化方面進行討論。

讀者留言 (0)

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。