Last two months, I was so honored and delighted to be invited as the speaker at Embedded Linux Conference Europe and droidcon.NL. I shared the progress about our development and various improvements for Anroid Open Source Project. As the developer at Linaro, 0xlab already contributes some fundamental works, and these eventually become the base for further collaborations. The topic of the presentation is "Develop Community-based Android Distribution and Upstreaming experience", and you can check out the presentation material as following:
Development Progress Summary about 0xlab
0xlab 一年來的開發狀態更新
忙碌的日子總是過得比較快,這一年來,0xlab 歷經頗多轉變,主要有以下三方面:
- 技術涵蓋: 為了加速 Android 系統整合與優化,我們建構了若干工具與提供一些創新的方法,比方說快速啟動 Android,詳情可見 0xlab::Technology
- 與知名專案與開源團隊的合作:除了過去已合作的 android-x86 與 CyanogenMod 專案外 (主要是 Graphics 與 ARM 相關效能優化),我們也投入 Linaro 的開發,建立 Android platform 與 LAVA (Linaro Automated Validation Architecture) 的基礎
- 建立與主要 SoC 廠商的聯繫及協同開發:與兩家重要的 SoC 廠商 (排名 Top 20 半導體公司) 密切合作開發,在 Android 的基礎上,透過若干開源的創新,加強 SoC 競爭力,並導入產品設計
- 0xdroid :作為 0xlab 的 Android 參考優化與客製化設計,其成果不僅為 Beagleboard 社群所熟知,許多內部的改進也廣泛用於 CyanogenMod,間接使許多裝置與公司團體受惠。可參考 0xdroid::Roadmap 以得知細部的演進,簡單來說,在高解析度的環境,提昇了 Android 使用者體驗 (software curosr, on-screen keyboard, launcher),另外就是進一步的 ARM 優化,從 skia, zlib, libcore, libc, 到 libagl (libGLES_android) 都有
- 0xbench : 仍是截至目前為止,我們所知的最完整 Android 開放原始碼系統效能評測工具,與上個版本相較,追加了 Web/JavaScript 效能評測、LAVA 的資料格式 (bundle)、重新啟用 libMicro 等等,詳情可見 0xbench::Benchmarks
- Linaro : 經 ARM 的支持,0xlab 投入 Linaro 開發,共同為改善開發原始碼軟體品質而努力。我們涉及的項目稍微繁雜些,從整合 Linaro toolchain、改善 Android runtime、強化 LAVA 的整合,到多媒體驗證都有
- aster : 全名是 "Android System Testing Environment and Runtime",著眼於 Android 系統中許多無法透過 API 呼叫所作的 black-box test,一旦 adb daemon 正常啟動後,這個系統就可依據指定的 test case 去逐一執行並驗證,此系統也允許使用者編輯操作案例
- Android 快速開機: 利用優化過的 ARM hibernation (suspend-to-disk),大幅縮減 Android 系統從 HW reset 到使用者得以操作的時間,可參考展示影片 "Android Fast Booting with CarHome",相關的原始碼也一併釋出,可見 0xlab-kernel,儘管仍有頗大的進步空間,但這是完全可運作且開源的解決方案
- AMBER : 這是我們提供的第一個完整的應用系統,概念非常簡單,考量到現有 Android 裝置相當多元,可能是手機、筆記型電腦、平板電腦、電子書,或者數位電子,這之間要進行媒體 (media/content) 的交換往往很沒效率,而且使用者還得被繁複且多樣的多媒體格式所困擾,若無適度的轉換,通常就無法在手機或者較陽春的平板上播放。我們提出的解法,就是將動作縮減為 "push" 與 "pull",自動偵測媒體的格式與屬性,無論在近距 (家用或小範圍) 或遠距 (透過雲端或者防火牆),挑選最合適的途徑,讓使用者盡情觀賞與交換。同樣的,這也是開放原始碼,內建於 0xdroid
- Toolchain : 除了改善 Linaro Toolchain for Android 外,我們還改善了 Android ELF prelink,大幅縮減執行時期需要解析的 ELF 符號數量,也縮減了載入時間,近期內會提交到 AOSP
- Android Open Source Project : 已被 Google Android 計畫正式收錄 37 個修改/貢獻
- Twitter: http://twitter.com/0xlab
- 郵件論壇: 0xlab-devel (系統開發) ; 0xlab-discuss (一般討論)
- YouTube: http://www.youtube.com/0xlab
- 有源碼有真相: gitorious, github
read on
0xlab 在 OSDC.tw 2011 的議程分享
講題: The meaning of open
講者: John Lee
摘要: Open source can be a culture, a belief, a hobby, a profession, and many things else. Now it can also be a business model. 0xlab has been trying to build a bridge between companies and open source communities for almost two years. We believe that by creating an ecosystem around open source technologies, we can help it growing stronger in Taiwan. This session is about our idea, our vision, and our progress.
講題: Build Programming Language Runtime by LLVM
講者: Jim Huang (jserv)
摘要: 在 OSDC 2009 的〈窮得只剩下 Compiler -- 淺談編譯技術的革命〉議程,提及編譯器相關的技術獲得空前的成功,而在運算型態多元的今日,如何跨越語言的藩籬卻又得兼顧底層平台的效能與安全,即是當前的重要課題。本議程將探討如何打造架構於 LLVM Compiler Infrastructure 的程式語言執行環境,並分析傳統編譯/解譯式語言到當紅的動態程式語言在引入於移動平台時,值得深入探索的技術細節。
講題: Rloader, alternative technology to achieve fast boot time for ARM Linux
講者: Matt Hsu
摘要: To reduce boot time for embedded device, you can optimize from different aspects, such as bootloader, kernel, and applications. But this usually needs to do optimization on specific application. Instead, Rloader can provide _generic_ solution to achieve fast boot time without changing your application.
講題: SVG+Javascript meets Embedded Systems
講者: Thinker Li
摘要: After two years of work, MadButterfly, a SVG based GUI environment, had made a breakthrough. It suports Javascript to improve efficiency for developing embedded systems. In late 2010, we also improve our code with OpenVG, an HW acceleration API, to provide high-performance GUI. This talk would demonstrate an efficient way for developing an embedded system with GUI, and provide high quality and performance GUI output with a low-Hz platform at the same time.
講題: Gallium3D - Mesa's new driver model
講者: Chia-I Wu (olv)
摘要: 做為 Linux 系統主要的開放源始碼 3D 驅動程式,在 GPU 應用範圍越來越廣泛的同時,傳統的 Mesa driver model 已逐漸不敷使用。本議程將簡介 Mesa 新提出的 Gallium3D 架構,理解何以 Gallium3D 能夠幫助開發者更快地去支援新的硬體、作業系統與繪圖 API 。
依據慣例,屆時我們也會發布最近的開發成果,期待您的蒞臨指教,謝謝! read on
0xlab 的客製化 Android toolchain
有鑑於 Google 的 Android toolchain 開發團隊雖然活躍提交修改/貢獻到 GCC 與 binutils,但受限於 Android 原始碼釋出的慣例,總是要等待頗長的時間,才有機會使用到新的 GNU Toolchain 改善或者新功能,所以,0xlab 開發者就準備一份客製化的版本,請參考以下網址:
加速 Android 的動態連結
就如人們所熟悉,Android 底層運作 Dalvik 虛擬機器,在 C Library 層面採用衍生自 NetBSD libc 的 bionic。與過往的 Java 為基礎的操作環境 (OE; Operating Environment,如 Transvirtual 的 PocketLinux / XOE) 不同的是,每個 VM instance 均為獨立的 Linux process,且由 Zygote 所「孵化」。就系統的角度來說,縱使底層對 system library 做了 prelink (透過工具 build/tools/apriori),但因語言實做的特性,需頻繁經由 JNI 去存取底層服務,也就是說,有大量的 dlopen()/dlsym() 操作,這些均無法透過 prelink 來縮減載入時間。
在 COSCUP 2010 的議程「打造特製的 Android Toolchain」中,小弟介紹了 0xlab 近來的幾項嘗試與改進項目,除了 GNU Toolchain (採用 gcc-4.4.4 搭配一系列的修改) 之外,就包含 Android bionic libc 與 prelink 的修改,企圖引入 DT_GNU_HASH 的機制 (也稱為 gnu hashstyle,或 gnu hash),以加速 Android 的動態連結。現在基礎工作大致完畢,陸續提交到 AOSP (Android Open Source Project) 的 Code Review,應該會納入 Android Gingerbread 以及後續的版本中。實驗平台採用 Qualcomm MSM7x25 (arm1136j-s),平均縮減 26% 的 ELF 動態連結時間,這對所有的 Android Activity (Java 程式) 與需要額外作 dlopen() 處理的系統函式庫,如 Qualcomm 的 camera HAL/service 或 Opencore/DSP,均可適用。
這過程中,讓小弟學習到頗多,從一開始的分析 (透過 oprofile 與開啟 bionic 裡頭 linker 的除錯資訊),觀察到 Android 的動態連結處理,有點類似 OpenOffice 所面臨的議題,於是嘗試引入 DT_GNU_HASH。背景知識可參考以下文獻:
- LWN 清晰的介紹文章 "Optimizing Linker Load Times",涵蓋四項 linker 參數背後的處理機制: -Wl,-O1, -Bdirect Linking, dynsor, gnu hashstyle (Precomputed Hash Values)
- Ali Bahrami 的 blog 文章 "GNU Hash ELF Sections" 與 "The Cost Of ELF Symbol Hashing",淺顯易懂
- glibc 維護者 Ulrich Drepper 的論文 "How To Write Shared Libraries" (不要被 How To 字眼騙了,其實頗深入),廣泛探討從歷史因素到 DSO 運作機制,以及 GNU Hackers 如何參照 Sun Microsystems 過往的改良機制,重新實做出 gnu hashstyle
The number of collisions in the 537403 symbols is:
name 2sym collision # 3sym collision # more than 3sym collision #
sysv 1749 5
libiberty 42
dcache 37
djb2 29
sdbm 39
djb3 31
rot 337 39 61
sax 34
fnv 40
oat 30
sysv 那項是原本的 hash function,而 djb2 則是 GNU Toolchain 採用的方案。就現有自由軟體的實做來看,包含 glibc, uClibc, dietlibc (前三者支援 GNU/Linux), FreeBSD libc 均提供 gnu hashstyle 的支援,但 Android 未正式在 bionic 提供。需留意的是,prelink 方案總是比 gnu hashstyle 帶來更快的動態連結時間,但付出的代價 (空間) 較高,而且不若後者有彈性。 read on
簡介 0xlab 新的開放原始碼專案
我們在今年八月中旬的 COSCUP 研討會中,很榮幸地向與會的朋友介紹 0xlab 若干新的開放原始碼專案,本文稍作整理回顧。0xdroid 是 0xlab 最早的一項整合性開放原始碼專案,目的是建構於 Beagleboard 開放的硬體之上,提供 Android 的參考實做環境,經過一年多的累積,裡頭的成果被帶到不同的移動裝置中,比方說手機與 Tablet。今年二月份,有幸在 Mobile World Congress 2010 展示基於 Android 的移動裝置,Tieto 也在 TI OMAP3 平台展示 0xdroid,這些都讓我們更有信心,擴展到多元的應用。
這半年間,延續 0xdroid 的經驗,我們發展 / 貢獻以下專案:
- 0xRobocat : 與 CATCAN 合作的專案,目的是打造一組控制伺服馬達與相關零組件的軟體框架,可提供給 Android 或 GNU/Linux 使用,以 Apache License 2.0 授權釋出。除了用於打造機器人外 (是真的可走動的 "Android"),本專案可用於 Android 裝置 (如手機) 的自動測試
- 0xBench : 有鑑於 Android 上的系統效能評比程式,不是不完整,就是非開放原始碼,所以我們決定重新打造一個。0xBench 可從 C 函式庫/系統呼叫的層面,一路從 Dalvik VM 評測到 Android framework,仍持續擴充,並且我們提供 Web service,允許貢獻評測的結果,用互動的方式來分析。程式主體是 Apache License 2.0 授權
- android-toolchain : 0xlab 特製的 GNU Toolchain,以 Android team 的成果為基礎,整合來自 Linaro Toolchain Working Group 的改善。這些主要是 GNU GPLv3 授權
- Android Open Source Project (AOSP) : 提交 0xlab 過去在 TI OMAP 與 Qualcomm 72xx 平台的一些修改,經過公開的 Review 機制,慢慢整合到 AOSP
- CyanogenMod : 社群版本的 Android,在 Nexus One, HTC Dream 等裝置有相當優越的表現,收錄若干來自 0xlab 的改良,比方說 Bluetooth HID profile
- build - 調整 Android build system、修正工具程式的瑕疵
- bionic - 提供 ARM optimizations,針對 ARMv6/ARMv7
- PixelFlinger - 基本的 refactoring,以及 ARM 實做的改良
- libpng / libz - 利用 GCC visibility,進一步縮減 code size
- elfcopy - ELF 工具的調整
- bionic / apriori / build - 支援 DT_GNU_HASH,加快動態連結的速度
- toolchain - 加強 build system 的彈性
read on
0xlab 在 COSCUP 2010 的議程分享
講題:Android Game Engine 比較
講者: walkingice (0xlab)
- 摘要:隨著 Android的蓬勃發展,遊戲亦如雨後春筍般冒出。避免重複造輪子,勢必要藉助現有的遊戲引擎,讓遊戲開發者可以專注在遊戲的最核心價值 — 樂趣
- 講者: tick (0xlab), matt (0xlab)
- 摘要:將 0xdroid 打造成為機器人平台。Robocat 是為 0xdroid 所設計的機器人控制系統,此議程將從硬體架構、系統設計、函式庫及應用程式等不同層面切入,介紹如何打造自己的 ”Android”
- 講者:Jim Huang "jserv" (0xlab)
- 摘要:探討 0xlab 近來的實驗,從修改 Android 的 GNU Toolchain 到提供 source-to-source compiler,提出若干基於特定需求,從而發展的編譯器技術的新應用