Email me: jollen # jollen.org

more: Jollen 的 Embedded Linux 教育訓練

« June 2010 | (回到Blog入口) | August 2010 »

July 2010 歸檔

July 8, 2010

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

今天為一家國際手機廠進行 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 驅動程式的程式碼寫作風格,希望能在驅動程式的程式碼優化方面進行討論。

July 18, 2010

文藝復興運動,軟體我能創作

自由,而不是免費啤酒 (註1)。

Rinascimento, FOSS or FLOSS (free/libre/open source software)

神權至上的時期,被稱為「黑暗時期」,在 14 世紀興起的「文藝復興」運動,打破這個現象。也就是說,黑暗時代,神權至上,可能有很多像是「魔法」的東西,或是很多霍格華茲魔法學校(註:哈利波特的學校);文藝復興後,很多近代科學開始發展,生活在此時期後的人類,哈利波特稱之為麻瓜(Muggle,指沒有魔法的人)。

在 13 世紀晚期,義大利中產階段因為生活上的富足,開始尋求更優雅與時尚的生活,於是萠生「脫離神權」的想法。知名詩人「但丁(1265-1321)」的出現,被認為是義大利文藝復興時代的開始。於是,「個人主義」,也就是文藝復興運動的重要產物之一,開始發展。許多耳熟能詳的「大師」,也在文藝復興時期開始出現,例如:米開朗基羅(忍者龜);天文學、物理學、數學、生物學等,高中時期最令我頭痛的近代科學,有了重要的發展。

用近代的網路現象來比喻,文藝復興運動很像是 Web 2.0。出現很多新現象,例如:個人主義的興起,每個人都可以自由創作,發表成果,這裡的「個人主義」指的是「好的」個人主義,例如:分享、討論、知識交換,而不是自私的這種個人主義。

文藝復興時期,經典創作「聖彼得大教堂」花了 120 年的時間建造,由多位大師共同創作而成,很像是 Web 2.0 時代的「共筆」或是「協作」。Linux kernel 是網際網路時代,社群協作的重要創作之一。今天我們使用的 Android 手機,都是運行於 Linux kernel 軟體之上。

聖彼得大教堂,肯定是背包客必定點名的景點,這是天主教最神聖的地方。聖彼得大教堂花了這麼久的時間才完工,當然不可能是由同一位建築師獨立完成,參與聖彼得大教堂設計的建築師有勃拉芒特、拉斐爾、米開朗基羅、小莎迦洛,這也是聖彼得大教堂的特色;現今,自由軟體界,稱重要且具代表性的 developer 為「大神」。感謝以上四位大神的共同協作,讓我們在 700 年後的今天,能親眼目睹這個偉大的建築,能欣賞到令人嘆為觀止的繪畫與雕刻。

文藝復興運動,就像 Internet/WWW 的出現,以及後來的 Web 2.0 與開放源碼運動(Open Source Movement)一樣,影響全人類的生活與文化發展。近年來,手機也從封閉走向開放,以及「個人創作手機軟體」的運動發展,相信只要再 1~2 年的時間,我們的生活與文化,都會產生很大的改變。

自由軟體,打破「軟體黑暗時期」;每個人都能在手機上創作內容,也將打破「手機黑暗時期」。軟體黑暗時期?據可靠資料,可能指微x時期。

註1:這句話來自於 Richard M. Stallman 大師,對於自由軟體的自由「Free」之 [解釋]。

July 28, 2010

Jollen 的 Android Booting 解析, #1: 整體開機流程

Android 開機流程,是一個很值得詳細討論的主題;近期,也正在進行相關的技術工作,因此簡單整理一些相關資料,和大家分享。了解「整體開機流程」,是最重要的第一門課。我們將開機劃分為三大階段:

1. OS-Level,由 Bootloader 載入 Linux kernel 後,開始進行 kernel 本身的初始化,並載入 built-in 的驅動程式。Kernel 完成開機後,載入 init process,切換至 user-space 後,結束 kernel 的循序過程(sequence),進入排程模式(process scheduling)。

2. Android-Level,由 init process 開始,讀取 init.rc 並啟動重要的外部程式,例如:servicemanager、Zygote 以及 SystemServer。

3. Zygote-Mode,Zygote 啟動完 SystemServer 後,進入 Zygote Mode,在 Socket 等候命令。隨後,使用者將看到一個桌面環境(Home Screen)。桌面環境由一個名為 [Launcher] 的應用程式負責提供。

整體開機流程如圖一所示。


圖一:Android 整體開機流程圖

初探 Android 開機技術的朋友,建議可以先行閱讀 init.rc 檔案,並了解 Android 的 init.rc 語法。Android init language 可參考 [PDK] 的說明。

延伸閱讀

2010.04.24:
Jollen 的 Android 系統管理雜記, #3: init.rc 與 setprop

July 29, 2010

Jollen 的 Android Booting 解析, #2: 關於開機的評估

針對「開機過程」的評估,可以採取個別擊破的方式;針對三個不同的開機階段,分別進行開機過程的評估。評估開機過程的典型做法,當然是測量「開機時間」。

確認訴求

費勁進行開機時間的評估,最首要的目的當然是「快速開機」,想辦法讓開機速度加快。策略上,因為手機是一種重視使用者經驗的產品,所以「儘早顯示桌面環境」就是一個好想法。採用「一大堆」非同步的做法,可以達到很不錯的效果。簡單來說,儘速顯示桌面環境的目的,就是造成開機很快的「假象」。

因此,快速開機在智慧型手機產品端,也可以歸類到 User Experience 主題。

確認方向

OS-Level 的部份,包含 Linux kernel 本身的開機時間測量,在此先行略過。針對 Android-Level 的開機時間測量,可以採用廣受歡迎的工具 [Bootchart] 來製作;對使用者來說,進入 Zygote Mode 時,已經是處於桌面環境下了,因此理論上也能先略過這個階段。

關鍵部位 (Critical Parts)


圖一:由 Android-Level 切入、尋找議題

如圖一。綜合上述,對 Android-Level 的開機過程進行評估,就是我們的首部曲,也是第一個研究方向。傳統的評估方式,是測量其開機時間;接下來,將會以知名的 Bootchart 來進行這項工作。

關於 July 2010

此頁面包含了在July 2010發表於Jollen's Blog的所有日記,它們從老到新列出。

前一個存檔 June 2010

後一個存檔 August 2010

更多信息可在 主索引 頁和 歸檔 頁看到。

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org