Email me: jollen # jollen.org

more: Jollen 的 Embedded Linux 教育訓練

« August 2008 | (回到Blog入口) | October 2008 »

September 2008 歸檔

September 2, 2008

Intel 收購 Opened Hand

一年多前 [Mobile Linux initiative 成立],Mobile Linux initiative(或稱為 Moblin community)採用 Intel Atom 平臺,並專注於 Mobile Internet Devices(MIDs)、Netbooks 與其它 embedded devices 的開發。而這個以 Intel Atom 為主的社群,有了重大的變化。

根據 PC World 的一則消息指出:[Intel Buys British Linux Developer Opened Hand]。是的,Intel 買下了知名的軟體開發公司 [OpenedHand];同一時間,Opened Hand 也在網站上發佈這則消息(引述自 Opened Hand 網站):

We are pleased to announce that OpenedHand Ltd has been acquired by Intel Corporation. The OpenedHand team will join the Intel Open Source Technology Center and will focus on the development of the Moblin Software Platform, the optimized software stack for Intel Atom processors.

Intel will continue supporting open source projects currently led by OpenedHand staff such as Clutter and Matchbox projects, and in most cases, will accelerate these projects as they become an integral part of Moblin.

Opened Hand 在被 Intel 收購後,將加入 Intel Open Source Technology Center,並且將專注在 Moblin 軟體平臺的發展。Opened Hand 是 GNOME 最重要的 contributor,Opened Hand 帶領的幾個知名專案像是 Clutter 與 Matchbox 等,也將會繼續發展,這些專案在加入 Moblin 後有助於加快其開發速度。

Opened Hand 過去開發過許多知專案,幾個代表性專案有 Nokia Internet Tablets(N770)、OLPC、Vernier,以及 Openmoko。

September 4, 2008

UI 設計新體驗 Python-etk

最近在整理一些有關使用者介面設計的資料,希望可以提份一份簡單有趣的UI設計教學投影片,對象是學生,目的是讓同學可以「無恐懼玩UI」。

現今能做UI的技術很多,其中相對比較容易的方式就是以script language來打造UI,而當前最受注意的方式就是以Python快速寫UI。當然,網路上還有許多不同的UI技術,像是能讓「designer」真正自由發揮、免除寫code的SVG browser,也是一個值得注意的技術。

今天要介紹的主角是python-etk,故名思義,這是Python的ETK模組。ETK是一個不錯的東西,全名是Enlightenment Tool Kit,它的功能定位就像是GTK+的角色。GTK+是大名鼎鼎的圖形元件(widget)庫,由GTK+專案所沿伸出來的Glib也是一個使用廣泛的「強化版C程式庫」。ETK有沒有像Glib這樣的東西?有的,叫做Ecore。

Enlightenment(簡稱E)是一個知名且古老的window manager。[Enlightenment]包含許多程式庫以及工具,這些程式庫與工具總稱為EFL(Enlightenment Foundation Libraries)。簡單來看,可以畫出EFL的架構如下。

efl.png

EVAS是一個「畫布」程式庫。Ecore的角色如同GTK+的產物Glib,不過並不完全等於。EDJE則是一個「layout engine」。最上面的ETK就是我們的主角,Enlightenment的圖形元件庫。

透過python-etk來實作ETK應用程式,可以帶給我們一些愉快的經驗。要怎麼寫一個向世界問好的入門級python-etk程式呢?以下是一個範例(hello_world.py):

#!/usr/bin/python

import etk

class MyButton(etk.Button):
	def _size_request(self):
	    return (100, 200)

btn = MyButton(label = "Click Me")
btn.on_clicked(lambda x: etk.main_quit())

# Main
w = etk.Window(title="Hello World", size_request=(150, 150), child=btn)
w.show_all()

def quit(obj):
    etk.main_quit()
w.on_destroyed(quit)

etk.main()

目前有一些知名的Linux手機專案已經開始使用python-etk,例如Openmoko以及Nokia的maemo專案。後續將再配合一個範例來說明hello_world.py程式,及其執行結果。

September 14, 2008

演講「加入 kernel 除蟲大隊:簡介 kernel debug 工具」簡報上線

近期受邀發表了一場與「kernel debug」有關的演講,進行時間大約是70分鐘,在此提供簡報電子檔[加入 kernel 除蟲大隊]供有興趣的朋友下載。本次演講的目的是對 kernel debug 主題做「開場」,再加上時間有限,因此並沒有對 kernel debug 的技術做太深入的討論,反而是透過整理的方式,對幾個常見的 kernel debug 工具與方法做總覽。

演講最後展示了使用 gdb+qemu 來進行 kernel source-level debug 的方法。「加入 kernel 除蟲大隊」需要具備什麼樣的基本技能呢?

首先,主要的工具「GNU Debugger」當然是必學的主題,不過因為這次的主題是 kernel debug,因此只約略介紹 user-space 下幾個重要的除錯觀念:

Breakpoint, single step, inspect variables

如何設定中斷點,進行單步執行,並在程式 run-time 時期檢視變數內容。

Segmentation fault

程式被訊號(signal)被中止時,怎麼找到不正常終止的程式碼。一個典型的 segmentation fault 是發生在程式存取非法的記憶體位置時。

Core dump

程式不正常中止時,會產生 core dump 檔案。透過 core dump 檔與原始的 ELF image 來比對出程式發生不正常中斷的行號。

Multi-threaded, client-server, GUI

多執行緒的除錯、client-server 架構與 GUI 系統的除錯也是重要的除錯技能。以多執行緒為例,我們可以透過「attach」的方式讓 gdb attach 到執行中的子程序進行除錯;又以 GUI 系統為例,我們有時會想要追踪一個由 kernel 發出到 UI 端的事件(event),或是追踪 IPC 的訊息內容。針對這部份來說,有時透過除錯來觀察「系統行為」會比程式邏輯的除錯來得重要,當然除錯上也會稍微複雜一些。

針對 kernel debug 的部份來說,初學者應該以「建立正確使用除錯工具的觀念」與「建立合適的除錯環境」為主軸。另外,對於 oops(kernel panic)訊息的分析,則是核心除錯的重頭大戲,只是這裡所涉及的背景知識會多一些,在投影片裡列出 oops 訊息分析所應了解的幾個主題。不過,不管是 user-space 除錯,或是 kernel-space 除錯,仍必須建立基本的系統程式觀念,像是:

* symbol table
* process virtual address space
* kernel virtual address space
* system call
* exceptions
* stack, heap

本次演講,也介紹了一些關於核心除錯的重要觀念,幾個未列在投影片的部份,在這裡做個簡單整理。

開機是一個循序式過程

Kernel 的開機過程,是一個傳統的「循序式(sequence)」執行過程,如同我們展示以 gdb + qemu 進行除錯一樣,可以檢視並了解 kernel 的開機流程,以及開機失敗時的程式碼位置。

開機完成後是狀態切換

當 kernel 開機完成後,便會啟動一個外部程式,稱為 init process,從這個時間開始,user-space 程式便得以執行。Kernel 此時並不是一個循序式執行(sequential function calls)的狀態。

當不同的 process 執行時,因為呼叫的 system call 不同,因此 kernel 的狀態也不同。再舉一例,以驅動程式來說,在開機過程中,kernel module 只做載入的動作;但是,驅動程式所實作的 system call,如:read、write、ioctl,則是必須透過 user program 執行 system call 才會被叫用。以後面的例子來說,這就不會只是一個單的 kernel debug,或者說「並不是只對 kernel 做除錯」。

Remote Debug

以 remote debug 的方式進行除錯,remote 端(target 端)所載入的 kernel 是編譯完成後,放置於 arch/arm/boot(以 ARM 為例)目錄下的 kernel image,這是 target 端所使用的 kernel image(run-time)。

Local 端(除錯本機端)也要載入 kernel image,此時載入 kernel image 的目的是為了讀取 symbol table 以及其它 ELF 節區資訊,這裡所載入的 kernel image 為 ‘vmlinux’,即編譯完成後放置於 kernel 根目錄下的原始 ELF image file。由此可知,本機端的 ELF image 必須包含完整的除錯資訊,讓 kernel image 包含除錯資訊的做法是在編譯核心時,將幾個除錯選項打開,這部份在簡報中有做說明。

最後,大家可以參考 jserv 兄過去所發表過有關gdb的演講簡報 [「快快樂樂學 GNU Debugger (gdb) Part I + II」簡報上線]。

September 25, 2008

停止軟體專利世界日(Stop Software Patents World Day)

今天是 [Free Software Foundation(自由軟體基金會)] 的 [Stop Software Patents, World Day],所以也來 [貼貼 banner] 嚮應一下。

今年五月份,自由軟體基金會的創辦人 Richard Stallman 來台演講時,發表了一場「The Danger of Software Patent」的演說。Richard Stallman 以一張圖說明了為何軟體專利是「無限的危害」,至今仍令人印像深刻。ZDNet Taiwan 上的一則報導 [自由軟體之父:軟體專利有害無益] 便引述了 Richard Stallman 的一段談話:

「專利權本身的目的是為鼓勵人們將新創概念公佈出來,但現行的專利體系卻會造成反效果,」

因為認同這個觀念,因此嚮應一下「停止軟體專利世界日」。

延伸閱讀

* 2008.05.22: Richard Stallman 台灣行第四天紀錄: 5/15 演講實紀
* 2008.05.21: Richard Stallman 台灣行第四天紀錄: 5/15 新竹清大行側寫
* 2008.05.21: Richard Stallman 結束訪台行程: 5/19 離台
* 2008.05.16: Richard Stallman 台灣行第三天:下課後
* 2008.05.14: Richard Stallman 台灣行第三天:演講「The Danger of Software Patent」
* 2008.05.12: Richard Stallman 台灣行第一天
* 2008.05.03: 自由軟體基金會創辦人 Richard Stallman 來台演講

關於 September 2008

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

前一個存檔 August 2008

後一個存檔 October 2008

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

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