<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Jollen&apos;s Blog</title>
      <link>http://www.jollen.org/blog/</link>
      <description></description>
      <language>en</language>
      <copyright>Copyright 2010</copyright>
      <lastBuildDate>Tue, 10 Aug 2010 23:55:20 +0800</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.32</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>Nexus One 晉升 Android Developer Phone 3</title>
         <description>Nexus One 雖然在日前停止網路銷售，不過，根據幾天前在的 Android Developer Blog 上的一則新聞來看，Nexus One 榮獲「Android Developer Phone」頭銜。也就是，雖然 Nexus One 下架了，但改以 ADP3（Android Developer Phone 3）的名稱對開發者進行銷售。第一代 Android Developer Phone 就是由 T-Mobile G1（aka HTC Dream）換名而來，並且做了解鎖動作；Android Developer Phone 2（aka G2 or HTC Magic）於去年 11 月推出，同樣也是 Unlocked Phone。ADP3 則是將 Nexus One...</description>
         <link>http://www.jollen.org/blog/2010/08/nexus-one-became-adp3.html</link>
         <guid>http://www.jollen.org/blog/2010/08/nexus-one-became-adp3.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 10 Aug 2010 23:55:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android Booting 解析, #3: 製作 Android Bootchart</title>
         <description>前一則日記提到的 Bootchart 是典型的開機量測工具，主要能進行開機過程以及開機時間的量測。由於 Bootchart 的原理是取代 init process 或是內建在 init process 裡，所以只能取得 initial script 的開機過程報告。不過，這已經很有幫助了。 關於 Android Bootchart 以下是一份使用 Bootchart 所製作的 Android 開機流程圖。過去有一些以 C 重寫 Bootchart 的專案，而 Android 也有一份 C re-implementation，放置於 [system/core/init/bootchart.c]。由此可知，Android init 已經內建一份 C re-implement 的 Bootchart。 圖一：使用 Bootchart 製作的...</description>
         <link>http://www.jollen.org/blog/2010/08/jollen-android-booting-column-3.html</link>
         <guid>http://www.jollen.org/blog/2010/08/jollen-android-booting-column-3.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 03 Aug 2010 11:15:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android GSM Phone：長江二號 (CJ-2) 開機囉</title>
         <description>執行 Android 2.1 的智能手機「長江二號」開機囉。目前使用起來還算順暢，雖然 Engineering Build 的開機時間有點長，不過能看到 Linux 小企鵝，是一件興奮的事情。 長江二號（CJ-2）是使用 Rockchip RK2808 的 Android GSM 智能手機，目前正在測試中的「長江三號」是令人更興奮的版本。長江二號的團隊（Zinn.Mobi）正在很努力地催生三號中，希望 3G 版本也能儘快與大家見面。...</description>
         <link>http://www.jollen.org/blog/2010/08/zinn-mobi-android-gsm-phone.html</link>
         <guid>http://www.jollen.org/blog/2010/08/zinn-mobi-android-gsm-phone.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 02 Aug 2010 13:25:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android Booting 解析, #2: 關於開機的評估</title>
         <description>針對「開機過程」的評估，可以採取個別擊破的方式；針對三個不同的開機階段，分別進行開機過程的評估。評估開機過程的典型做法，當然是測量「開機時間」。 確認訴求 費勁進行開機時間的評估，最首要的目的當然是「快速開機」，想辦法讓開機速度加快。策略上，因為手機是一種重視使用者經驗的產品，所以「儘早顯示桌面環境」就是一個好想法。採用「一大堆」非同步的做法，可以達到很不錯的效果。簡單來說，儘速顯示桌面環境的目的，就是造成開機很快的「假象」。 因此，快速開機在智慧型手機產品端，也可以歸類到 User Experience 主題。 確認方向 OS-Level 的部份，包含 Linux kernel 本身的開機時間測量，在此先行略過。針對 Android-Level 的開機時間測量，可以採用廣受歡迎的工具 [Bootchart] 來製作；對使用者來說，進入 Zygote Mode 時，已經是處於桌面環境下了，因此理論上也能先略過這個階段。 關鍵部位 (Critical Parts) 圖一：由 Android-Level 切入、尋找議題 如圖一。綜合上述，對 Android-Level 的開機過程進行評估，就是我們的首部曲，也是第一個研究方向。傳統的評估方式，是測量其開機時間；接下來，將會以知名的 Bootchart 來進行這項工作。...</description>
         <link>http://www.jollen.org/blog/2010/07/jollen-android-booting-column-2.html</link>
         <guid>http://www.jollen.org/blog/2010/07/jollen-android-booting-column-2.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 29 Jul 2010 21:12:45 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android Booting 解析, #1: 整體開機流程</title>
         <description>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）。桌面環境由一個名為...</description>
         <link>http://www.jollen.org/blog/2010/07/jollen-android-booting-column-1.html</link>
         <guid>http://www.jollen.org/blog/2010/07/jollen-android-booting-column-1.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 28 Jul 2010 14:20:44 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>文藝復興運動，軟體我能創作</title>
         <description> 自由，而不是免費啤酒 (註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 的出現，以及後來的...</description>
         <link>http://www.jollen.org/blog/2010/07/rinascimento-floss.html</link>
         <guid>http://www.jollen.org/blog/2010/07/rinascimento-floss.html</guid>
         <category>我的觀點</category>
         <pubDate>Sun, 18 Jul 2010 23:12:49 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android SystemServer 對 Linux 驅動程式程式碼風格的影響，一個簡單的概念</title>
         <description>今天為一家國際手機廠進行 Android 底層相關的內訓，課堂中提到一個概念，就是基於 Android 的 SystemServer 架構，可以藉由「架構面」改善過去 Linux 驅動程式在 Rentrant Code 議題面的程式碼模式。藉由模式的調整，可改善程式碼的效率。 過去，多個 Process 同時（Concurrency）存取同一份 Linux 驅動程式時，若驅動程式進行 Re-scheduling 操作，驅動程式的 Driver Method 就會重覆進入，因此需要考量做同步控制。 若是藉由 SystemServer 的架構，也就是「Single Process 存取驅動程式」，就能簡化重覆進入的議題。如下圖所示。 這是一個很簡單的模型，在 Middleware 層面，透過「限制應用程式的模式」來達到簡化重覆進入的議題。以 Android 作業系統為例，SystemServer 可以扮演這個「Single Process」的角色。當然，也可以設計成一個獨立的「My SystemServer」，根據對問題的分析來決定要修改 SystemServer，或是建立 My SystemServer。 對應用程式來說，只需要透過 IPC...</description>
         <link>http://www.jollen.org/blog/2010/07/how-android-systemserver-change-code-style-of-linux-driver.html</link>
         <guid>http://www.jollen.org/blog/2010/07/how-android-systemserver-change-code-style-of-linux-driver.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 08 Jul 2010 00:02:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>最近的新玩具，研發中的 Android 手機</title>
         <description>最近有關 Android 的大新聞，大概就是 Froyo 的發佈消息了。有在關心 Android 部落格的朋友應該都已經都看到這則消息了，Android 2.2（Froyo）的程式碼已經正式發佈，除了釋出大家最關心的 Dalvik JIT Compiler 外，也加入了 V8 Javascript Engine。又有工作要做囉。 小弟也順勢發佈一張即將推出的一款 Android 樣機照片，目前這款樣機已進入試產階段，不過，這是一個解決方案平臺，並不是正式發行的終端產品。 未來，使用這個平臺，將可以達到一些快速開發的需求。在這款平臺上，也會進行一些 Enhanced API 的開發，以協助廠商開發自有特色的應用軟體。目前正在持續進行產品的規劃，以及後續的開發準備工作。希望能加速技術面的發展，未來才能繼續和大家分享最新進展。...</description>
         <link>http://www.jollen.org/blog/2010/06/my-new-android-solution.html</link>
         <guid>http://www.jollen.org/blog/2010/06/my-new-android-solution.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 30 Jun 2010 23:46:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>MeeGo 1.1 展新頁，首屆 MeeGo 研討會將於11月份舉辦</title>
         <description>MeeGo 開始 1.1 版的開發了。 今年二月份才剛宣佈的 MeeGo 作業系統，已經進入 1.1 版的重要階段了。由 Moblin 與 Maemo 二個 software stack 所合成的 MeeGo 作業系統，最初的焦點是放在 Netbook 硬體，主要在提供更好的使用者經驗。 根據 MeeGo 的 roadmap 指出，今年十月將釋出 MeeGo 1.1。新版本的 MeeGo 將會佈署重兵在「Handset」裝置，令人期待，相信會是一個重要的發行版本。另外，手機作業系統整合「Web Runtime」已經是一個大趨勢了，MeeGo 1.1 也不缺席，根據 MeeGo 官方發佈的 Roadmap 來看，MeeGo 1.1 將加入 Web Runtime...</description>
         <link>http://www.jollen.org/blog/2010/06/meego-get-new-page-started-in-handsets.html</link>
         <guid>http://www.jollen.org/blog/2010/06/meego-get-new-page-started-in-handsets.html</guid>
         <category>其它</category>
         <pubDate>Wed, 23 Jun 2010 22:44:47 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 系統管理雜記, #4: C 如何取得 property</title>
         <description>上一則日記提到 Android property 的設定。在 Android 作業系統裡，取得 property 是很重要的工作。不管是 Android 框架層（使用 Java 語言），或是 Native 層（使用 C/C++ 語言），都可以看到讀取 property 的程式碼。 以下是一段簡單的範例程式，用以說明如何用 C 來讀取 Android 系統的 property： /* * Copyright (C) 2010 The Mokoid Open Source Project * * Licensed under the Apache...</description>
         <link>http://www.jollen.org/blog/2010/05/android-getproperty-using-c.html</link>
         <guid>http://www.jollen.org/blog/2010/05/android-getproperty-using-c.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 21 May 2010 18:19:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>更新 MokoidBoard (DMA-6410L) 至 Android 2.1 (Eclair)</title>
         <description>MokoidBoard 是基於 DMA-6410L (S3C6410) 的一款開發板，目前使用在仕橙3G教室的大部份訓練課程裡，目前已經將 Android 2.1 (Eclair) 移植至 MokoidBoard 上。開發板使用者或是課程學員，同樣請使用 [Mokoid] product tree 即可編譯。 升級 Android 2.1 步驟如下 以下步驟提供給 MokoidBoard 使用者參考。依此步驟即可將您的 MokoidBoard 升級 Android 2.1。 圖一：Android 2.1 圖二：Home Screen 1. 準備 Android 1.6 原始碼 請備妥 MokoidBoard CD，將 Android 1.6...</description>
         <link>http://www.jollen.org/blog/2010/05/update-mokoidboard-to-eclair.html</link>
         <guid>http://www.jollen.org/blog/2010/05/update-mokoidboard-to-eclair.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 11 May 2010 12:24:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 系統管理雜記, #3: init.rc 與 setprop</title>
         <description>今天在上海進行「Android Framework &amp; HAL 軟硬整合」培訓課程，課程中提到 init.rc 的用途，因此在此做一個紀錄。init.rc 是 Android 作業系統的 initial script，在開機時由 init 讀取並執行 init.rc 裡的命令。Android 的 init.rc 使用的的語法稱為 Android init language，有別於傳統 Embedded Linux 採用 shell script 的方式。 在 init.rc 裡找到類似以下的命令片斷： on boot setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop...</description>
         <link>http://www.jollen.org/blog/2010/04/android-initrc-setprop.html</link>
         <guid>http://www.jollen.org/blog/2010/04/android-initrc-setprop.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 24 Apr 2010 21:57:27 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 觀念解析, #1: Zygote Mode</title>
         <description>Android 作業系統開機時，會經由 init.rc 來啟動許多外部程式，其中有一個最重要 process 稱為 Zygote。Zygote 是 Android 的 monitor process，它主要負責二項工作： 1. 啟動 system server 2. 執行 Android 應用程式 「System Server」是由 Zygote 所建立的另外一個 process，建立 system server 的方式是使用典型的 Linux system call - fork()。當 Zygote 成功建立 system server 後，便進入 socket listening...</description>
         <link>http://www.jollen.org/blog/2010/04/android-concept-1-zygote-mode.html</link>
         <guid>http://www.jollen.org/blog/2010/04/android-concept-1-zygote-mode.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 05 Apr 2010 15:14:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>iSuppli公佈2009年全球手機出貨量</title>
         <description>iSuppli在2月25日公佈了2009年手機出貨量研究報告，其中包含了關於全球市場與中國市場的統計。簡單摘錄重點數字如下： 1. 2009年全球整體手機出貨量為12億部 2. 承上，中國整體出貨量為4.04億部，佔整體份額33.7%，達三之一 3. 承上，首次來到4.0億部的規模 4. 承上，以成長率來看，到二零一二年，中國整體出貨量將來到5.0億部 5. 在中國的手機業產裡，「手機設計」公司是相當重要的一個環節。二零零九年，由手機設計公司出貨的手機為2.44億部，佔中國整體出貨量的60%，意謂著，有超過一半的手機是由手機設計服務公司出貨。 當然，上述的4.04億部，還包含了「外銷」手機；若以「本土銷售」來計算，數量大約是2.4億部。2010年本土銷售預測成長為11%，即2.66億部，這是feature phone加smart phone的數字，若只計算smart phone的銷售，2010年smart phone的出貨量是2600萬部以上。近期曾看到有關smart phone與feature phone的成長預測報告，但未有正式數據，故不引用。 中國的手機設計服務公司扮演大推手 這些手機設計服務公司的商業模式是，直接為白牌或本土品牌提供設計方案，例如：手機板 (PCBA)。手機設計服務公司具備高效率與客製化服務能力，成為中國手機產業的重要成長推手。...</description>
         <link>http://www.jollen.org/blog/2010/03/isuppli-2009-phone-global-market.html</link>
         <guid>http://www.jollen.org/blog/2010/03/isuppli-2009-phone-global-market.html</guid>
         <category>其它</category>
         <pubDate>Fri, 26 Mar 2010 16:50:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android Framework in a Nutshell：台北場演講順利舉辦</title>
         <description>幾個月前的一則日記，紀錄了「堅果殼精神」的起源，經過數個月的籌劃，第一場「Jollen 的 Android Framework in a Nutshell」演講終於順利結束。距離 [Android Framework in A Nutshell 講題規劃完畢]，到第一場演講正式舉辦，間隔近一個半月的時間，感謝協助本活動的幾位幕後人員，才能使這個活動順利進行。 這次的演講，除了以提及的「堅果殼」精神分享技術研究心得外，也在實現另外一個自已的理念：以半課程形式呈現演講。 半課程形式的意思是，以演講的舉辦形式，加上課程形式的內容，融合演出。演講活動，是啟發思考不可或缺的活動，一場好的演講，有時扣人心弦、有時發人省思，講者也能儘情演出、暢談自已的理念；課程或教育訓練，則是在傳遞知識，設法以授課技巧或教育方法，達到潛移默化的效果，這是授業者的工作。形式與目的大有不同。 如果「演講」又要能達到一部份「課程」的效果，就必須專注在內容本身，也就是著重於技術本身的說明；同時，事前的妥善規劃也很重要。主題的規劃必須客觀大於主觀，才能有課程的感覺。再者，這種形式，讓講者能以更輕鬆的方式進行，就像演講般，帶入一些個人想法，或是加入一些經驗談。 當天也向與會朋友預告了「Dalvik VM in A Nutshell」，希望工作之餘，繼續經營這顆堅果殼。 延伸閱讀 * 2010.1.3: 「Jollen 的 Android Framework in a Nutshell」演講 * 2010.1.26: 「Jollen 的 Android Framework in a Nutshell...</description>
         <link>http://www.jollen.org/blog/2010/03/jollen-android-framework-nutshell-taipei.html</link>
         <guid>http://www.jollen.org/blog/2010/03/jollen-android-framework-nutshell-taipei.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Wed, 24 Mar 2010 11:49:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>山寨軍品牌革命：下一個山寨影響力</title>
         <description>文／Jollen Chen（原文刊登於 CTimes零組件雜誌2010年3月號） 因為聯發科的解決方案、低價手機、不斷創新的外觀設計、龐大的內需市場以及技術螞蟻大軍等要素，造就第一個深圳手機產業的奇觀「山寨機」。在抄襲與非正統的「模式」下所開發與製造的手機，就被暱稱為「山寨機」，意謂拷貝與強取之意。 過去也曾經在本論壇提到的本土品牌廠天宇朗通，是以山寨機起來，轉型為本土品牌製造商的代表。過去一年來，因為受到 Android 開放平臺的影響，讓這批所謂的山寨大軍開始思考國際化與品牌化的道路。Android 作業系統讓這些手機商感受到「自主」的力量，這個力量可以由以下二個技術層面來討論。 第一、開放的作業系統，讓山寨手機商開始有了能「自由使用」的軟體；使用這個開發軟體，便可以不會「直接」受到軟體原廠的控制與限制，在產品開發上有了更大的自由度。第二、開放的作業系統，讓山寨手機商能開始真正思考，「構建自有軟體團隊」的可行性與做法；自有的軟體團隊，可以針對市場或客戶的需求，進行開發與軟體的客製化。 由此看來，「使用上的自由」以及「針對市場做軟體客製化」是山寨轉型需要掌握的二個力量；另人振奮的是，山寨大本營所在的深圳，有了更成熟的產業與資金環境，給了新創自有品牌產品一個難得的好機會。過去山寨品牌化都是個案，現在山寨品牌化已經變成一個現象，氛圍已經形成，許多山寨機製造商對於「自有產品」、「自主解決方案」以及「自有品牌」展現強烈的企圖力，未來將成為不可漠視的力量，山寨大軍的轉型，成為下一個手機產業的關鍵影響力。 山寨品牌化，以及走向國際銷售，供應鍊管理是首要加強的能力。借助台灣供應鍊及供應鍊管理能力，可使山寨品牌化的腳步跨出大步。具體實行上，提昇供應鍊端的價值是必要工作，為不致淪為單純的零件供應商，可以思考幾個具體的做法，由小地方逐步完善。單純就技術面來看，幾個提昇價值的具體做法如下。 第一、提供關鍵零組件更精緻的軟硬整合服務，以服務增加本身價值，並思考開源模式的助益或可能帶來的影響力。第二、提供更完整的平臺解決方案，形式上更像是一個 turnkey key solution 或是公板，這方面台灣有許多掌握關鍵技術的硬體廠，都有很不錯的做法。第三、為產品製造應用軟體，模式上可以和硬體綁定銷售。 山寨大軍若能成功帶起品牌革命，成功走向品牌化與國際化，這個影響力對大家都是有助益的，若能正面看待、樂觀因應，這又是一個開放平臺潮流裡的一個大機會。...</description>
         <link>http://www.jollen.org/blog/2010/03/shenzen-branding-road.html</link>
         <guid>http://www.jollen.org/blog/2010/03/shenzen-branding-road.html</guid>
         <category>我的觀點</category>
         <pubDate>Tue, 23 Mar 2010 18:02:12 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>HAL Stub 的測試程式範例：Led.c</title>
         <description>近期進行有關 MokoidBoard 的平臺開發，MokoidBoard 的目的是打造一個「Android 框架與底層」專用的學習平臺，主板的部份是基於 Samsung S3C6410 處理器。目前除了計畫以 S3C6410 打造手機方案外，還有一個一直很想實現的理念：教育訓練方面，提供品質良好、架構完善的範例程式碼。一些 dirty code 對於初步學習，並了解硬體是很有幫助的；但入了門，總是要持續進步、精益求精，研讀架構完善的高品質程式碼，就是煅煉火候的好方法。 目前在 MokoidBoard 上提供的 LedTest 範例，是透過 ServiceManager、LedService 以及 HAL Stub 等觀念所設計的「LED 控制程式」。如圖，LedTest 執行時，會出現一個巨大按鈕，按了後，便會將開發板上的第一個 LED 燈點亮。 範例程式碼並不難讀，比較難懂的是 Android 框架與 HAL 架構的觀念，還有一些設計原理。這些觀念，在上週的 Android Framework in a Nutshell 演講做了一個整體性的介紹。 在開發階段，「如何測試 HAL...</description>
         <link>http://www.jollen.org/blog/2010/03/write-hal-stub-testbench.html</link>
         <guid>http://www.jollen.org/blog/2010/03/write-hal-stub-testbench.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 17 Mar 2010 22:52:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 系統管理雜記, #2: Java Package 與 Jar File 對應設定</title>
         <description><![CDATA[經由 [Mokoid] 範例，我們可以學習到擴充（Extent）Android 框架的做法。搭配 Product Tree 的方式，我們將 LedManager 與 LedService 二個類別編譯成獨立的 jar 檔（mokoid.jar），mokoid.jar 會被 Android build system 自動佈署到 system.img 裡（system/framework/mokoid.jar）。 因為 mokoid.jar 裡的類別沒有做 preload，並不是「preload class」，所以需要額外的系統設定，才能讓 Android 作業系統找到 LedManager 與 LedService 二個類別。在 Mokoid 範例中，找到一個名為 com.mokoid.server.xml 的設定檔，內容如下： &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;permissions> &lt;library...]]></description>
         <link>http://www.jollen.org/blog/2010/03/java-package-jar-file-mapping.html</link>
         <guid>http://www.jollen.org/blog/2010/03/java-package-jar-file-mapping.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 02 Mar 2010 22:45:09 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Override Context.getSystemService()</title>
         <description>Context.getSystemService() 是一個很重要的 API，也是「Android 應用程式控制硬體」的起點。在一個開發項目中，如何擴展 getSystemService() 的實作成為一個重要的課題。 幾天前與客戶進行技術討論時，適巧討論到這個議題，因此在這裡做一個簡單的紀錄與大家分享。應用程式要存取手機上的 Sensor 裝置時，須取得 SensorManager 物件，程式寫法如下： public class mokoidSensor extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); 　 SensorManager sensor = (SensorManager)getSystemService(SENSOR_SERVICE); sensor.getSensors();...</description>
         <link>http://www.jollen.org/blog/2010/02/override-context-getsystemservice.html</link>
         <guid>http://www.jollen.org/blog/2010/02/override-context-getsystemservice.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 26 Feb 2010 22:12:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android Framework「專案啟動」顧問方案：技術、工程與管理 Start-up 服務</title>
         <description>為什麼要研究 Android Framework？這是一個軟體工程以及專案管理面的問題。Android Framework 是 Application Framework（應用軟體框架），所謂的 Framework 定義上指的是未完成（incomplete）或是不完善（not ready-to-use）的軟體程式庫（嚴格來說是 class library）。 近期收到有關「如何發展 Android 產品」的需求有增多的趨勢，而要解決的最核心問題就是「研究 Android Framework」。雖然目前與一些訓練單位合作，提供許多 Android Framework 方面的課程，但因為都是屬於純技術面，還缺少軟體工程以及專案管理面的內容，尚有不足的地方。 有鑑於此，花費近一個月的時間，整理了一套「標準顧問方案」為企業客戶提供這方面的 On-site 服務，以補齊不足之處。這套顧問方案共分為 5 個層面，並定名為「Android Framework 專案啟動顧問服務」，詳細說明如下。 Framework 是未完成品 「Framework 是參考實作、未完成品。」這是小弟過去在許多演講場合，和大家分享的觀念。 1. Framework is incomplete. Framework 本身是不可用的，需要強化或填寫 framework 的空白，並設計相對應的應用程式，此時 framework...</description>
         <link>http://www.jollen.org/blog/2010/02/consulting-android-framework-project-startup.html</link>
         <guid>http://www.jollen.org/blog/2010/02/consulting-android-framework-project-startup.html</guid>
         <category>其它</category>
         <pubDate>Sun, 14 Feb 2010 15:48:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 系統管理雜記, #1: 關於 android.uid.system 與 AID_SYSTEM</title>
         <description><![CDATA[在 [Mokoid] 的 LedTest 範例裡，找到 [AndroidManifest.xml] 檔案。這個檔案為應用程式的「交貨清單」；在開發 LedTest 的過程中，我們加入了一個屬性如下： &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mokoid.LedTest" android:sharedUserId="android.uid.system"&gt; 原來，ServiceManager 會去檢查應用程式的權限；Android 作業系統會根據 UID 做權限管制，這裡所講的 UID 就是 Linux 系統管理面所討論的 User ID，即使用者 ID。在 [frmeworks/base/cmds/servicemanager/service_manager.c] 裡，找到這段實作： int svc_can_register(unsigned uid, uint16_t *name) { unsigned n; 　 if ((uid == 0)...]]></description>
         <link>http://www.jollen.org/blog/2010/02/android-uid-system.html</link>
         <guid>http://www.jollen.org/blog/2010/02/android-uid-system.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 09 Feb 2010 15:46:07 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>MOSP: Mokoid Project (Mokoid Open Source Project) 上線</title>
         <description>為了能在「Jollen 的 Android Framework in a Nutshell 演講」上搭配範例做講解，因此「特製」了一個 LedManager 範例；此範例原來是「Android 框架與驅動程式整合: HAL 原理與實作訓練」培訓課程的實作範例，目前計畫以此範例的部份內容做為演講材料。歡迎有意參加 Jollen 的 Android Framework in a Nutshell 演講的朋友，事先下載 Mokoid 程式碼。 Mokoid 提供一個 LedTest 範例程式，同時，LedTest 也是 Mokoid 專案目前所提供的第一個「近乎完整」的範例。請大家參考 apps/LedTest/src/com/mokoid/LedTest/ 裡的程式碼。Mokoid 專案的第二個範例，計畫是「MotorManager」，目前仍處於測試階段，預計在《台北場》演講時釋出。 Mokoid 的目的是提供「教學開發板」一套完整的 architect code 供實驗課程使用，或是搭配正課做原理教學，當然，首要目的是應用在自已的培訓課程上。主要的理念是「去除使用 dirty code...</description>
         <link>http://www.jollen.org/blog/2010/02/mokoid-project-is-up.html</link>
         <guid>http://www.jollen.org/blog/2010/02/mokoid-project-is-up.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 08 Feb 2010 22:55:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Android Framework Introduction」講座</title>
         <description>Android Framework 技術的重要性日漸提高，研究 Android Framework 架構或是內部結構成為一項重要的工作。明天（2/2）受邀至鴻海土城民生廠進行一場訓練課程，主題是「Android Framework Introduction」；議題雖然是「introduction」，但突然有個想法，希望能做更深入的 introduction。正好近期在整理研究資料，所以把抓出的議題也和大家分享。計畫介紹的技術主題（Features）如下： 1. Android Framework Features SystemServer &amp; ServerThread Main Thread android.app.Activity 與 android.app.Service Android Process 模式 ServiceManager 與 getSystemService API JNI &amp; Native Method Blocking &amp; Long Operations VMThread &amp; Thread Zygote...</description>
         <link>http://www.jollen.org/blog/2010/02/android-framework-foxconn.html</link>
         <guid>http://www.jollen.org/blog/2010/02/android-framework-foxconn.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 01 Feb 2010 23:58:01 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Jollen 的 Android Framework in a Nutshell 演講」講題規劃完畢</title>
         <description>從去年就開始構思的「Jollen 的 Android Framework in a Nutshell」演講，終於在上週六正式完成講題規劃了。初版講稿也開始進入檢查階段，第一場演講預估在二月底或三月初舉行，詳細的時間與地點，稍後將發佈於演講活動官網 [Jollen&apos;s Android Framework in a Nutshell 演講]。 「In a Nutshell」是本演講的核心理念，也是規劃講稿時所依循的精神；關於堅果殼精神，可參考先前日記 [「Jollen 的 Android Framework in a Nutshell」演講] 的說明。 講題的規劃將以一個實例「揭開」Android 框架的黑盒子、將 Android 結構做展開的動作，並分別介紹每個層面的技術重點；希望藉由這個精心規劃的演講活動，能幫助對 Android 框架與系統底層有興趣的朋友，有效率地掌握技術重點。...</description>
         <link>http://www.jollen.org/blog/2010/01/android-framework-in-a-nuthsell-preview.html</link>
         <guid>http://www.jollen.org/blog/2010/01/android-framework-in-a-nuthsell-preview.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 26 Jan 2010 00:22:44 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OPhone SDN 徵文「JIL Mobile Widget: 我的第一堂课」</title>
         <description>去年 [OPhone SDN] 舉辦了一個徵文活動，因為對 BAE 技術的高度興趣以及好感，特別撰文，以另外一種角度來表達 JIL Mobile Widget 技術的定位，希望以深入淺出方式，將這個實用的好技術介紹給大家。稿件有幸被接受，請大家不吝指教 [JIL Mobile Widget: 我的第一堂课]。BAE 與 JIL Mobile Widget 的關係，在文末也做了簡單說明。...</description>
         <link>http://www.jollen.org/blog/2010/01/ophone-sdn-jil-mobile-widget.html</link>
         <guid>http://www.jollen.org/blog/2010/01/ophone-sdn-jil-mobile-widget.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Mon, 25 Jan 2010 13:57:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>首屆海峽Android技術及產業合作發展研討會：會後雜記</title>
         <description>這個月15日到北京參加「首屆海峽Android技術及產業合作發展研討會」，結果正值北京二十年來難得一見的大寒，白天的氣溫最低還來到了-10度C，整個城市都可以看到白雪，到小商店還買到了「結冰礦泉水」，實在是一個有趣的經驗。 關於這次會議的實況，在研討會官網以及媒體上，都有很詳細的報導，所以這裡僅補上一點會議雜記。這次的會議，下午場分做三個track（產業、技術與人才培養），我在技術與人才場各有一個session。在技術場部份，針對「Android對手機的技術趨勢與機會」做了演說，人才培養場則是討論有關創業機會的議題。 「Browser-based」是Android手機的技術趨勢之一，這是大家都不陌生的名詞，整合cloud computing到手機上，這也是一個關鍵技術。技術分會場中，我特別舉JIL的Mobile Widget技術做實例，介紹了這個技術帶來的優點，以及BAE將如何創造一個新的手機應用開發模式。 這次會議，根據估計，與會人數大約有500人。在會議的前幾天，正逢沸沸洋洋的Google事件，與一些朋友聊天時，不免談論到這個話題；不過，大家普遍認為這個事件並不影嚮Android的技術推展。以會議的討論氣氛來看，影響確實不大。 在「人才培養」分會場的部份，來自中正大學羅習五老師實驗室的「現場成果展」吸引不少人的目光，特別是「螢光棒」的創意應用，連媒體都特別來報導了。可見，「創意」是Android應用開發不能缺少的一個要素。...</description>
         <link>http://www.jollen.org/blog/2010/01/android-collaboration-beijing.html</link>
         <guid>http://www.jollen.org/blog/2010/01/android-collaboration-beijing.html</guid>
         <category>其它</category>
         <pubDate>Mon, 25 Jan 2010 13:43:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Jollen 的 Android Framework in a Nutshell」演講</title>
         <description>在堅果殼裡「In a nut shell」是一句英文片語，表示「簡單地說」的意思，與中文的「總而言之」有異曲同工之妙。如果上網搜尋，還可以找到這個片語來源：知名的長篇史詩「伊利亞德（Iliad）」曾被製作成體積迷你的手抄版本，正因為這個迷你的手抄版本小到能放進堅果殼裡（in a nut shell），因此這個片語就被引申為「簡單地說」之意。 知名的電腦書出版商O&apos;reilly就出版了一系列的「in a nut shell」。這個系列書藉的特色正如其名「簡潔、不托泥帶水」，「一頁抵十頁、一部抵十部」或許能說明堅果殼書的特色；意思是說，別人100頁的篇幅，往往堅果殼只需要10頁就足矣。事實上，這應該不誇張，因為現在很多書就喜歡拉篇幅、撐厚度；有些「用來佔地盤」的系列著作就更不用提了。不過，我們不該是以這種評論的角度，把堅果殼書跟其它書拿來做比較；因為，要出版一本著作，也不是簡單的事情，任何書都有它的參考價值、還有作者日以夜繼的心血在裡面，這些心血都應該被尊重。這樣的形容，單純為了說明「堅果殼書」的特色。 「寫一本堅果殼書。」是我很早的目標，雖然過去也寫了許多書，但都還達不到我想像中的堅果殼書標準。希望有朝一日能達成這個目標。 前天的日記曾提到，去年利用了七個月的時間在做「巡迴」，不過這是平常工作之餘的活動；「研究」佔了我日常工作大約50%-60%的時間，透過課程巡迴與演講，除了可以分享部份研究心得外，也有助於調整後續的研究進度。在這七個月的時間裡，大致上都把Android Framework的內部設計以及原理做了研究以及整理，對於整體框架的實作，也準備了一份簡報，希望可以用「堅果殼」的精神，化繁為簡，用一種簡而易懂的方式，將複雜的Android框架設計放進堅果殼裡。 有鑑於此，今年希望規劃大約3場演講，親身說法，為大家說明堅果殼裡的內容。 如何把龐大的Android框架，簡單表達，儘量簡化而保持原始精神，確實是一大挑戰，但也很有趣。希望「Jollen 的 Android Framework in a Nutshell」演講，能成功挑戰這個難題。目前正在規劃第1場堅果殼演講，歡迎大家提供意見供活動小組參考。活動時間將另行公佈，期望與大家交流，並不吝指教。...</description>
         <link>http://www.jollen.org/blog/2010/01/jollen-android-in-a-nut-shell.html</link>
         <guid>http://www.jollen.org/blog/2010/01/jollen-android-in-a-nut-shell.html</guid>
         <category>我的觀點</category>
         <pubDate>Sun, 03 Jan 2010 18:54:11 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #8: 實作 HAL Stub</title>
         <description>承日記「Android 的 HAL 技術, #6: 小結 HAL stub 實作步驟」與「Android 的 HAL 技術, #7: 取得 Proxy Object」。在了解基本的觀念，以及架構上的設計後，接著就可以開始實作 HAL Stub 了。以下是 LED Stub 的實作範例，將程式碼儲存為 led.c： static struct hw_module_methods_t led_module_methods = { open: led_device_open }; 　 const struct led_module_t HAL_MODULE_INFO_SYM = { common:...</description>
         <link>http://www.jollen.org/blog/2010/01/android-hal-stub-design-implement.html</link>
         <guid>http://www.jollen.org/blog/2010/01/android-hal-stub-design-implement.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 02 Jan 2010 23:31:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>二零一零新年快樂：新希望與期許！</title>
         <description>新的一年，祝福大家心想事成。開放源碼(Open Source)與開放平臺(Open Devices)是相當有意思的二個主題，今年，二零一零年，希望可以認識更多志同道合的朋友；也祝福大家，技術進步、研究豐碩。 今年，需要投注更多心力到Android相關的技術研究工作，以及產品規劃。去年，確實是頗為有趣的一年，自已也投入了相當多時間在技術研究、廠商交流以及教育訓練工作上。七個月多的時間，不斷巡迴台北、上海、深圳、北京四大城市，在這些城市進行Android以及Embedded Linux的培訓工作，其間，也和許多技術人員，以及廠商有許多交流，甚致深入的合作。 這段過程中，令人感受最深的，便是「快速成長」四個大字。 「二零零九年，大陸總計賣出一千三百萬輛台汽車。」有一天在前往北京首都國際機場的出租車上，所聽到的一段新聞。大陸目前約有一百家汽車廠，一般消費者，從下訂到取車，可能需要長達三個月的時間。在一些主要城市，整條路上的汽車經銷商，甚致沒有一家有「現貨」可供銷售。 若以每年中國經濟成長率超越美國約5%來計算，中國的GDP在二零二零年，將超過美國。以每年8%來計算，到時生產總額也將再翻一番。今年，二零一零年，中國也要做好GDP超越日本的準備。不過，畢竟經濟這件事也不是做為技術工作者的我，能通盤了解的，除了平日讀讀新聞、看看發佈數據外，還是專注在技術本業上更實際一些，所以，在這裡分享一個技術工作上的看法，供大家參考指教。 有關BAE的應用，今年可能得到大幅度的份額增長。BAE的全名是Browser based Application Engine。這並非很新潮的技術，在另外二大手機作業系統：Windows Mobile與Symbian上，也都有這樣的應用。BAE其實不只是在手持裝置上，在Web Service或是個人電腦上，也都能看到它的踪跡。 重視開放平臺的BAE應用，把它加入產品設計與規劃的要項，是過去我給一家廠商提出的建議。過去，Android Market是個棘手問題，但現在開始，情況會有所改變。這是獨立應用軟體開發商或獨立品牌的好機會。Android Market的發展看起來將有很大的突破； 目前，在我所參與的一個技術工作上，已經將資源的分配由框架與底層的驅動程式，部份轉換到應用(Applications)的開發與研究工作上，就是希望在應用開發上加重比重。 上述提到的BAE技術，因為改變應用軟體開發的模式，也要多加的重視。 去年十二月，在教育部嵌入式軟體聯盟的一場開放手機研討會上，我邀請了北京的eoeAndroid社群做了一次遠端視訊連線，為現場同學做了一些Android方面的介紹。「社群是開放平臺的靈魂。」因為Android技術，出現了許多技術社群，「熱情」是他們的共通點。從eoeAndrod的談話中，可以感受到這點，以及技術研究的精神「自身投入、明確務實」。台灣的0xlab也是一個典範，我們看見了追求技術卓越的熱情與貢獻，還有務實的精神。 因為Android的出現，eoeAndroid團隊一些人辭去他們原本的工作，一起為建立社群而努力。在周遭所認識的朋友裡，他們並不是唯一有這種堅定決心的工作者。 回顧過去的工作，深刻感受到不同城市間的工作文化、技術發展重點或是想法，都有很不一樣的特色；技術研究是個有趣的工作，給自已的期許是，當一個稱職的執行者，努力並有效率地完成專案。...</description>
         <link>http://www.jollen.org/blog/2010/01/happy-new-year-2010.html</link>
         <guid>http://www.jollen.org/blog/2010/01/happy-new-year-2010.html</guid>
         <category>我的觀點</category>
         <pubDate>Fri, 01 Jan 2010 15:14:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #7: 取得 Proxy Object</title>
         <description>延續上一則日記的介紹，在完成HAL Stub的實作後，緊接著的工作就是撰寫Native Service。 談了許多「Android Service」以及「HAL Stub」，這裡再補充一點。Android作業系統啟動時，會執行一個process稱為servicemanager。Servicemanager process負責管理、提供並保存「Android Service」。Android Service為Java層，因此接下來會透過JNI來呼叫C/C++層的Native Service。 廣義來說，Native Service也提供Runtime的功能，即Core Library層。Runtime的重要工作之一為「取得HAL Stub所提供的API」，因此這是撰寫完整Native Service的前哨站。 什麼是 Proxy Object？ Native Service呼叫HAL的hw_get_module() API取得stub物件，即HAL_MODULE_INFO_SYM。 HAL會去尋找HAL Stub檔案，HAL Stub是以*.so檔的形式存在，並佈署於/system/lib/hw目錄下。HAL會根據module ID以及”ro.product.board”去尋找相對應的*.so檔，以我們的LED範例來說，HAL會回傳回led_module_t結構的物件（an instance of led_module_t class）給Native Service。 我們把HAL回傳給Native Service的資料稱為「Stub Object」或是「Proxy Object」，即先前所提及的「代理人」觀念。Native Service透過代理人與 Linux 驅動程式溝通。這個過程的觀念如圖1所示。 圖1：取得Proxy Object hw_get_module()，這是HAL所提供的API，也是實作HAL...</description>
         <link>http://www.jollen.org/blog/2009/12/android-hal-get-proxy-object.html</link>
         <guid>http://www.jollen.org/blog/2009/12/android-hal-get-proxy-object.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 26 Dec 2009 23:36:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #6: 小結 HAL stub 實作步驟</title>
         <description>在討論了不少基本概念後，在這裡小結一下 HAL stub 的實作步驟。HAL stub 的起頭是「繼承 HAL 的 struct hw_module_t」，這是 HAL stub 的設計理念，除了讓架構的條理分明外，也容易做後續擴充與維護。以下改用實用上的習慣用語，小結一下 HAL stub 實作步驟，並提供一段例。 HAL Stub 實作步驟(Implementation) 1. 設計自已的wrapper data structure * 編寫led.h * 定義 struct led_module_t * 框架提供的 struct hw_module_t 必須放在第一個 field、並取名為 common * 請參考 hardware/hardware.h 2....</description>
         <link>http://www.jollen.org/blog/2009/12/android-hal-stub-implementation.html</link>
         <guid>http://www.jollen.org/blog/2009/12/android-hal-stub-implementation.html</guid>
         <category></category>
         <pubDate>Fri, 04 Dec 2009 22:49:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #5: 繼承 HAL 的 struct hw_module_t</title>
         <description><![CDATA[撰寫 HAL stub 除了要具備系統程式（systems software）的觀念外（這是基礎），「思考方式的改變」也是重要的一堂課。 思考方式哪裡不同？ 實作 HAL stub 的首要工作是「繼承 struct hw_module_t 抽象型別」。Class（類別）屬於一種抽象型號（ADT）。 首先，引入最重要的標頭檔（header file）： #include &lt;hardware/hardware.h&gt; 接著，再定義一個「MODULE ID」。這個 mdoule ID 將會被 HAL 層用來尋找 HAL stub。我們舉最簡單的裝置類型「LED」來做為範例： #define LED_HARDWARE_MODULE_ID "led" 繼承 HAL 的 struct hw_module_t 抽象型別（即 base class 的概念），並取名為 struct led_module_t（即...]]></description>
         <link>http://www.jollen.org/blog/2009/12/android-hal-derived-c-language.html</link>
         <guid>http://www.jollen.org/blog/2009/12/android-hal-derived-c-language.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 01 Dec 2009 22:09:14 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>HAL stub的商業價值與想法</title>
         <description>HAL stub是與硬體關係最密切的軟體 HAL stub因為是以獨立的*.so檔形式，佈署於/system/lib/hw目錄下，同時，執行時期（runtime）是以提供操作（provide operations）的方式來運作，所以可以達到HAL的目的之一，即界面（interface）的設計。 再加上HAL stub是與硬體關係最密切的軟體，所以讓我們有了不同的思考。 Android分支(branch)工廠 定義好界面再實作stub，這樣的架構讓stub，也就是*.so檔，可以元件化（component）。HAL以物件導向的思考方式設計與實作。元件可以抽換或重用，再配合過去提到的「Android分支建立」觀念，「HAL stub 服務工廠」的想法便油然而生。 提供HAL(與*.so)代工服務與解決方案 由驅動程式專業公司進行設計與開發，即軟體服務的一種想法，基於： 1. HAL stub軟體可封閉源碼，因此也較利於商業模式推展 2. 提供關鍵IC零組件封閉原始碼的HAL stub軟體 (Proprietary software) 3. 不但是「軟硬整合」，也是Android綁定硬體平臺的一種策略 當然，想法往往都是「有感而發」，現實面能不能執行又是一回事了。 ;-)...</description>
         <link>http://www.jollen.org/blog/2009/11/hal-proprietary_software.html</link>
         <guid>http://www.jollen.org/blog/2009/11/hal-proprietary_software.html</guid>
         <category>我的觀點</category>
         <pubDate>Sun, 29 Nov 2009 14:20:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #4: Android Service 與 HAL Stub</title>
         <description>目前為止，我們提了「HAL Stub」的觀念，了解到 stub 是一種代理人的觀念，架構設計上，採取「provide operations」與「callback」機制，而不是採用「module」即 library 的 direct function call 做法。 接著，又提到「採取Service架構的方式」。在講解HAL stub的實作細節前，需要大略了解一下Android Service與HAL stub的關係；因為，架構設計上是「透過Android Service取得HAL stub提供的operations」。 取得HAL stub operations的程式碼實際上是實作在Native Service裡，相關的實作細節留待後續再做說明。 Android Service與HAL stub的關係 應用程式（Application）使用了Manager API，Manager API經由Android Service來到Native Service層，最後Native Service層再引用（invoke）HAL stub。這個過程，總共經過了以下3個介面，如下圖。 1. 這是一個 remote interface，應用程式與Android Service在不同的 process 上執行。 2. 這是...</description>
         <link>http://www.jollen.org/blog/2009/11/android-hal-android-service-hal.html</link>
         <guid>http://www.jollen.org/blog/2009/11/android-hal-android-service-hal.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 28 Nov 2009 21:56:57 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #3: 小探Android Service與Native Service</title>
         <description>前二篇教學提到「採用Service架構整合HAL的做法」。這裡再針對HAL如何採用Service架構與框架整合做一個概念的介紹。 Android的Service分為二種：Android Service與Native Service。 Android Service Android Service又稱為Java Service，是實作在框架層（framework）裡的「Server」。這裡所講的「Service」是System Service，又稱為Server，與應用程式設計上所討論的Service（android.app.Service）不同。Android Service以Java撰寫。 Native Service Native Service則是實作在Runtime層裡的Server。架構設計上，我們有二個選擇，一個是實作Android Service、再透過JNI與HAL stub溝通；另一個選擇是，跳過Android Service，讓Application（Manager API）直接與Native Service溝通。 未來的Android發展趨勢，應會以第二種做法為主，即Manager API直接與Native Service溝通，以達到更好的效能表現。 延伸閱讀 * 2009.10.14: Android 的 HAL 技術, #2: 採用Service架構方式 * 2009.10.08: Android 的 HAL 技術, #1: 簡介與發展現況...</description>
         <link>http://www.jollen.org/blog/2009/11/android-hal-android-native-service.html</link>
         <guid>http://www.jollen.org/blog/2009/11/android-hal-android-native-service.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 27 Nov 2009 01:59:51 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Symbian釋出microkernel</title>
         <description>今天重要事，與開放手機有關，但不是Android的新聞，「Symbian」幾天前發佈的新聞稿指出「EPL RELEASE OF MICROKERNEL DEMONSTRATES PROGRESS TOWARDS OPEN SOURCE GOAL」。 自從Nokia收購Symbian其餘股權後，便開始計畫將Symbian開放、成為一個開放手機平臺，經過一段時間，Symbian Foundation幾天前達成一個重要的里程碑。如上述新聞稿所述，Symbian的microkernel（EKA2）以EPL（Eclipse Public License）釋出部份套件的原始碼，其中包含了Hardware Services套件。 開發者現在可以由[developer.symbian.org]下載原始碼，並且可使用模擬器（Qemu）進行試驗。 一個比較有趣的地方是，在眾多的FOSS授權裡，Symbian Foundation選擇以EPL授權釋出原始程式碼。EPL與GPLv2或v3授權都是不相容的，其中一點是，只有該軟體的擁有人（owner）或是已經得到了owner的許可，其他人（指contributors）才能將程式碼放到其它FOSS授權的軟體裡使用。也就是說，我們不能自已把EKA2的程式碼，放進Linux kernel或BSD kernel裡使用。此外，貢獻者（contributors）也不能暱名發佈程式碼，在EPL的條款裡，貢獻者需要具名。 另外一個EPL與現有其它FOSS授權不同的地方是「衍生著作（derivative work）」的定義。EPL不以程式庫的連結（linking）來定義衍生著作，而是以美國著作權法上的說明來定義。也就是，以獨立形式（例如module）實做了一個EPL軟體上所沒有的功能時，這個module就不算是一個衍生著作。 是否為衍生著作關係到授權條款，只要是衍生著作都必須是EPL授權。也就是，自已設計的獨立模組可以隨意授權。...</description>
         <link>http://www.jollen.org/blog/2009/10/symbian-release-microkernel.html</link>
         <guid>http://www.jollen.org/blog/2009/10/symbian-release-microkernel.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Sun, 25 Oct 2009 22:28:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #2: 採用Service架構方式</title>
         <description>在上一篇日記裡，我們介紹了Android HAL的大概念。接下來，將慢慢地進行細部的分析與研究。首先，我們先針對HAL的現況先做討論，後續再針對HAL的設計提出觀念。 圖1：採用Service架構與不採用Service架構 如圖1，應用程式存取驅動程式的過程，可區分為以下二種： 採用Service架構方式 不採用Service架構方式 採用Service架構方式是比較標準的做法，即圖上藍色線的部份；紅色線的部份為非Service架構式的做法。先前，在「Android 驅動開發關鍵技術：HAL及移植要領」演講中最後所提出的一個LED範例，即是一種非架構式的做法，簡報上有一段範例程式碼，歡迎下載參考。 Android HAL Introduction: libhardware and its legacyView more documents from Jollen Chen. 採取Service架構的方式，是建議的做法，當然因為這是標準架構，也應該採用。 Service在Android框架裡的角色是「存取底層硬體」，往上層的話，可以和應用程式溝通。因此，採用標準的Service做法，好處是在資料存取（data communication）的處理較為系統化。這方面，Android提供了標準的處理架構，後續再進行討論。 圖上的「core libraries」即是Service程式碼的實作，也就是，Android應用程式透過JNI（Dalvik）來到Service這一層，再透過Service載入*.so檔；而非標準做法則是讓應用程式直接透過JNI來載入*.so檔。 不使用Service架構 紅色的過程，因為不使用Service架構，因此「框架整合」的工作量比較小，甚致大部份的實作都不需要改動框架本身。這樣的做法，就有點像是「跳過framework」的方式；相對的，此時應用程式開發者需要考慮的設計議題就比較多。 例如，當遇到block operation時，是否需要獨立的Java thread來處理？...</description>
         <link>http://www.jollen.org/blog/2009/10/android-hal-service-introduction.html</link>
         <guid>http://www.jollen.org/blog/2009/10/android-hal-service-introduction.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 14 Oct 2009 18:17:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 的 HAL 技術, #1: 簡介與發展現況</title>
         <description>Android 的 HAL（硬體抽像層）是 Google 因應廠商「希望不公開源碼」的要求下，所推出的新觀念，其架構如下圖。雖然 HAL 現在的「抽象程度」還不足，現階段實作還不是全面符合 HAL 的架構規劃，不過也確實給了我們很好的思考空間。 圖1：Android HAL 架構規劃 這是 Patrick Brady (Google) 在2008 Google I/O 所發表的演講「Anatomy &amp; Physiology of an Android」中，所提出的 Android HAL 架構圖。從這張架構圖我們知道，HAL 的目的是為了把 Android framework 與 Linux kernel 完整「隔開」。讓 Android 不至過度依賴 Linux kernel，有點像是「kernel independent」的意思，讓...</description>
         <link>http://www.jollen.org/blog/2009/10/android-hal-status-report.html</link>
         <guid>http://www.jollen.org/blog/2009/10/android-hal-status-report.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 08 Oct 2009 02:05:19 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>走入雲端的開發套件</title>
         <description>在 Linux for Devices 上的一則新聞「Embedded development kits link up to Amazon cloud」，開發板也趕流行，跑上雲端。 這是以 Debian Linux 為基礎的 Embedded Linux 開發套件，並且可以連接 Amazon 的 S3 cloud service。有趣的地方是，文中以「Embedded Cloud Computing」的方式來形容，令人有不同的發想空間。「Embedded Cloud Computing」是「連上雲端的嵌入式硬體模組」的概念。「自動化裝置」是一種嵌入式系統，讀了這篇新聞後，讓人有另外一種像想。 如果能把雲端服務，嵌入到一些自動化裝置裡，因為這類型的裝置通常不經由人類操作，所以等於進入了「設備自動連結雲端」的時代。自動化裝置可以主動將擷取的裝置，送上雲端、儲存、分析並加以應用。例如，設計一個可隨時發送座標的隨身模組。...</description>
         <link>http://www.jollen.org/blog/2009/10/embedded-cloud-computing.html</link>
         <guid>http://www.jollen.org/blog/2009/10/embedded-cloud-computing.html</guid>
         <category>其它</category>
         <pubDate>Thu, 08 Oct 2009 01:46:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#31: R.drawable 應用-如何使用NinePatch圖檔</title>
         <description><![CDATA[上一篇日記介紹了「如何製作NinePatch圖檔」，因此有讀者問到「如何寫程式」，因此特別補上這篇教學。 開始寫程式: HelloNinePatch 範例HelloNinePatch的實作方式如下。 Step 1. 建立一個新的Android專案，命名為HelloNinePatch。 Step 2. 將arrow.9.png托曳(drag)到HelloNinePatch專案裡的「res/drawable」目錄下。如圖1。 圖1: 將arrow.9.png放進res/drawable資料夾 Step 3. 修改UI（res/layout/main.xml），設計出上一篇教學(#30)裡的圖2畫面。main.xml的內容如下。 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" &gt; &lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="small world" android:textSize="12sp" android:background="@drawable/arrow" /&gt; &lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="big world" android:textSize="24sp" android:background="@drawable/arrow" /&gt;...]]></description>
         <link>http://www.jollen.org/blog/2009/09/jollen-android-programming-31.html</link>
         <guid>http://www.jollen.org/blog/2009/09/jollen-android-programming-31.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 20 Sep 2009 22:39:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>清華大學Android種子教學培訓課程: Day1 上課紀錄</title>
         <description> 第一天的「Android種子培訓課程」以應用開發為主軸，介紹了Android應用程式入門的課程。現場有許多大學的老師，因此在課程進行中，特別給了一些建議。針對Android應用程式入門教學來說，做「API走訪式」的教學比較無法切中正題，而且也讓課程顯得乏味。因此，我給了二點小建議： 1. Android應用的教學，以「應用程式的模式」為重心，因為Android應用程式的入門重點在於Activity/Service、R.java、XML layout、XML attributes、View（UI）、Intent等「模式」的觀念，所以最好不要採取API介紹式的教學方法 這裡的所提的「模式」即「撰寫程式」的方法。 2. 透過Android應用程式建立對框架（Framework）的基本認識。Android作業系統的一大重點在於「框架的設計」，而對應用程式進行較深度的分析，是了解框架設計的一個好方法。 例如，今天在課堂中所提到的「應用程式向框架取得（get）物件（object）」，而不是「應用程式自行建立物件（&quot;new&quot;一個object）」的觀念。另外一個觀念，則是「應用程式要避免建立物件」，這是Android Dev Guide提到的「為效能而設計」的第一個條文。 第二天的課程將會開始介紹Android開發平臺，並展示一些「Lab」範例。...</description>
         <link>http://www.jollen.org/blog/2009/09/nthu-android-training-day1.html</link>
         <guid>http://www.jollen.org/blog/2009/09/nthu-android-training-day1.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 08 Sep 2009 01:58:41 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>深耕校園、 清華大學Android種子教學培訓課程</title>
         <description>Android校園計畫 產學官三界過去在Android的發展做了很多腦力激盪的工作，這是一個很好的現象，有助於Android熱潮的延續，以及各界對Android作業系統的重視。提到Android研發能量的建立，最根本的治理方式是「深耕校園」。 因此，現階段要務是「深耕校園」。實際做法建議是「建立種子」。建立種子師資或種子學生，透過導入課程至大學課程的方式，讓大一與大二的學生「認識」並「開始接觸」Android作業系統；種子學生的建立，可以鎖定大三以上、研究生或是以實驗室為單位，做為培訓對象。這個階段的做法，可以建立採取「種子培訓營」的方式進行。 學生如果能被適當的訓練，就能將把創造力，或是想像力，轉換成「具體」的成果。一個實際的例子是，如果能訓練非資訊本科系的學生撰寫Android應用程式，學生才能有能力把想法轉換成「程式原型」、才能展現創意。因此「深耕校園」的目標應該是要更「普及」，而不是只導入本科系。 活動詳情可參閱嵌入式軟體聯盟網站，以下是課程資訊。希望藉由自已在教育訓練方面的經驗，貢獻棉薄之力。 課程簡介 本課程的目的是培訓大專校院之Android種子教學師資。課程針對Android系統，由底層框架、驅動程式、移植、到應用開發，做一完整的介紹，並利用OpenMoko FreeRunner手機為實驗平臺，實際動手實作。整個課程設計以符合業界實際需要為重點，藉由本課程之培訓，讓學校能充實Android研發能量，未來達到產學結合的效果。 時間：98年9月7日 (星期一) 至9月10日 (星期四) 地點：清華大學資訊電機館資工系3F 328室 資格：國內各大專校院教師或學生，對Android系統之教學及開發有濃厚興趣者 名額：40人 費用：NT$ 2,500 (含午餐、設備使用費、講義；報名後通知繳費) 主辦單位：教育部顧問室嵌入式軟體聯盟、清華大學電腦與通訊科技研發中心、清華大學資訊工程學系 協辦單位：Jollen’s Consulting、清華大學OpenLab 聯絡人： 吳少文小姐 Tel: 03-5742410 E-mail: swwu@mx.nthu.edu.tw...</description>
         <link>http://www.jollen.org/blog/2009/08/android-campus-plan-taiwan.html</link>
         <guid>http://www.jollen.org/blog/2009/08/android-campus-plan-taiwan.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 29 Aug 2009 11:36:16 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#30: R.drawable 應用-製作NinePatch圖檔</title>
         <description>什麼是NinePatch圖檔 NinePatch是一種「可延展」的PNG圖檔。NinePatch圖檔的用途是製作「可隨文字大小縮放」的圖片，如圖1。 圖1: 文字背景可隨著文字大小縮放 NinePatch是很有用的圖片格式，可做為widget的「背景圖」。如圖１的範例，其應用程式的設計如下： 文字部份使用TextView元件 使用TextView的XML attribute來設定文字大小 使用TextView的XML attribute來設定一張背景圖 使用NinePatch圖片做為背景圖，如此一來背景圖就可以隨著文字大小縮放 首先，第一個工作就是「製作NinePatch圖檔」，方式如下。 Step 1. 準備一張原始的PNG圖檔，如圖2。 圖2: 原始PNG圖檔（arrow.png） Step 2. 啟動Android提供的draw9patch工具，直接執行Android SDK tools/目錄下的draw9patch執行檔即可，如圖3。 圖3: Android SDK提供的draw9patch工具（點擊看原圖） Step 3. 開啟原始PNG圖檔，編輯圖檔，如圖4。 圖4: 開始編輯圖檔（點擊看原圖） 如何編輯NinePatch圖檔 NinePatch圖檔的製作方式是「繪製二條線」，分別在原始圖檔的上方與左方繪出二條「黑線」，黑線所交集的區域即為「可延展」區域。如下圖的粉紅色區域。 圖5: 定義延展區 「可延展區」是Android框架用來擺放文字的區域，換句話說，文字(TextView)只會被放置在粉紅色區域，並且擺放的原則是「對準粉紅區域的中心點」，即上下置中、左右也置中。非「可延展區」，即綠色部份，並不會隨著文字的大小縮放延展。所以： 1. 綠色區域是固定大小區域 2. 粉紅色區域是可延展區域、文字擺放於此 圖中的「二條黑線」是怎麼畫出來的呢？方式如下。...</description>
         <link>http://www.jollen.org/blog/2009/08/jollen-android-programming-30.html</link>
         <guid>http://www.jollen.org/blog/2009/08/jollen-android-programming-30.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 22 Aug 2009 23:05:27 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#29: HelloIntentWallpaper - 背景圖選擇器</title>
         <description>Android提供「SET_WALLPAPER」的內建Intent，當框架收到這個Intent時，就會啟動「背景圖選擇器」，讓我們選取新的背景圖。送出SET_WALLPAPER intent的程式寫法如下： Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER); startActivity(Intent.createChooser(intent, &quot;Select Wallpaper&quot;)); 根據Reference Guide的說明，SET_WALLPAPER會啟動一個內容選擇器，所以同時地，我們先呼叫createChooser()方法建立一個內容選擇器後，再送出Intent。 完整程式碼: HelloIntentWallpaper.java package com.moko.hellointentwallaper; 　 import com.moko.hellointentwallaper.R; 　 import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; 　 public class HelloIntentWallpaper extends Activity implements View.OnClickListener { /**...</description>
         <link>http://www.jollen.org/blog/2009/08/jollen-android-programming-29.html</link>
         <guid>http://www.jollen.org/blog/2009/08/jollen-android-programming-29.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 22 Aug 2009 22:52:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#28: HelloIntentSelect - 內容選擇器(Content Chooser)</title>
         <description>上一篇教學提到如何利用Intent實作「自動撥放」程式。而另外一個較具代表性的Intent應用就是「內容選擇器」。例如，要怎麼實作一個音樂撥放機呢？先說明音樂撥放器HelloIntentSelect範例的使用情境如下： 1. 執行HelloIntentSelect後，出現一個「撥放音樂」的按鈕 2. 按下按鈕後，選擇一個音樂檔撥放 實作「選擇音樂檔」的做法是使用Intent的「chooser」觀念。程式做法如下： 1. 建立action為ACTION_GET_CONTENT的Intent： 　Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 2.設定Intent的mime type，例如：設定Intent的mime type為聲音檔案： 　intent.setType(&quot;audio/*&quot;); 3.建立內容選擇器並送出Intent： 　startActivity(Intent.createChooser(intent, &quot;Select music&quot;)); 以上的程式是根據Android的Reference Guide寫出來的。當Intent action為ACTION_GET_CONTENT時，表示要根據mime type來「取得內容」(get content)，因此呼叫setType()方法，來定義內容的mime type。 定義好mime type後，再呼叫createChooser()方法來產生能取得此mime type內容的「選擇器」，簡單說，就是一個「檔案選取程式」。 利用Android的Intent觀念，我們以不到十行的程式碼實作了一個音樂撥放器。 Action的屬性寫法與常數寫法 Intent的action寫法有二種。第一種寫法是屬性(attribute)寫法，例如第一個HelloIntentDialer範例： 　dial.setAction(&quot;android.intent.action.CALL&quot;); 在「android.intent.action」套件(package)裡，定義了action的屬性。第二種寫法是常數寫法，例如第二個HelloIntentSelect範例： 　Intent intent = new Intent(Intent.ACTION_GET_CONTENT);...</description>
         <link>http://www.jollen.org/blog/2009/08/jollen-android-programming-28.html</link>
         <guid>http://www.jollen.org/blog/2009/08/jollen-android-programming-28.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 07 Aug 2009 23:13:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#27: 使用ACTION_CALL實作自動撥號: HelloIntentDialer</title>
         <description>HelloIntentDialer是一個自動撥號程式，執行時會自動撥號到指定的電話。這樣的程式要怎麼寫呢？先看到HelloIntentDialer.java的完整程式如下： package com.moko.hellointentdialer; 　 import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; 　 public class HelloIntentDialer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); 　 Intent dial =...</description>
         <link>http://www.jollen.org/blog/2009/08/jollen-android-programming-27.html</link>
         <guid>http://www.jollen.org/blog/2009/08/jollen-android-programming-27.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 07 Aug 2009 11:25:30 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：從Android看小筆電的機會</title>
         <description>文／陳俊宏(Jollen Chen) Contact: jollen@jollen.org （原文刊載於零組件雜誌2009年5月份） 技術端須補缺口 產品端須達到實用性 社群開發者將Android移植到EeePC後，興起一股「Android小筆電」討論風潮。幾個月後，市場上刮起了一陣開發Android小筆電的新聞。現在，幾家品牌大廠，對Android小筆電市場更是磨刀霍霍。對於這陣Android小筆電的風潮要如何解讀？在此分享個人的觀察與想法，請不吝指教。 Android小筆電的概念是由開發者社群所帶來的。網路上的技術玩家，將 Android 移植到 EeePC 701，並將這個新概念放到YouTube上分享。隨後，網路上開始出現討論，社群網站也接著進行報導，經由社群的推波助瀾，主流媒體也開始進行報導，接著，就像現在我們所看到的現象，Android小筆電開始吸引廠商的注意，大家都認為這是一個有不錯商機的產品。對於Android小筆電產品的熱潮，廠商與使用者的期待與想像也是一個主因。從技面的角度來看，Android小筆電仍有使用介面（UI）上的疑慮。由於Android介面的設計預設對象為手機，因此在小筆電上的畫面表現較不理想，操作方面亦同。Android小筆電在技術端仍需填補一些缺口。 但是，我們不仿從另一個「非技術面」的角度來思考。基於「使用應用程式、上網」為概念的小筆電，看來仍是微軟作業系統的天下，Linux小筆電在市場上起不了大作用的原因是「使用習慣」的問題。因為，使用者免不了將Linux小筆電與微軟系統的小筆電拿來比較。Linux上有OpenOffice 辦公軟體，但微軟系統小筆電上有使用者更習慣的Office套裝軟體；Linux上有Thunderbird電子郵件軟體，但微軟系統小筆電有使用者更習慣的Outlook軟體；不論是上網、電子郵件還是即時通訊，Linux小筆電上的「應用程式」都讓使用者操作得很沒有安全感。 基於「網路服務」概念的Android平臺，因為與微軟系統的小筆電有很大的差異性，因此似乎存在不錯的機會。Android平臺不基於 Linux桌面技術，我們不能將OpenOffice軟體，或是Firefox瀏覽器安裝在Android小筆電上，正好能與現有的小筆電做出相當大的市場區隔。因此有一個很好機會是，我們可以讓使用者很自然地不將Android小筆電與微軟系統小筆電拿來做比較。差異性與區隔性，讓Android小筆電浮現市場價值。 總結來看，現階段Android小筆電仍處於技術玩票階段，要讓Android介面適用在小筆電產品上仍有一些技術距離；Android技術平臺與典型的Linux桌面環境截然不同，Linux或微軟的應用程式，無法「移植」到Android平臺上，但這個技術上的大不同，正好給了Android 小筆電「差異化」的想像空間。產品定位方面，把Android做為取代微軟系統的想法，反而讓Android小筆電失去差異性；應將Android平臺做為「產品使用區隔」的有效工具。未來Android若真的能開發出適合小筆電的版本，一定是個很酷產品。...</description>
         <link>http://www.jollen.org/blog/2009/08/android-netbook-opportunity.html</link>
         <guid>http://www.jollen.org/blog/2009/08/android-netbook-opportunity.html</guid>
         <category>我的觀點</category>
         <pubDate>Wed, 05 Aug 2009 17:48:31 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：經營Android軟體設計服務、需要不同的思考</title>
         <description>文／陳俊宏(Jollen Chen) Contact: jollen@jollen.org （原文刊載於零組件雜誌2009年8月份） 軟體委外設計服務 - 百年老店、全新感受 委外服務（outsourcing）在科技產業是一種普遍的商業模式，透過委外取得解決方案，以及後續服務是產品開發的一種做法，委外服務供應商透過「接案」的方式獲取利潤。特別是在軟體方面，有許多代表性的「軟體代工」廠，讓軟體代工成為委外服務的代表作。 隨著Android被大量關注以及採用，會有越來越多的「Android設計服務」公司出現，透過觀察，確實也有很多專門承接Android軟體專案的公司、小團隊或個人，這是不令人感到意外的現象。在討論Android設計服務前，不如先來思考一下近來當紅的線上軟體商店模式。 Android Market提供的商業模式是收取「安裝」費用，即使用者下載的拷貝(copy)數決定了軟體開發商的營收，雖然Android Market還沒有像App Store這樣成熟，但是「線上軟體商店」的模式幾乎已經被確立了，「應該要做market」的公司，也都宣佈他們的market方案了。這種賺取拷貝數的商業模式最簡單沒有負擔，可以說是比微型創業更小型的創業方式，唯一的考量的是流通在外的裝置(device)數量，因為裝置流通越多，軟體被下載的機會與次數越高。 再談到委外開發的模式，什麼樣的公司，會有「Android應用軟體委外設計」的需求？無疑是想要「bundle」特殊軟體在「產品」上的公司，希望有些軟體在機器出廠時就被安裝，在這樣的前提下，就有二個想法。第一，我們可以單純提供設計服務、交付成果，再由廠商預裝到裝置上，這時「安裝數量」與收費就沒有關係；第二，可以提供收取權利金的方式，安裝到裝置的數量，決定收費，等於收取拷貝數的費用。 對設計服務公司而言，採用以拷貝數為基礎的模式，是比較好的模式，但是這種模式能不能被廠商接受？衡量的依據之一是「解決問題」，或是「提供價值」。一項只能解決問題（技術難題）的服務，大體上只能以服務收費為主；而一個能提高產品價值的軟體，就能收取拷貝數的錢。在這裡所討論的是Android的設計服務，在其他領域，銷售「關鍵技術」是一個很好的商業模式。 Android應用軟體設計商，還要具備的一個思惟是，Android應用軟體是可以被安裝到「任何」的Android裝置上的；因此，為單一廠商或單一產品設計軟體，收取服務費用，還不如自已擁有(own)該軟體的所有權利，並透過market銷售，讓使用者安裝我們的軟體到不同的Android裝置。 但是，在線上軟體商店賣軟體也是辛苦的工作。一些應用軟體開發商，從線上軟體商店賺到的錢是相當微薄的，對人數較多的公司而言，market的模式還無法支撐營運。看來，現階段定位為Android應用軟體開發商的公司，除了採取最容易的「設計服務」外，要以拷貝數為商業模式的基礎，確實要有一些非常的策略才行了。...</description>
         <link>http://www.jollen.org/blog/2009/08/android-outsourcing-business-strategy.html</link>
         <guid>http://www.jollen.org/blog/2009/08/android-outsourcing-business-strategy.html</guid>
         <category>我的觀點</category>
         <pubDate>Wed, 05 Aug 2009 17:35:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：四個步驟、建立你的Android競爭力</title>
         <description>文／陳俊宏(Jollen Chen) Contact: jollen@jollen.org （原文刊載於零組件雜誌2009年7月份） 創建自有版本 打開你的競爭力 過去品牌商面臨的一個問題是沒有自已的軟體。所謂的「自已的軟體」並不是拿別人的軟體來使用，或是視取得的開放源碼軟體為自有軟體。Android是一個作業系統，微軟的Windows Mobile也是一個作業系統，他們二者的「本質」上有什麼不同？Windows Mobile是由微軟所「擁有」的軟體，無法「自由」取得；而Android是開放源碼的軟體，每個人都可以透過網路自由取得，但是你擁有它嗎？ 取得不代表擁有。建立自已的版本，能控制並掌握整個框架的開發，才叫做擁有。擁有了自已的Android軟體，你就能修改它，並做出任何你想要的版本，取得(get)與擁有(own)意義上有很大的不同。過去Linux以及開放源碼給人的迷思是，由於軟體能自由取得，並做修改，因此不需要付費購買微軟的產品。下載Linux核心與開源軟體，故事才正要開始，首先要面臨到的便是工程的部份。沒有自有的Linux技術團隊，只要假以他手，將專案外包，而工程化後的Linux系統，自已仍無法掌握，照著自已的意思儘情地修改。 如何擁有自已的軟體，以下是個人建議，請您指教。擁有自有Android軟體的第一個步驟是：建立Android進化版本、即自已的分支。將Android框架的原始(original)原始碼(source code)建立一個新分支，也就是自已名字的版本。Google所提供的Android作業系統是「原生版本」，而自有的分支則是「進化版本」。例如：調整Android框架的實作，以加入自有的特性(features)，讓自有的進化版與原生版有所差異。試想，當我的Android進化版可以提供更炫麗的操作介面(UI)時，使用原生版本的產品便失去了市場性。最佳典範就是 HTC Sense。HTC Sense是HTC手機的專用UI，針對Android手機，HTC Sense能提供更棒的使用性(usability)。 第二、建立商標。Android作業系統採用Apache授權(Linux kernel除外)，而不是較為普及的GPL授權，所以Android作業系統對於商標(trademark)的建立是相當有助益的。商標是企業的一項價值，商標代表「這是我的東西」。當有差異性的Android版本能關閉原始碼，並建立註冊商標時，代表的是一個重要的里程碑：「這是屬於我的Android版本」。最佳典範，一樣是HTC Sense(tm)。 第三、適度貢獻與關閉原始碼。Android作業系統是開放平臺，開放平臺技術開發講求貢獻。OHA聯盟也是如此。廠商要能持續對OHA聯盟有所貢獻，而提交Android框架的程式碼是一個做法。OHA聯盟發給會員的門票並非終身有效，因為仍有被趕出大門的例子。另外，基於自有版本提供一套SDK是非常不錯的做法，例如OMS SDK就是一個典範。 第四、建立應用程式。基於市場與產品建立應用程式，以搭配產品，這是Android作業系統帶來的絕佳機會。是否自創品牌，當然也是一個考量，端看應用程式的價值以及特殊性。進化版Android目前來看，可以有二個發展題目。第一是結合服務的客製化版本，例如：OMS針對China Mobile服務做大量的客製化。第二個是針對UI與使用性做客製化版本，例如上述的HTC Sense。 廠商欲採用Android作業系統，並開發產品，但若不思考如何建立自有的能力，以及創造自有的Android進化版本，是非常可惜的一件事情。最大的盲點在於「外包能解決所有問題」的思維；反之，專案外包(out sourcing)不會是Android能帶來的商業價值，解決方案(solution)才是。針對個人開發者的部份，Android作業系統給開發者(developers)最好的舞臺是Android Marketing，因為越多的拷貝數量(即下載數)代表軟體越有價值。...</description>
         <link>http://www.jollen.org/blog/2009/08/android-product-4-steps.html</link>
         <guid>http://www.jollen.org/blog/2009/08/android-product-4-steps.html</guid>
         <category>我的觀點</category>
         <pubDate>Wed, 05 Aug 2009 17:33:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：Android產品開發的關鍵五力</title>
         <description>文／陳俊宏 jollen@jollen.org （原文刊載於零組件雜誌2009年6月份） 開放平臺讓我們看見了新機會 關鍵能力培植才能掌握機會 Android手機產品開發的重要能力培植，是搭上Android商機列車的入場卷。在Android手機產品開發，以及技術養成方面，有哪些重要的關鍵能力呢？以下針對這段時間所做的觀察，以及個人的心得，提出五個重要的指標能力，請您不吝指教。 關鍵力一：界面設計。過去談智慧型手機時，大家都了很多的力道在UI設計上，主要的原因除了智慧型手機都是觸控式螢幕的規格外，也受到iPhone很大的影響。Android的「制式界面」比較沒有獨特之處，因此「客製界面」將成為Android手機以及其他Android產品的重要特色。採用OMS系統(Open Mobile System)的oPhone手機，就在UI設計上下了很大的功夫。 關鍵力二：工業設計。手機工業設計(ID)包含手機的體積以及外觀，由於「手機」的特點是「經常攜帶」、「高移動性」以及「時尚配件」，所以手機是否夠輕薄、易攜帶，會是消費者重要的考量點。此外，有些手機代表的是一種時尚配件，或是身份地位的象徵，因此在工業設計的能力也影響到手機的銷售。對Android手機來講，工業設計不但重要，甚致還要更高一層來搭配有特色的UI設計。 關鍵力三：底層技術能力。研究Android作業系統底層技術的目的之一為「培養Android移植技術的能力」。任何Android應用程式都需要底層的支援，才能順利運作在硬體平臺上，而這也正是Android產品開發的核心能力；Android產品開發階段，不但一個高品質的硬體，也需要將Android作業系統移植到該硬體上並進行調校，才能讓Android應用程式在產品上順利執行。 關鍵力四：軟硬整合。上述的「移植能力」並不等於「軟硬整合」的能力。移植的目的是為了讓Android作業系統能在目標裝置上順利執行，並且驅動程式部份也能正常運作。軟硬整合的工作則是希望透過驅動程式的支援，讓Android Framework能發揮硬體的特色，因此如何擴充framework並實作自已的Activity與Service，以及修改framework，將是技術面的關鍵。 關鍵力五：行銷溝通力。手機產業本身就是一個特殊的產業，除了通路行銷(channel marketing)以及電信通路(carrier)的做法外，直銷(direct sale)也會是Android新興品牌手機的一大機會。Android是人人可取得的開放手機作業系統，新的產品概念，可幫助新興品牌進入利基市場，而採取直接銷售，例如透過網路，將是利基品牌手機很有影響力的一個做法。在產品行銷方面，如何與社群(community)以及終端用戶(end-user)溝通，並精確傳遞產品概念，以及經營品牌形象，就成為非常重要的關鍵能力。 與技術面有關的關鍵力三，以及關鍵力四，說明了Android作業系統與過去的Linux手機平臺的不同之處。Android是一個很健全(strong）的Application Framework，framework的擴充與開發技術是重要的技術。以大方向來看，加入新的 library 時需要擴充 application framework。 Android framework 的實作，部份需要考量硬體的規格，例如: Surface Manager 需要考量是否有 GPU 或硬體加速。但 Android application 建立一個 Surface holder時，若是將 Surface 的類型設定為 SURFACE_TYPE_HARDWARE，就必須針對硬體加速與 DMA 做移植工作。這個例子舉Android基本技術能力的重要性。...</description>
         <link>http://www.jollen.org/blog/2009/08/android-product-5-power.html</link>
         <guid>http://www.jollen.org/blog/2009/08/android-product-5-power.html</guid>
         <category>我的觀點</category>
         <pubDate>Wed, 05 Aug 2009 17:28:49 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android的Launcher研究：客製化桌面UI</title>
         <description>前言 能取得Android OS原始碼，並修改裡頭的內容，有時候也頗有樂趣。最近和幾位朋友聊到「Android框架的改造」，以及如何吸引對Android框架技術有興趣的同好一起交流的議題；我個人認為，一開始如果能丟出一個比較有樂趣的議題，或許可以有拋磚引玉的效果。 上週在北京進行Android培訓課程時，與eoeAndroid社群也進行了想法的交流，由於大家都體認到Android底層技術的重要性及其價值，而且eoeAndroid社群裡也有許多技術好手，所以就和eoeAndroid的創辦人靳岩兄有了一個共同主持研究Android底層技術「同好小組」的想法，希望能透過社群的方式，集合大家的智慧，一起把底層技術研究清楚。 因為要讓大家能有焦點，所以「發題」很重要，這個工作就由落在我身上了。由於第一次希望題目能簡單，並且有趣一點，至少要能達到發球的效果，吸引大家開始關心Android底層技術，所以原則是：希望能用最簡單的方式、讓大家體驗修改底層的樂趣。 題目說明: Launcher 第一次的題目是「Launcher」的修改。 Launcher就是Android的應用程式啟動器，Launcher的功能還包含：桌面的切換、應用程式快捷(shortcut)功能、背景圖(Wallpaper)功能等等。因此，修改Launcher可以改變一些很深層的UI功能。 在Android的桌面最下方，有一個圖示，按下後可以拉出應用程式圖示清單，這是Launcher提供的功能。這一次，因為我們覺得這個Launcher的圖示太製式化了，越看越不好看，所以想要修改一下，換張圖，要怎麼做到呢？ 範例展示 例如，圖1是原始的圖示；圖2是修改後的圖示。 圖1: 原始圖示 圖2: 幫Launcher妝扮一下 實作說明 1/4: 取得Android原始碼與EeePC移植 這個功能並不難做，事實上，完全不用寫程式。只要把圖檔重做就可以了。只不過前提是，要知道： 1. 如何取得Android OS原始程式碼 2. 如何編譯Android OS 最簡單的做法是： 1. 下載Android原始碼後、取得EeePC的移植(product) 2. 編譯「TARGET_PRODUCT」為eee_701 3. 由於Launcher都是用Java語法寫成的，所以不會有架構(ARM/x86/...)的問題，編譯後可以取得Launcher.apk；APK套件是不分處理器平臺的 先學會如何由Android原始碼編譯出eee_701的image，才有辦法繼續進行。 實作說明 2/4: 修改圖檔 在Android原始碼的 packages/apps/ 目錄裡，存放了Android內建的應用程式原始碼，Launcher是Android的一個應用程式，所以從這裡找到它的原始碼，並進行修改工程。...</description>
         <link>http://www.jollen.org/blog/2009/07/android-os-launcher-app.html</link>
         <guid>http://www.jollen.org/blog/2009/07/android-os-launcher-app.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 17 Jul 2009 03:13:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#26: 強大的Intent機制</title>
         <description>什麼是Intent(意圖)？ 強大的事件處理「Intent」(意圖)是Android很強大的一種機制。 在 Android 應用程式框架中，有一個非常聰明的事件處理機制，稱之為「Intent」。Intent（意圖）的作用與事件(event)很像，但與傳統的事件處理仍然有些差異。傳統的事件處理，講求的是「處理者（handler）的觸發」，當一事件發生時，便callback讓事件的處理者，或是直接將該事件轉送（forward）給應用程式，由應用程式決定處理方式。 在「Intent」這樣的事件處理觀念裡，Android 試圖將事件解釋為「應用程式的意圖」或是「使用者的意圖」，並試著去解釋該意圖的目的，若 Android 系統本身能理解應用程式的意圖，便會「自行」去處理該意圖所應執行的工作。 Android的做法是，讓每個意圖（Intent）都帶有一個動作（action），並根據不同的動作去行動。 關於前述教學提到的Intent 在前面的教學裡，我們用到二次Intent如下： 1. 自行定義一個Intent、設定Service可接收此Intent，並透過「送出Intent給框架」的方式，請框架啟動該Service 2. 使用Android內部定義的動作「ACTION_VIEW」，來「檢視」(view)一個「URL」資料，當框架看到內部定義的ACTION_VIEW動作時，便「自行」處理該Intent；處理的方式是啟動WebView並連上網站 以前述的教學為例，使用內建的動作“ACTION_VIEW”就可以很容易做出一個「啟動瀏覽器(WebView類別)上網」的應用程式。 透過這二個例子我們知道，Intent的動作可以是自行定義與框架內部定義二種。Android框架的Intent有很多方便實用的「內建動作」，以下我們說明Android內建Intent的美麗之處。 Android內建的Intent Action Android的框架確實是讓每個Intent都包含了一個動作，就稱為action。 為了讓大家更容易了解Intent的基本觀念，我們採用「體驗」的方式來說明如何使用內建的Action。現在，我們列舉以下三個情境，並分別實作其範例： HelloIntentDialer: 啟動撥號器(dialer)並撥號 HelloIntentMusic: 使用者按下「Select Music」後，可以由音樂清單裡選擇音樂並撥放 HelloIntentWallpaper: 啟動Android內建的「背景圖選擇器」，讓使用者更換背景 第二個範例”HelloIntentMusic”其實是ApiDemo裡的範例，而且是很容易能了解Intent內涵的好程式。 除了action外，Intent還可以包含另外一項資訊「data」。 Intent的action指定這個Intent的「動作」是什麼，框架會依指定的動作進行處理；有些action可以附帶一筆資料，這個資料是以Uri的格式撰寫，在HelloIntentDialer的範例會再做說明。 內建的Intent有哪些呢？請參考Android Reference Guide中的Intent類別說明。上述三個範例分別使用以下三個action： 1. ACTION_CALL: 撥號 2. ACTION_GET_CONTENT:...</description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-26.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-26.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 16 Jul 2009 12:27:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#25: HelloAppWidgetProvider.java 程式碼說明</title>
         <description>HelloAppWidgetProvider.java 程式碼說明 圖1: HelloAppWidgetProvider的設計 圖1是目前我們的HelloAppWidget範例設計，說明如下： onUpdate(): 收到ACTION_APPWIDGET_UPDATE廣撥時，框架會callback此method onDelete(): 收到ACTION_APPWIDGET_DELETE廣撥時，框架會callback此method AppWidgetManager: 管理App Widget的類別 先前，在AndroidManifest.xml裡我們讓HelloAppWidgetProider類別可以接收ACTION_APPWIDGET_UPDATE廣撥事件；ACTION_APPWIDGET_UPDATE是最主要的App Widget事件，當AppWidgetProvider被要求為App Widget提供”RemoteView”時，就會收到這個事件。 什麼是RemoteViews？ 什麼是RemoteView呢？先看一下框架的設計，如圖2。 簡單來說，「RemoteViews」就是表示UI的類別。res/layout/main.xml描述了應用程式的UI，UI裡當然包含許多組件(Widget)，而在先前的教學裡講到了一個觀念「Android應用程式的UI就是一個View tree」，view tree就是「View Hierarchy」。 總結來說，RemotViews是一個用來表示View Hierarchy的類別。透過RemoteViews可以找到UI裡的每一個組件。 圖2: RemoteView的設計（點擊看全圖） 程式說明: HelloAppWidgetProvider.java onUpdate()的程式實作： public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N...</description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-25.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-25.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 12 Jul 2009 14:10:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#24: AndroidManifest.xml-加入App Widget的程式資訊</title>
         <description><![CDATA[AndroidManifest.xml-加入App Widget的程式資訊 AndroidManifest.xml檔案的用途在前面的教學裡介紹過了。以下是其完整內容： &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.moko.hellowidget" android:versionCode="1" android:versionName="1.0"&gt; &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt; &lt;receiver android:name=".HelloAppWidgetProvider"&gt; &lt;meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider" /&gt; &lt;intent-filter&gt; &lt;action android:name="android.appwidget.action.APPWIDGET_UPDATE" /&gt; &lt;/intent-filter&gt; &lt;/receiver&gt; &lt;/application&gt; &lt;uses-sdk android:minSdkVersion="3" /&gt; &lt;/manifest&gt; 說明如下： 1. 在&lt;application&gt;裡加入&lt;receiver&gt;標籤，指定android:name屬性為主要的provider類別，即”HelloAppWidgetProvider”，請注意，「.」表示後面的字串為一個「類別名稱」，不要忽略了這個重要的小數點 2. 在&lt;receiver&gt;裡加入&lt;meta-data>標籤，指定android:resource屬性為App Widget的資源檔名稱，以我們的範例來說，就是「@xml/appwidget_provider」，即「xml目錄下的appwidget_provider.xml檔案」 3. 在&lt;receiver&gt;裡加入&lt;intent-filter&gt;標籤，讓我們的App Widget可以接收APPWIDGET_UPDATE事件(event)...]]></description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-24.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-24.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 11 Jul 2009 23:57:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#23: HelloAppWidgetProvider.java-實作App Widget供應者</title>
         <description>HelloAppWidgetProvider.java-實作App Widget供應者 程式碼已經在前面的教學裡展示過了，當時只提到一個很基本的重點：使用AppWidgetProvider類別。在這裡，我們先說明設計的部份，才能了解程式如何實作。程式碼的說明稍後再做補充。 圖1：設計App Widget 從圖1的設計裡可以知道(配合查詢Android Reference文件)，當程式繼承了AppWidgetProvidr類別後，也繼承了二個主要的method： onUpdate() onDelete() App Widget使用AppWidgetProvider類別，即App Widget的「供應者」，供應什麼東西給誰呢？可以想像成是，我們的應用程式，供應App Widget給Android桌面。 到目前為止，我們知道只需要AppWidgetProvider即可實成一個很陽春的App Widget。而完整的App Widget應該包含三個單元(unit)： 1. Provider：此處說明的「供應者」 2. Configure：App Widget的設定單元，用途是提供一個「介面」供使用者輸入資料 3. Receiver：繼承自BroadcastReceiver的單元，即廣播接收器，用來接收Android框架所送出的事件(event) 在後續的教學裡，我們會繼續說明configure與receiver單元的觀念與實作。...</description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-23.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-23.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 11 Jul 2009 23:54:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#22: main.xml-描述App Widget的UI</title>
         <description><![CDATA[main.xml-描述App Widget的UI 這個檔案在前面的教學裡介紹過了，它的主要用途是描述UI。我們想要設計一個能嵌進桌面，並顯示文字的App Widget，因此必須使用Android的TextView類別。 以下是main.xml的完整內容： &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" &gt; &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/appwidget_text" android:textColor="#ff000000" /&gt; &lt;/LinearLayout&gt; 我們的App Widget使用LinearLayout來安排佈局，而UI為一個TextView物件。在這裡，我們將此TextView物件的id定義為”appwidget_text”。...]]></description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-22.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-22.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 11 Jul 2009 23:52:53 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#21: appwidget_provider.xml-描述App Widget屬性的資源檔</title>
         <description><![CDATA[以下分別說明HelloAppWidget的實作，以及技術重點。 appwidget_provider.xml-描述App Widget屬性的資源檔 這個檔案主要描述App Widget的幾個屬性： 長度(width) 高度(height) 更新頻率 UI layout檔 以下是appwidget_provider.xml的完整內容： &lt;?xml version="1.0" encoding="utf-8"?> &lt;appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="85dp" android:minHeight="30dp" android:updatePeriodMillis="3000" android:initialLayout="@layout/main" &gt; &lt;/appwidget-provider&gt; 說明如下： 1. &lt;appwidget-provider&gt;標籤定義App Widget的屬性 2. android:minWidth定義寬度 3. android:minHeight屬性定義長度 4. android:updatePeriodMillis定義App Widget的更新頻率，Android框架每隔這段時間，會callback AppWidgetProvider類別的onUpdate()事件；此屬性的時間單位為1/1000秒，以上述的定義來說，等於3秒鐘的時間(3000/1000=3) 5. android:initialLayout屬性指定此App Widget的UI layout定義檔，”@”符號在Android的XML定義檔案，代表「目錄」之意，因此”@layout/main”表示「layout目錄下的main.xml檔案」 以上共四項屬性，是App Widget最基本的屬性，必須良好定義。其中android:updatePeriodMillis屬性可省略，代表不更新App...]]></description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-21.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-21.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 11 Jul 2009 23:46:12 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#20: 如何設計一個小型的App Widget？</title>
         <description><![CDATA[Android的ApiDemo範例庫提供了一個很不錯的App Widget範例；不過，對初學者來說，這個範例可能稍嫌繁瑣。在這裡另外提供一個HelloAppWidget範例如下： /* 範例：HelloAppWidget.java */ package com.moko.hellowidget; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.widget.RemoteViews; public class HelloAppWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; for (int i=0; i&lt;N; i++)...]]></description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-20.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-20.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 10 Jul 2009 18:00:56 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#19: 什麼是App Widget？</title>
         <description>App Widget是Cupcake(Android 1.5)所提供的一個功能，這是一個很實用而且能有很大創意想像空間的功能。什麼是App Widget呢？請看底下的操作示範。 在Android桌面長壓約3秒，出現一個選單，如圖1。 圖1：新增項目至桌面 2. 選擇「Widget」，加入”HelloWidget” 圖2：加入自行設計的Widget 桌面上出現了一個「Widget」 圖3：在Android桌面上出現我們自已設計的App Widget 圖4：加入了音樂撥放器App Widget至桌面 這就是App Widget的應用，可以將一個小塊程式(program piece)嵌入到桌面上。App Widget也是一種UI組件，先前所介紹的TextView、WebView等也泛稱為Widget，二者在應用上的差異該怎麼思考呢？以下是幾點看法： 1. App Widget是有生命的UI組件，他會自動更新本身的內容 2. Widget是沒有生命的UI組件，它不會自我更新，只能等待使用者的操作 3. 應用上，App Widget能提供不斷更新的內容，很適合用來設計天氣、時鐘、新聞等主動式應用程式 4. Widget應用上只用來製作UI，而UI因為只能等待使用者來操作，所以過去我們所撰寫的Android應用程式都是屬於被動式應用程式 讓App Widget能「主動」更新自身內容的方法是透過一個「時間觸發裝置」，Android框架會根據我們設定的時間間隔，不斷地callback我們的App Widget。後續將再說明App Widget的做法，並解釋這個部份。...</description>
         <link>http://www.jollen.org/blog/2009/07/jollen-android-programming-19.html</link>
         <guid>http://www.jollen.org/blog/2009/07/jollen-android-programming-19.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 10 Jul 2009 17:46:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#18: 佈景（Theme）初體驗</title>
         <description><![CDATA[上一節提到佈景（theme）是可以大範圍套用的UI美化功能，其套用範圍為「整個螢幕」，從程式碼的角度來看，佈景可以套用到以下二個範圍： 整個應用程式（application） 整個activity 接下來，我們以一個很簡單的例子，來說明如何套用佈景到application。在一些應用，我們可能不想要顯示視窗標題（title），怎麼做出這個功能呢？利用佈景設定的方式即可達成。以下是實作方法。 在styles.xml裡加入以下內容： &lt;?xml version="1.0" encoding="utf-8"?> &lt;resources> &lt;style name="myTheme"> &lt;item name="android:windowNoTitle">true &lt;/style> &lt;/resources> 修改AndroidManifest.xml，在標籤裡加上「theme」屬性： &lt;?xml version="1.0" encoding="utf-8"?> &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.moko.hellotheme" android:versionCode="1" android:versionName="1.0.0"> &lt;application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/myTheme"> &lt;activity android:name=".HelloTheme" android:label="@string/app_name"> &lt;intent-filter> &lt;action android:name="android.intent.action.MAIN" /> &lt;category android:name="android.intent.category.LAUNCHER" /> &lt;/intent-filter> &lt;/activity>...]]></description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-18.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-18.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 21 Jun 2009 13:30:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#17: 樣式設計（Styles）初體驗</title>
         <description><![CDATA[在這篇教學裡，我們將用一個非常簡單的範例來初步體驗Android的「styles」功能。 什麼是樣式（Styles）？ Android的樣式設計（style）是一個很重要的功能，因為它可以讓應用程式裡的元件（widget）「長」得跟別人很不一樣。樣式設計的使用規定如下： 在Android專案裡以XML資源檔來定義「樣式」 一個Android專案可以定義多個樣式 讓widget套用其中一個樣式 Android的styles功能，主要的對象是widget，樣式是為了套用到widget上；另外Android還提供佈景（theme）功能，可以做更大範圍的套用。 如何定義樣式 定義樣式的方式如下： 1. 在Android專案的「res/values」資料夾裡建立styles.xml樣式定義檔。如圖1。 圖1: 建立styles.xml 2.在styles.xml裡定義樣式，以下是一個範例： &lt;?xml version="1.0" encoding="utf-8"?> &lt;resources> &lt;style name="myText"> &lt;item name="android:textSize">18sp&lt;/item> &lt;item name="android:textColor">#880&lt;/item> &lt;/style> &lt;/resources> styles.xml的寫法說明如下： 1. 在 &lt;resource>標籤裡定義資源項目， &lt;style>標籤用來定義樣式資源 2. &lt;style>的name屬性定義此樣式的名字，widget使用此名字以套用樣式 3. &lt;item>標籤定義此樣式的內容 4. &lt;item>的name屬性為android:textSize時，表示定義此樣式的字體大小，在此設定字體大小為18sp 5. &lt;item>的name屬性為android:textColor時，表示定義此樣式的字體顏色，在此設定字體顏色為#880（RGB） 6....]]></description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-17.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-17.html</guid>
         <category>Android OS</category>
         <pubDate>Sat, 20 Jun 2009 15:20:45 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#16: Event Listener的用法: 以Click Listener為例</title>
         <description>Event Listener的用法: 以Click Listener為例 以Android所提供的View.OnClickListener來說明程式實作方法。一個較為良好的實作方法是在我們的Acitivty類別裡實作View.OnClickListener介面，即： import android.view.View; public class HelloClickListener extends Activity implements View.OnClickListener { ... } 每一個View都可以註冊一個event listener，當Android框架收到「click」事件後，便回呼event listener的callback method。以Button類別（按鈕元件）為例，當我們想要處理使用者觸控按鈕的事件時，就要呼叫Button類別的setOnClickListener()方法來註冊click listener。上述的實作方方法是，直接在我們的Activity類別HelloClickListener裡實作View.OnClickListener，因此上述Button類別的click listener為「this」。 上述的實作觀念，可用圖1來表示。 圖1: HelloClickListener類別實作View.OnClickListener介面 註冊click listener的程式碼如下： public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(this);...</description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-16.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-16.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 18 Jun 2009 23:18:30 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#15: 什麼是事件監聽器(Event Listener)？</title>
         <description>學會產生基本的UI後，接著就要學習UI的事件處理(UI Events)，才能讓UI與使用者「互動」。 什麼是事件監聽器(Event Listener) UI的使用者事件處理，即View如何處理使用者的操作，是一個重要的課題。View是重要的類別，它是與使用者互動的前線；在Android框架的設計中，以事件監聽器（event listener）的方式來處理UI的使用者事件。 Android框架提供了非常良好的UI事件處理機制。先前的教學提到，View是繪製UI的類別，每個View物件都可以向Android框架註冊一個事件監聽器。每個事件監聽器都包含一個回呼函數（callback method）， 這個回呼函數（callback method）主要的工作就是回應或處理使用者的操作。 Event Listener: 以Click Listener為例 以「使用者觸碰（touch）」的動作來說，當View要處理使用者觸碰的事件時，就要向Android框架註冊View.OnClickListener事件監聽器；當「touch」事件發生時，Android框架便回呼事件監聽器裡的回呼函數。 View.OnClickListener是click listener，故名思意，這是UI的「Click動作監聽器」；當使用者對View進行Click操作時（即觸控畫面上的UI元件），Android框架便會回呼這個View.OnClickListener的回呼函數。 View.OnClickListerner的回呼函數為OnClick()。 這裡所提到的監聽器泛指event listener，主要用來「監聽」使用者的各種動作。除了View.OnClickListener外，Android框架還有以下的event listener（及其callback method）： View.OnLongClickListener: onLongClick() View.OnFocusChangeListener: onFocusChange() View.OnKeyListener: onKey() View.OnTouchListener: onTouch() View.OnCreateContextMenuListener: onCreateContextMenu() 另外一種處理UI事件的機制為事件處理器（event handler），event handler與event listener是不一樣的二種處理機制。在自訂Android component的教學裡，再介紹這個部份。...</description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-15.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-15.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 18 Jun 2009 23:15:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Garmin-Asus的nuvifone G60改用Android作業系統</title>
         <description>CNET ASIA上的一則報導[Android to replace Garmin-Asus&apos; current Linux platform]指出，Garmin-Asus的nuvifone G60將改採Android作業系統。 (圖片來源：CNET) 2009年二月，Garmin與Asus正式宣佈策略聯盟，並以「Garmin-Asus」雙品牌策略進行行銷。nuvifone G60是Garmin-Asus雙品牌行銷策略下的第一個產物，nuvifone G60則是以導航功能為主軸的手機。 根據報導指出，Garmin-Asus現有的Linux平臺將只使用在G60裝置上，未來的裝置會採用Windows Mobile或者是Android作業系統。 如同Garmin的PND產品都是採用Linux作業系統一樣，原本nuvifone G60也計畫採用Linux作業系統，不久前，在engadget上的報導也出現實機照片；但是，隨著CNET這則報導的出現，整個開發計畫是否有了改變，頗令人好奇。 Android原本就對Google Map有很好的支援，再加上nuvifone G60是以導航以及地圖應用為主的手機，若是改採Android作業系統，也是一個合理的做法。 * Update: 2009/6/19...</description>
         <link>http://www.jollen.org/blog/2009/06/garmin-asus-nuvifone-g60-android.html</link>
         <guid>http://www.jollen.org/blog/2009/06/garmin-asus-nuvifone-g60-android.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 17 Jun 2009 10:46:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.30 釋出</title>
         <description>Linux 2.6.30於2009年6月9日釋出，Linux kernel的發展進入了Linux 2.6.3x的時代。最近一年的 Linux 2.6核心發展有相當重大的進展，除了幾個知名大廠不斷貢獻程式碼外，新產品的開發，也帶動Linux kernel的快速發展。 Linux 2.6.30加入了新的filesystem： 1. NILFS2 一種log-structured filesystem，由John K. Ousterhout與Fred Douglis於1988年提出的設計，主要針對high write throughput的應用。 2. POHMELFS (Parallel Optimized Host Message Exchange Layered File System) 一個分散式平行處理的檔案系統，在讀寫操作方面，根據[POHMELFS]官方的數據指出，POHMELFS的效能比NFS還好。 3. DST（Distributed STorage） 一個具高效能與可信賴的網路儲存檔案系統。 4. EXOFS（Object-Based Storage Devices） 支援OSD protocol的檔案系統。 5....</description>
         <link>http://www.jollen.org/blog/2009/06/linux-2-6-30-announced.html</link>
         <guid>http://www.jollen.org/blog/2009/06/linux-2-6-30-announced.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 16 Jun 2009 10:56:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#14: 什麼是對話盒 (Dialog)？如何建立對話盒？</title>
         <description>最少的元件、最舒適的介面 自從有了圖形化應用程式之後，對話盒（dialog）一直是元老級的元件（widget）；智慧型手機開始流行後，對話盒仍然是手機介面的重要圖形元件。 在Apple的iPhone問世後，觸控螢幕（touch screen）一直是智慧型手機的標準規格，因此傳統的滑鼠點擊（click）式介面，並不完全適合手指觸控的操作方式，再加上手機觸控螢幕尺吋較小，因此手機應用程式的介面設計，已經與傳統的桌面環境相當不同。 Android的元件庫考量了小尺吋的觸控螢幕，在基本元件的設計上，Android也為使用者做了很體貼的考量。以Android手機應用程式來說，經常使用的元件已經不再像過去的點擊式系統那麼多又複雜；以使用性的角度來看，常被使用的元件如下： * 選單（Menu） * 對話盒（Dialog） * 快顯訊息（Toast） 使用以上三個元件，以及其「變化形」，就能建構一個好用的應用程式介面；再加上Android針對上述的手機操作特性，對其元件庫做了很好的使用設計，因此使用很少的元件，也能提供使用者一個舒適好用的操作介面。 何謂對話盒？ 對話盒，故名其思，是一個讓應用程式與使用者「對話」的元件。應用程式透過對話盒與使用者進行下述的對話： * 詢問問題：使用者回答 Yes/No * 詢問偏好：使用者選擇自已偏好的項目，可以是單選，也可以是複選 * 說明狀態：讓使用者知道應用程式目前的狀態，例如：顯示「處理中」、「載入中」等訊息 Android提供的對話盒物件為android.app.Dialog，實作上繼承自Dialog的AlertDialog物件是最基本的對話盒物件。使用AlertDialog對話盒，可以詢問使用者問題，也可以詢問使用者偏好。接下來介紹AlertDialog對話盒的設計方法。 建立AlertDialog對話盒 延續「HelloMenu」範例，現在我們想要加入以下的使用情境： * 使用者按下Menu鍵 * 使用者觸壓 “New Message” 選項 * 出現對話盒、詢問使用者 “Yes/No” 由以上的使用情境來看，應該在onOptionsItemSelected()裡判斷到R.id.new_message項目時，在UI上建立一個對話盒。以下是修改後的onOptionsItemSelected()完整程式碼，完整範例名稱為HelloAlertDialog： public boolean onOptionsItemSelected(MenuItem item) {...</description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-14.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-14.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 10 Jun 2009 14:56:50 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#13: 快顯訊息 android.widget.Toast</title>
         <description>Toast是Android提供「快顯訊息」類別，使用時請import以下套件： import android.widget.Toast; 這是一個很好用的類別，特別是在初步建立Android應用程式的控制或行為時，可以輔助我們進行初步的測試工作。 配合上述的選單範例，我們將onOptionsItemSelected()回呼函數實作修改如下： public boolean onOptionsItemSelected(MenuItem item) { int item_id = item.getItemId(); switch (item_id){ case R.id.new_message: Toast.makeText( this, &quot;Please enter your message.&quot; + &quot; Your message is at max 255 characters.&quot;, Toast.LENGTH_LONG).show(); break; case R.id.quit: Toast.makeText( this, &quot;Going...</description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-13.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-13.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 04 Jun 2009 00:20:03 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#12: 如何建立選單 Menu</title>
         <description><![CDATA[Android應用程式的UI可以使用XML來定義，這個部份在前面的教學裡介紹過。要定義Android應用程式的選單，我們同樣可以使用XML來做描述，請看以下的說明。 建立 Menu 步驟 1. 建立選單的XML檔 在Android專案的res/目錄下新增一個menu/子目錄，然後建立options_menu.xml文件。 圖1: 建立menu/目錄 圖2: 建立options_menu.xml文件 2. 以XML定義選單內容 在options_menu.xml檔案裡，定義我們想要的選單內容。以下是一個範例： &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"> &lt;item android:id="@+id/new_message" android:title="New Message" /> &lt;item android:id="@+id/quit" android:title="Quit" /> &lt;/menu> 3. 將選單加入應用程式 要如何在應用程式啟動時加入我們定義好的選單呢？在onCreateOptionsMenu()事件裡以MenuInflater類別將定義好的選單加入應用程式： public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu);...]]></description>
         <link>http://www.jollen.org/blog/2009/06/jollen-android-programming-12.html</link>
         <guid>http://www.jollen.org/blog/2009/06/jollen-android-programming-12.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 03 Jun 2009 17:21:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Android Porting Highlights」簡報上線</title>
         <description>上週受邀至「首屆亞太區 Android 技術大會」發表演說，由於大會希望能多著重在技術層面的主題，因此整理了過去研究 Android/FreeRunner 的一些資料，並將「重點」部份做了一次概念性的說明。Android 的分支（branch）是以「產品」的概念做維護，因此若在目前 Cupcake 能支援的平臺（architecture）上做移植的話，是一個較簡單的工作，只需要在 vendor/ 裡新增自已的 product 並修改 AndroidBoard.mk、AndroidProducts.mk 以及 BoardConfig.mk 即可完成一個 Board/Product 的新分支。 關於底層的部份，以 armv4（如 s3c2443）的 architecture 為例，將重要的工作項目做了整理式的說明。在此提供簡報電子檔下載 [Android Porting Highlights]。...</description>
         <link>http://www.jollen.org/blog/2009/05/android-porting-highlights.html</link>
         <guid>http://www.jollen.org/blog/2009/05/android-porting-highlights.html</guid>
         <category>Android OS</category>
         <pubDate>Fri, 22 May 2009 10:55:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>中國移動 OPhone 現身：採用 OMS 系統的 Android 手機（實機附圖）</title>
         <description>中國版的 Android 系統 OMS 現身 (China&apos;s Android OS，OMS - Open Mobile System)。 日前一則新聞 [大陸OPhone商機 台商幕後推手] 以及 [中移動5月中下旬發佈Ophone手機 主介面已可上網流覽] 報導了中國移動（China Mobile）所推出的 OPhone 手機，採用 OMS 作業系統。本週在北京與 OMS（Open Mobile System）的開發商「播思通讯（BORQS）」人員餐敘，OMS 的開發者也拿出了 OMS 的參考設計（reference design）實機讓現場朋友實機操作。 OMS 採用的正是 Google 的 Android 作業系統，如同上述報導所提，OMS 是 BORQS 與...</description>
         <link>http://www.jollen.org/blog/2009/05/china-mobile-ophone-oms.html</link>
         <guid>http://www.jollen.org/blog/2009/05/china-mobile-ophone-oms.html</guid>
         <category>Android OS</category>
         <pubDate>Tue, 19 May 2009 22:57:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android Porting 手札 #1: Android 移植概觀</title>
         <description>本週六將於北京舉行的「Android 技術大會」上發表有關「Android 移植」的技術演說，配合該演講，最近將陸續整理一些筆記以搭配講稿供與會朋友參考。 Android 的技術優點 Android 平臺的好處是「將開發者侷限在應用層（application level）」的開發，並透過一個設計良好的 application framework 將 library 層「包裝起來」。傳統 GNU/Linux 系統的「開源模式」是「從裡到外」全面開放，應用程式來自四面八方，每個應用程式底層使用到的 library 並不相同，這讓 Linux 平臺的軟體發展容易失控，造成 Linux distribution 上雖然收錄了豐富的應用程式，但相對的也要包山包海地納入非常多的 shared library。 Android 雖然也採用了其他 open source 的專案成果，但 Android 以很聰明的方式，解決傳統 Linux 開放手機平臺的「相依性」問題，這也是過去長久以來，匯整使用（leverage）開放源碼專案開發產品的大問題。Application framework 採用 Java 程式語言，並軟性的將開發者限制在 application level 是...</description>
         <link>http://www.jollen.org/blog/2009/05/android-porting-introduction.html</link>
         <guid>http://www.jollen.org/blog/2009/05/android-porting-introduction.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 10 May 2009 21:58:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android Day 活動紀錄：Android 應用程式新手入門訓練</title>
         <description> 上週六（5/2）舉辦「Android Day」訓練活動，上午的活動是「Android 的機會」議程，下午舉辦了一場免費的 Android 訓練課程。Android Day 訓練活動的目的除了希望可以認識朋友，並面對面與大家交換不同的想法外，也希望可以幫助對 Android 應用程式有興趣的朋友，能一天就入門 Android 應用程式設計。對於想初步了解 Android 應用程式設計方法的朋友相當有幫助；透過 Android Day 訓練課程希望能幫助大家節省一開始的自學時間。 上午的議程，由小弟我、高煥堂老師與 David（gOS 執行長）以自由論壇形式，與大家討論 Android 產品端與推廣方面的想法。由於 Android 的 middleware 技術（包含調校、移植等）對產品的發展是一個重要的技術能力，因此高煥堂老師提出一個 shared object（shared library）工作小組的計畫，此外，高老師也針對 middleware 的觀念做了一些說明；David 也從「授權」的角度來分析，為什麼採用 APL（Apache License）授權的 Android 平臺，比起過去以 GPL 授權為主的桌面 Linux 與...</description>
         <link>http://www.jollen.org/blog/2009/05/android-day-event-report.html</link>
         <guid>http://www.jollen.org/blog/2009/05/android-day-event-report.html</guid>
         <category>Android OS</category>
         <pubDate>Wed, 06 May 2009 23:20:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android Netbook 行不行：從產品角度來思考</title>
         <description>社群開發者將Android移植到EeePC後，興起一股「Android小筆電」討論風潮。Android小筆電的概念就是這樣來的；由開發者給市場的一個考題。市場上一陣Android小筆電產品的新聞，幾家品牌大廠，對Android小筆電市場更是磨刀霍霍。對於這陣Android小筆電的風潮要如何解讀？在此分享個人的觀察與想法，請不吝指教。 Android小筆電的熱潮，起之於玩家對技術的好奇心；對於Android小筆電產品的討論，則是廠商與使用者的期待與想像。從技面的角度來看，Android小筆電仍有使用介面（UI）上的疑慮，尚不足以產品化。由於Android介面的設計預設對象為手機，因此在小筆電上的畫面表現較不理想，操作方面亦同。Android小筆電上仍有技術缺口。 基於「應用程式」概念的小筆電，因是「使用習性」的問題，使用者還是喜歡微軟的作業系統，Linux小筆電還是佔不到便宜。 使用者免不了將Linux小筆電與微軟系統的小筆電拿來相提並論。Linux上有OpenOffice辦公軟體，但微軟系統有使用者更習慣的Office套裝軟體；Linux上有Thunderbird電子郵件軟體，但微軟系統有使用者更習慣的Outlook軟體；無論是上網、電子郵件還是即時通訊，Linux小筆電上的「應用程式」都讓使用者操作得很沒有安全感。 從另外一個角度來思考。 基於「網路服務」概念的Android平臺，因為與微軟系統的小筆電有很大的差異性，因此似乎存在不錯的機會。Android平臺不基於Linux桌面技術，我們沒有辦法將OpenOffice軟體，或是Firefox瀏覽器安裝在Android小筆電上，正好與現有的小筆電有很大的差異性，也給了新產品定位的大空間。 產品定位方面，把Android做為取代微軟系統或Linux桌面的想法，反而讓Android小筆電失去了這個差異性；當大家開始討論Android小筆電上能不能執行辦公室軟體時，誰知道，會不會又像Linux小筆電產品般的結果。 Android平臺的產品可以擁有更多的區隔性，因此機會之一是尋找或創造不同的產品「使用概念」。現階段Android小筆電仍處於技術玩票性質，這是由玩家帶起的概念。要讓Android小筆電產品化仍要補齊技術上的不足。...</description>
         <link>http://www.jollen.org/blog/2009/04/android_netbook_product_concept.html</link>
         <guid>http://www.jollen.org/blog/2009/04/android_netbook_product_concept.html</guid>
         <category>我的觀點</category>
         <pubDate>Sun, 19 Apr 2009 15:05:43 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>出現搭載 Android 平臺的 PMP 產品</title>
         <description>LinuxDevices.com 報導了一則很酷的消息 [Android-based PMP to ship in October]。 一家名為 [GiiNii] 的公司，將在 10 月份開始銷售使用 Android 平臺的 PMP（portable media player）；該公司在明年的 1 月份也會銷售 Android 平臺的 DPF（digital picture frame）。 （圖片來源：GiiNii） 這台名為 Movit Mini 的 PMP 實際上就是一個「MID」概念的產品，但 GiiNii 並不將 Movit Mini 稱為 MID，而是將它定位為 PMP。Movit Mini...</description>
         <link>http://www.jollen.org/blog/2009/04/movit_mini_android_pmp.html</link>
         <guid>http://www.jollen.org/blog/2009/04/movit_mini_android_pmp.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 19 Apr 2009 14:30:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Android Day Package -- Android 應用程式新手入門」</title>
         <description>「Android Day Package -- Android 應用程式新手入門」整理了這陣子我在研討會的演講材料，包含： 簡報一份 Android 入門教學文件共11集 範例程式4例 因為研討會是一天的演講活動，因此這些內容很適合新手做為「學習 Android 應用程式」的入門教材，大約只需要一天的時間，就能初步了解 Android 的開發工具使用，並了解 Android 的應用程式模式，故取名為「Android Day Package」，期望能提供一個「Android 新手一天入門」的教學套件。請不吝指教。 簡報的部份是受零組件雜誌邀請，進行一天的 Android 演講活動，所特別製作的簡報；範例則是參考 Android SDK 所撰寫的實例，範例是配搭簡報進行實例講解所使用的程式碼。[下載 Android Day Package] 後，可搭配以下共11份教學文件學習；以下的教學文件是為製作簡報時的筆記，特別整理成一份教學文件與大家分享。 課程主題 Android Day Package 提供以下的課程主題。 1. 開放手機平台發展現況 (1hr) ‧開放手機平台陣營 ‧授權模式比較...</description>
         <link>http://www.jollen.org/blog/2009/04/android-day-package-v1.html</link>
         <guid>http://www.jollen.org/blog/2009/04/android-day-package-v1.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 12 Apr 2009 11:46:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux Input Device 介紹: APIs</title>
         <description>Linux 的 Input Device 是重要的一個 subsystem，在進行實例介紹前，先大略了解一下相關的 API。 Linux Input Device ﻿input.c是Linux的”input”驅動程式，主要支援鍵盤與滑鼠的輸入；input.c介面有趣的地方是採用了事件（event）的方式來處理輸入，以下是input.c介面重要的資料結構與函數： * struct input_dev * void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) * void input_register_device(struct input_dev *); * void input_unregister_device(struct input_dev *); * void input_register_handler(struct...</description>
         <link>http://www.jollen.org/blog/2009/04/linux_input_device_apis.html</link>
         <guid>http://www.jollen.org/blog/2009/04/linux_input_device_apis.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 08 Apr 2009 12:18:51 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：行動通訊產業 - 看中國崛起與市場機會</title>
         <description>（原文刊載於零組件雜誌2009年3月份） 近來讀到幾則報導二零零九年移動通信大會的新聞，提到中國在手機產業中，營造了一股崛起的氣氛，有些人更直接了當提出中國手機產業崛起的看法。從產品角度來看，中國在這次大會的產品展示，幾乎涵蓋了所有產品線，可想見中國在手機產業的研發能量頗為驚人。以中興通訊來說，其自主研發的手機產品線，己經涵蓋了各種作業系統，以及三端手機（中階、高階與低階），顯見其產品線的佈局頗為完整。 中國的華為也成功進入全球幾家主要的電信營運商，同時目前也是部份地區的主要供應商之一，可見中國手機產業也具備了電信營運商模式的能力。開放式手機平臺對中國在國際業務的拓業，也會有正向的幫助。二零零八年全球GSM手機出貨排名，華為以24.4%的佔有率排名第二，己經超過 Nokia。華為在移動通信大會上也展示了使用 Android 平臺的手機，因此在結合網路服務與應用客製化方面，華為做足了準備，有機會透過 Android 手機拓業國際市場。 中國的禹華通信近期也推出了 Android 手機的參考設計，這個參考設計採用 Marvell PXA-310 平臺，這是除了 Qualcomm 外的另一個 Android 手機參考平臺。禹華通信的 Android 手機平臺也有客戶採用了。現在，中國許多手機廠商陸續備齊了完整的 Android 設計平臺，只要 Android 應用程式的研發能量能到位，或是能善加利用 Android 開發者社群的資源的利用，未來中國手機製造商（ODM）在 Android 客製化手機的市場，會有一定的競爭力。 至於中國本地的 Android 手機市場機會在哪裡，以下就過去與中國業者的往來，整理一些資訊與大家分享。 目前，2G 的 Android 手機（GPRS/EDGE）在中國市場部份，短期還是會有不錯的市場需求，特別與業者合作的客製化手機部份，特別被看好。支援 Android 的 2G 手機參考平臺也相對完善，例如上述提及，禹華通信推出的參考設計，就是屬於 GPRS/EDGE...</description>
         <link>http://www.jollen.org/blog/2009/04/android_phone_china_market.html</link>
         <guid>http://www.jollen.org/blog/2009/04/android_phone_china_market.html</guid>
         <category>我的觀點</category>
         <pubDate>Wed, 01 Apr 2009 17:25:50 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：Android 手機 - 邁向心理效應的轉折點</title>
         <description>不確定因素消散 G2延伸氣勢 趨勢即將確立（原文刊載於零組件雜誌2009年2月份） 最近一則有關Android的最新消息是，T-Mobile 即將在五月份開始銷售 G2 手機，對 Android 平臺來說，這是一個具實質意義的里程碑，代表者 Android 手機的氣勢與話題將再延續。從現在看過去，T-Mobile 的 G1 手機帶來的意義，它並不只是全球第一支 Google 手機，更成功扮演了開路者（帶路者）的角色。 回顧過去，一開始，大家都在謠傳 Google 即將推出自己的手機，並進軍行動通訊產業，但後來 Google 在一場正式的記者會上宣佈成立 OHA 並釋出 Android 平臺後，大家才又恍然大悟，原來 Google 推的一個開放平臺，而不是 Google 手機。針對開放開放平臺來說，開發者社群期待的是一個開放源始碼（open source）的平臺，因此一開始非完全開放源始碼的 Android 便開始受到一些質疑。Google 的反應夠快，在去年（二零零八年）的6月2日便發表了一則聲明，宣稱「Android 將會 100% 開放源碼」，果然，在10月22日，Google 便正式公開了 Android 的完整原始碼。 Google...</description>
         <link>http://www.jollen.org/blog/2009/03/android_phone_boost_business.html</link>
         <guid>http://www.jollen.org/blog/2009/03/android_phone_boost_business.html</guid>
         <category>我的觀點</category>
         <pubDate>Mon, 30 Mar 2009 23:51:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CTimes 矽導論壇：Android元年 vs 山寨機氣象變化元年</title>
         <description>誰能掌握山寨機的新商業元素，誰就能逐鹿中原。（原文刊載於零組件雜誌2009年1月份） Android與山寨機的關係，是一個特別另人感興趣的話題。最近實地與北京Androidin社群核心成員交換許多想法，有些觀點很值得台灣硬體廠商參考，筆者就一些討論，整理出部份觀察心得與大家交流。 Android在中國地區投下一顆能量彈，這可能是一顆破壞力驚人的炸彈，不過，最可能的地方是它具備「定向精確爆破」的能力。山寨機的成功，讓不管是本地，或是外來的廠商，都打著「山寨模式」的主意。山寨模式在大陸地區出現快三年的時間，在中國本地的銷售數字為一億台，這還不包括「外銷」到海外的數量。這段期間，中國幾家山寨機廠商，也在短短時間內，一躍成為前幾大的本土品牌手機商。 山寨商的腦筋動得快，現在更把主意打到Android上頭。根據山寨商的說法，Android在中國地區會是一個很好的機會，也就是「智能型Android山寨機」將是下一個山寨風潮。與Android社群合作開發Android系統，是山寨商近來特別感興趣的項目。 根據Androidin（中國本地最大Android社群）的說法，已經有幾家山寨商表示對Android智能手機的興趣，同時也希望能與中國本土Android社群合作，開發不同市場需求的軟體，並針對特定市場做銷售。這也正式開放手機平臺最大的優勢，根據客戶需求彈性並快速客製化軟體的「市場定向爆破」能力。 Android社群在大陸地區越活躍，相對的「Android山寨機」就更有機會。過去由晶片廠商提供完整山寨機軟硬體解決方案的模式，將會逐漸轉變為由社群提供Android山寨機軟硬體解決方案。軟體方面，就不需要多說了，以Androidin社群為例，其社群研發能量，以及社群的人員成份，都非常有實力。以硬體來說，社群需要的是開放式的硬體平臺，因為社群人員需要在此平臺上優化Linux核心，才能提出效能穩定的解決方案。 這樣的變化與市場機會，對台灣廠商來說是很好的轉型機會。若是山寨商接受了Android社群提出的解決方案，那麼品牌硬體就會是一個發展方向，因為在操作系統與軟體可以由使用者任意更新（更換）的情況之下，一個受社群、山寨商以及使用者信賴的手機裝置，就會具有相當的潛力。 在研發方面，硬體廠商確實需要即早建立Linux核心與驅動程式的研發能力。大陸地區有許多具備Linux核心開發能力的社群以及開發者。山寨機廠商的強項是在銷售以及通路，因此研發的工作則是落在晶片供應商，或是Android社群上，這就是大家所知道的「山寨機模式」。 與傳統山寨機相比，Android山寨機需要一些不同的元素，誰能掌握這些元素，誰就能逐鹿中原。 （作者為Androidin台灣地區連絡人，連絡信箱：jollen@androidin.com）...</description>
         <link>http://www.jollen.org/blog/2009/02/android_china_business_opportunities.html</link>
         <guid>http://www.jollen.org/blog/2009/02/android_china_business_opportunities.html</guid>
         <category>我的觀點</category>
         <pubDate>Thu, 26 Feb 2009 21:28:02 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>自行編譯 Neo FreeRunner 的 kernel</title>
         <description>怎麼編譯 Openmoko 的 kernel for Neo FreeRunner 呢？請依照以下步驟進行操作。 1. 取得 Neo FreeRunner 的 kernel 原始碼 Openmoko 專案的所有原始碼都存放於 git.openmoko.org，到 [Openmoko 的 kernel 原始碼目錄樹] 底下，可以看到裡頭有完整的 kernel 原始碼，以及開發中的分支。首先執行以下指令，將所有的 kernel 原始碼取出： $ git clone git://git.openmoko.org/git/kernel.git linux-2.6 所有的原始碼都被放置於 linux-2.6/ 目錄下。 2. 取出 Andy 的 branch...</description>
         <link>http://www.jollen.org/blog/2009/02/compile_neo_freerunner_kernel.html</link>
         <guid>http://www.jollen.org/blog/2009/02/compile_neo_freerunner_kernel.html</guid>
         <category>Openmoko</category>
         <pubDate>Fri, 20 Feb 2009 14:02:51 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Fyp：LXDE 與 FreeRunner</title>
         <description>過去 Debian 的使用者可以將 [Debian for FreeRunner] 安裝在 FreeRunner 上，並安裝 LXDE 享用輕量級的桌面環境。現在有一個基於 Debian for FreeRunner 的新 distribution 己經將 LXDE 正式整合進來了。 源自台灣，現在已是知名的開放源碼專案 [LXDE] 現在已經被 Openmoko 的社群移植到 Neo FreeRunner 了。這個以 LXDE 桌面環境，以及 ［Zhone] 為基礎的新 distribution 稱為 [Fyp]，以下是 Fyp 的實機畫面。 (圖片來源：Openmoko Wiki） Zhone 全名是...</description>
         <link>http://www.jollen.org/blog/2009/02/fyp_lxde_freerunner.html</link>
         <guid>http://www.jollen.org/blog/2009/02/fyp_lxde_freerunner.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 19 Feb 2009 12:17:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>二零零九年十大 Linux 與 open source 發展預測、Openmoko 新武器</title>
         <description>幾天前，一則新聞「2009 年 Linux 與 open source 十大預測」指出，Android 將會大放異采。報導原文可見 [10 predictions for Linux and open source in 2009]，另外，這裡也有一份簡體中文版的報導 [2009年Linux和开源软件的10大预测]。 十大事件預測的第一名是 Android，報導推測指出，2009 年將是 Android 重要的一年。文中也提到 Openmoko 的 GTA02（Neo FreeRunner）也會採用 Android 系統。對於 FreeRunner 採用 Android 系統的話題，網路上有許多討論，不過簡單來說，移植 Android 到 FreeRunner 上是社群進行的一個專案，而將 FreeRunner 搭載 Android...</description>
         <link>http://www.jollen.org/blog/2009/02/predictions_linux_opensource_2009_openmoko.html</link>
         <guid>http://www.jollen.org/blog/2009/02/predictions_linux_opensource_2009_openmoko.html</guid>
         <category>其它</category>
         <pubDate>Thu, 05 Feb 2009 15:41:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#11: AndroidManifest.xml 的用途是什麼？</title>
         <description><![CDATA[AndroidManifest.xml 是一個用來描述 Android 應用程式「整體資訊」的設定檔。簡單來說，這是一個「自我介紹」檔，我們可以向 Android 系統「介紹」我們的 Android 應用程式，以便讓 Android 系統完整地了解我們的應用程式資訊。 在 [教學, #9] 中，我們提及：「在這裡修改 AndroidManifest.xml 的目的是為了『在我們的 Android 應用程式裡加入一個 Service 類別』，這樣才有辦法啟動 Service...」這個工作的目的是為了向 Android 系統做二項自我介紹。說明如下。 1. 應用程式「實作了一個 MokoService 類別」 &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt; ... &lt;service android:name=".MokoService"&gt; ... &lt;/service&gt; ... &lt;/application&gt; 在 application 標籤裡加入...]]></description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-11.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-11.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 19 Jan 2009 22:39:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#10: 如何檢查 Service 是否已啟動？使用 Android 除錯器</title>
         <description>Activity 是一個有 UI 的類別，Service 則是一個沒有 UI 的類別。要知道 Activity 是否啟動，只要看看手機是否出現畫面即可；要知道 Service 是否有啟動，最容易的方式就是透過「除錯」的方式。以下我們實際以一個完整專案方式來對 Android 應用程式做除錯。 建立 MokoService 類別 點擊 Eclipse 的 File -&gt; New -&gt; Class 項目，利用 Eclipse 的自動新增功能，在先前的 HelloMoko 專案裡建立 MokoService 類別，如圖1。欄位「Superclass」應填入 android.app.Service。 圖1: 建立 MokoService 類別 修改 MokoService 實作 在新增的...</description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-10.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-10.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 19 Jan 2009 10:45:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#9: 啟動 Service - startService()</title>
         <description><![CDATA[上一個課程裡，我們實作了一個 Service 的類別稱為 MokoService，現在我們想要在 Activity 裡載入並啟動 MokoService 類別，讓它可以在背景執行，請依以下步驟完成這個任務。。 修改 AndroidManifest.xml 在 Package Explorer 視窗裡找到目前 Android 專案的資訊描述檔，檔名是 AndroidManifest.xml。這是一個用來描述 Android 應用程式「整體資訊」的檔案，每個 Android 應用程式專案都會有一個。在這裡修改 Androidmanifest.xml 的目的是為了「在我們的 Android 應用程式裡加入一個 Service 類別」，這樣才有辦法啟動 Service。修改後的內容如下，紅色的部份是新增的描述：。 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.moko.hello" android:versionCode="1" android:versionName="1.0.0"&gt; &lt;application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"&gt;...]]></description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-9.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-9.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 12 Jan 2009 16:02:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#8: 沒有 UI 的 Service</title>
         <description>到目前為止，我們都著重在 Activity 以及 UI 的介紹，在 Android 應用程式裡，有一種沒有 UI 的類別（android.app.Service），稱之為 Service。簡單來說，Service 是一個 background process（背景程序），透過背景程序，我們可以實作一些不需要 UI 的功能，例如：在背景撥放音樂。 以下是利用 Eclipse 環境自動產生的類別 &apos;MokoService&apos;： import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MokoService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated...</description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-8.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-8.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 12 Jan 2009 15:15:49 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#7: 如何讓文字並排顯示 - TableLayout</title>
         <description>android.widget.TableLayout 是一個「排版」的類別，假設現在我們想要做出如圖1的文字排版效果，那麼使用 TableLayout 就是標準的做法。傳統寫程式排版的做法不是非常的方便，所以我們將採用 XML layout 方式來實作。 圖1: 文字並排顯示 建立新專案: HelloLayout 建立新的專案「HelloLayout」，並撰寫程式碼如下： package com.moko.layout; import com.moko.layout.R; import android.app.Activity; import android.os.Bundle; public class HelloLayout extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState)...</description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-7.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-7.html</guid>
         <category>Android OS</category>
         <pubDate>Thu, 08 Jan 2009 16:51:57 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#6: WebView 體驗與 findViewByID</title>
         <description>如果要繼續體驗 View 的樂趣，那麼「WebView」這個 View 無疑是最佳人選。android.webkit.WebView 是使用「WebKit」技術的 View，主要的用途是「顯示網頁」。使用 WebView，我們可以在 Android 應用程式裡顯示自已的 HTML 文件，或是線上的網頁。 接下來請依照以下步驟，建立我們的第二個 Android 應用程式「Hello Web」。 建立新專案: HelloWeb 建立一個新的 Android 專案，如圖1。 圖1: 建立 Hello Web 專案 並且撰寫 HelloWeb.java 程式如下： package com.moko.web; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import com.moko.web.R; public...</description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-6.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-6.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 05 Jan 2009 23:08:43 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#5: 使用 View 的 XML 屬性</title>
         <description>上一篇文章介紹了 XML-based layout 後，發現這是一個很方便，而且有用的 UI 安排方式。以圖1為例，我們現在想要做出一個應用程式，讓文字的超鍊結（hyperlink）可以被使用者點選，並自動呼叫瀏覽器連到該網站，這樣的應用程式該如何撰寫呢？請依以下步驟修改程式碼。 圖1：如何設計一個可點擊 URL link 的應用程式？ View 的 XML 屬性 每一個 View 都有許多屬性，我們可以利用 XML 來描述每一個 View 的屬性，進而達到控制物件的效果。以 TextView 為例，有一個「android:autoLink」屬性可以控制「是否要自動將網址轉換為可點擊的 URL 文字」。 要怎麼知道每一個 View 都哪些屬性呢？這個時候就要祭出 Android SDK 的 documentation 了。以 TextView 為例，透過以下的說明，可以了解 TextView 有哪些屬性，以及該屬性的用途： http://code.google.com/intl/zh-TW/android/reference/android/widget/TextView.html#attr_android:autoLink 原來，只需要透過「autoLink」屬性，並將此屬性設定為「web」即可做出我們想要的功能。 修改...</description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-5.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-5.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 04 Jan 2009 22:49:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#4: 使用 XML 安排 UI</title>
         <description><![CDATA[繼上一篇文章介紹了 View 的觀念後，接下來就要了解一下如何「安排」Android 應用程式的 layout。 Android 應用程式的 layout（UI 佈局）除了直接撰寫程式碼的方式外，也能使用 XML 檔案來做描述（XML-based Layout）。在 Android Development Kit 的「Package Explorer」視窗，點選「res -> layout」選擇 main.xml，可以看到 “Hello Moko” 應用程式的 XML layout 檔案，如圖1。 圖1："Hello Moko" 的 XML layout 檔 以下這段 XML 用來描述「TextView」物件的 layout： &lt;TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"...]]></description>
         <link>http://www.jollen.org/blog/2009/01/jollen-android-programming-4.html</link>
         <guid>http://www.jollen.org/blog/2009/01/jollen-android-programming-4.html</guid>
         <category>Android OS</category>
         <pubDate>Sun, 04 Jan 2009 22:22:04 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#3: 第一個 Android 專案</title>
         <description>初步了解如何撰寫第一個 Android 應用程式後，接著就可以實際來建立我們的第一個 Android 專案了。Android Development Kit（ADT）使用 Eclipse 整合式開發環境，根據 Android SDK 裡的文件說明，先安裝 Eclipse 以及 ADT，然後建立一個新專案（File -&gt; New -&gt; Project），並選擇「Android Project」，如圖1。 圖1：建立 Android Project 接著輸入專案屬性： 1. Package name：Java 套件名稱，在這裡我們將應用程式的套件命名為 com.moko.hello。 2. Activity name：輸入應用程式的 Activity 類別名稱，建立一個繼承 Activity 的新類別。 3. Application name：輸入應用程式名稱，即應用程式標題。 圖2：輸入專案屬性...</description>
         <link>http://www.jollen.org/blog/2008/12/jollen-android-programming-3.html</link>
         <guid>http://www.jollen.org/blog/2008/12/jollen-android-programming-3.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 29 Dec 2008 20:13:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Android 教學,#2: “Hello Moko” - Activity 與 View 的關係</title>
         <description>上一則文章介紹了 Activity 與 View 的觀念，若能再理解 Activity 與 View 的關係，就不難了解 Android 應用程式的整個模式了。請看以下的範例程式： package com.moko.hello; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloMoko extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) {...</description>
         <link>http://www.jollen.org/blog/2008/12/jollen-android-programming-2.html</link>
         <guid>http://www.jollen.org/blog/2008/12/jollen-android-programming-2.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 29 Dec 2008 20:04:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen  的Android 教學,#1: Android 應用程式模式</title>
         <description>Android 應用程式的模式（application model），可由以下幾個觀念講起。在真正進入 Android 程式設計前，必須先了解以下幾個名詞觀念。 1. Android package（.apk） Android 應用程式套件，包含應用程式本身，以及相關的資源檔案。將 apk 套件下載到 Android 手機後，即可安裝至手機上。Android Development Kit 可自動將 apk 套件下載至模擬器或實體手機。 2. task Task 就是「應用程式」本身，也就是 Android 手機上的圖示，使用者可點擊圖示啟動 task。從開發者的角度來看，task就是一個或多個 activities。 3. process Process 在作業系統的定義上，指的是「執行中的程式」，在 Android 的應用程式模式中，代表的是低階的執行程式，也就是系統層（kernel）的部份。一個 apk 套件裡的所有程式，都是在一個 process 裡執行。 4. 什麼是 Activity（android.app.Activity）...</description>
         <link>http://www.jollen.org/blog/2008/12/jollen-android-programming-1.html</link>
         <guid>http://www.jollen.org/blog/2008/12/jollen-android-programming-1.html</guid>
         <category>Android OS</category>
         <pubDate>Mon, 29 Dec 2008 19:58:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 scheduling 觀念, #1:</title>
         <description>本週進行「Linux Device Drivers: Jollen 的 10 堂課」教育訓練，發現有些同學對於作業系統的「排程（scheduling）」觀念仍有些疑問，因此，在課程中以三段小程式來說明「什麼是排程」，以協助同學建立紮實的排程觀念。 以下是一段正常的 open system call 實作： int card_open(struct inode *inode, struct file *filp) { return 0; } 當 process 開啟 device file 後，因為 kernel-space 的 open system call 實作會直接 return，因此 CPU 會切換至前景（foreground）、 process 繼續往下執行。...</description>
         <link>http://www.jollen.org/blog/2008/12/kernel-scheduling-concept-1.html</link>
         <guid>http://www.jollen.org/blog/2008/12/kernel-scheduling-concept-1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 14 Dec 2008 11:58:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>安裝 Android 應用程式（apk）至 Neo FreeRunner</title>
         <description>首先，依照 Android 文件上的說明 [先安裝 SDK]，再 [撰寫 Hello, Android!] 應用程式後，打包成 apk 格式；本文使用的 Android SDK 搭配的 Eclipse 版本是 3.4（Ganymede）。接著，再照 [Android Documentation] 的說明撰寫一個 Android 應用程式，再將程式編譯後打包成 HelloMoko.apk 檔案。 當然，必須將 FreeRunner 更新為 Android 系統，更新方式可至 Openmoko 中文 wiki 下載投影片：http://wiki.openmoko.org/wiki/Main_Page/zh_tw。請依以下步驟將 HelloMoko.apk 安裝至 FreeRunner 手機上。以下的實驗環境為 Ubuntu 8.04.1。 1....</description>
         <link>http://www.jollen.org/blog/2008/11/hello_moko_free_runner_android.html</link>
         <guid>http://www.jollen.org/blog/2008/11/hello_moko_free_runner_android.html</guid>
         <category>Openmoko</category>
         <pubDate>Fri, 21 Nov 2008 13:54:30 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Neo FreeRunner: 3 軸加速度感測器程式實作</title>
         <description>Neo FreeRunner 搭載二個「3 軸加速度感測器」，這是一個很有趣的硬體，他可 以偵測手機的移動狀態，配合應用程式，可以實作出有趣的小玩具。以 iPhone 為 例，它有一個很人性化的功能，當手機 90 度轉向時，視窗也會跟著 90 度轉換， 這樣的功能就是透過「加速度感測器」晶片來完成的。 Neo FreeRunner 有二個 3 軸加速度感測器，當手機移動時，可以利用程式讀取每 一個軸的加速度值。讀取加速度感測器的方法是透過 Linux 的 input layer： /dev/input/event{2,3} Process 透過這二個裝置檔讀取 input layer 的資料，kernel 會回傳一筆加速度感測器的資料給 process，該筆資料的 data type 為 struct input_event，即 kernel 的 input event...</description>
         <link>http://www.jollen.org/blog/2008/11/programming_freerunner_accelerometer.html</link>
         <guid>http://www.jollen.org/blog/2008/11/programming_freerunner_accelerometer.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 10 Nov 2008 12:29:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>FreeRunner 搭載 Android 實機測試</title>
         <description>看了這麼久的 Android 消息，今天終於可以實際將 Neo FreeRunner 更新成 Android 系統，進行實機測了。將 FreeRunner 變成 Android 手機的做法，可以在 [Openmoko Wiki] 下載教學簡報。以下是實機測試畫面。 將 FreeRunner 重新燒錄 Android 的 kernel 以及 rootfs 後，直接開機。大約過了1分鐘後，看到了 Android 的開機畫面，開機時間還可接受，但似乎目前的版本並不是相當穩定，仍有開機失敗的機率。 開機後，來到鎖定畫面，必須按一下 FreeRunner 的按鍵，才能進到主選單。 主選單是典型的 Android 畫面，當然是採用觸控方式操作。整個 FreeRunner + Android 給我的第一印像還算不錯，觸控操作挺順手的，不會有「卡卡」的感覺。 來到 Android 的應用程式選單，裡頭有許多 Android...</description>
         <link>http://www.jollen.org/blog/2008/11/freerunner_android_snapshot.html</link>
         <guid>http://www.jollen.org/blog/2008/11/freerunner_android_snapshot.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 05 Nov 2008 14:45:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 已經能在 FreeRunner 上執行</title>
         <description>自從 Google 正式公開 Android 原始碼後，Openmoko 社群便開始努力將 Android 移植到 FreeRunner 手機上，期間不斷有小報導指出 Openmoko 將推出 Android 手機。不過，正確的說法應該是「Openmoko 將 Android 移植到 FreeRunner 上」，而不是另外打造一支新的手機。 前二天，連「Openmoko 投靠 Android 聯盟」的消息都出現了（其中一則報導還附上 FreeRunner 執行 Android 的照片）： * Openmoko來投 Android聯盟再添一員 * 本月有望推出 Android家族第2款手機 投靠 OHA 聯盟？這還是未經證實的小報導，不過，FreeRunner 能執行 Android 已經是可以官方證實的消息了。Openmoko 的確「已經將...</description>
         <link>http://www.jollen.org/blog/2008/11/android_running_on_freerunner.html</link>
         <guid>http://www.jollen.org/blog/2008/11/android_running_on_freerunner.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 05 Nov 2008 09:05:47 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Openmoko FreeRunner 與 Google Android: 現況與想法</title>
         <description>自從 Android 公開原始碼後，Openmoko 的社群便開始積極進行移植的工作。最近在網路上也開始看到許多這方面的報導： * Rumor: OpenMoko Android Phone In November? * OpenMoko Jumps On Android Bandwagon * Openmoko將在11月推出Android手機？ * 开源手机OpenMoko转投Android门下 * 预计Openmoko将在11月推出Android手机？ 這些報導看起來比較像是「謠言」（rumor），有些報導甚致還放了圖片，不過，有圖不一定有真相，明眼人一看就知道這些圖都是「後製」出來的。但是，Openmoko 社群正在移植 Android 至 FreeRunner 也是一個事實。從目前 Openmoko 社群的移植工作來看，主要進行的項目有： 1. 修改 ARMv5 指令集。由於 FreeRunner 採用的 s3c2442 處理器是 ARMv4...</description>
         <link>http://www.jollen.org/blog/2008/10/openmoko_freerunner_google_android.html</link>
         <guid>http://www.jollen.org/blog/2008/10/openmoko_freerunner_google_android.html</guid>
         <category>其它</category>
         <pubDate>Fri, 31 Oct 2008 12:54:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>移植 Android 到 Neo1973 與 Neo FreeRunner</title>
         <description>Android 於 10 月 21 日正式公開原始碼 [Android is now available as open source]，Openmoko 的開發者社群第一時間也出現許多討論 [Android open sourced]。 很快地，「移植 Android 到 Neo1973 與 Neo FreeRunner」的工作也開始了，目前這項移植工作還是「underway」進行中；不過，社群開發者仍紀錄了最新的移植狀況在 Openmoko wiki 上 [Android]。 相關資源 * 2008-08-25: Andorid是否可以porting到FreeRunner...</description>
         <link>http://www.jollen.org/blog/2008/10/porting_android_to_free_runner.html</link>
         <guid>http://www.jollen.org/blog/2008/10/porting_android_to_free_runner.html</guid>
         <category>其它</category>
         <pubDate>Mon, 27 Oct 2008 16:23:54 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Openmoko Linux 2008 開放手機新體驗」簡報上線</title>
         <description>今天受邀至台北科技大學資訊工程系演講，講題是「Openmoko Linux 2008 開放手機新體驗」，正好能接續昨天的日記「Neo FreeRunner 應用程式開發概念圖」，在簡報的最後，附上了一小部份的講義「如何在Om2008.8 撰寫 EFL 應用程式並編譯」供同學們參考。 下載簡報 [Openmoko Linux 2008 開放手機新體驗]。Openmoko 近期有許多新消息，有興趣的同學可以至 [Openmoko 中文 Wiki] 查詢。 延伸閱讀 2008.10.15: Neo FreeRunner 應用程式開發概念圖...</description>
         <link>http://www.jollen.org/blog/2008/10/programming_neo_freerunner_efl.html</link>
         <guid>http://www.jollen.org/blog/2008/10/programming_neo_freerunner_efl.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 16 Oct 2008 23:47:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Neo FreeRunner 應用程式開發概念圖</title>
         <description>Openmoko 的 distribution 現在有許多不同的版本，一大堆名詞總讓人一開始就一頭霧水，像是：Om2007.2、Om2008.8、FDOM、ASU等等。剛開始接觸 Openmoko 以及 Neo FreeRunner 的同學，經常要花一些時間認真讀 Openmoko wiki 才能了解通盤概念。 許多同學只是想要在 FreeRunner 上寫寫簡單的小程式，一開始遇到這些從沒聽過的名詞，花很多時間，有時還是搞不清楚「怎麼在 FreeRunner 上寫小程式」，總是會有一些挫折感。因此，在這裡整理一份簡單的「Neo FreeRunner 應用程式開發概念圖」，幫助同學建立整體概念。 怎麼在 Neo FreeRunner 上寫一個簡單的小程式呢？請看下圖的說明。 Om2007.2 與 Om2008.8 都是 Openmoko 的官方版本（official distribution），Om2007.2 與 Om2008.8 除了有 Openmoko 自已的開發成果外，也使用了許多 FOSS（Free and Open Source Software）的套件，因此，需要將...</description>
         <link>http://www.jollen.org/blog/2008/10/programming_neo_freerunner.html</link>
         <guid>http://www.jollen.org/blog/2008/10/programming_neo_freerunner.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 15 Oct 2008 14:41:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>停止軟體專利世界日（Stop Software Patents World Day）</title>
         <description>今天是 [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 演講實紀...</description>
         <link>http://www.jollen.org/blog/2008/09/stop_software_patent_world_day.html</link>
         <guid>http://www.jollen.org/blog/2008/09/stop_software_patent_world_day.html</guid>
         <category>其它</category>
         <pubDate>Thu, 25 Sep 2008 23:08:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>演講「加入 kernel 除蟲大隊：簡介 kernel debug 工具」簡報上線</title>
         <description>近期受邀發表了一場與「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...</description>
         <link>http://www.jollen.org/blog/2008/09/kernel_debug_intro.html</link>
         <guid>http://www.jollen.org/blog/2008/09/kernel_debug_intro.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 14 Sep 2008 20:00:11 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>UI 設計新體驗 Python-etk</title>
         <description>最近在整理一些有關使用者介面設計的資料，希望可以提份一份簡單有趣的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的架構如下。 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 = &quot;Click Me&quot;) btn.on_clicked(lambda x: etk.main_quit()) # Main w = etk.Window(title=&quot;Hello World&quot;, size_request=(150,...</description>
         <link>http://www.jollen.org/blog/2008/09/introduction_python-etk.html</link>
         <guid>http://www.jollen.org/blog/2008/09/introduction_python-etk.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Thu, 04 Sep 2008 23:00:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Intel 收購 Opened Hand</title>
         <description>一年多前 [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...</description>
         <link>http://www.jollen.org/blog/2008/09/intel_buy_opened_hand.html</link>
         <guid>http://www.jollen.org/blog/2008/09/intel_buy_opened_hand.html</guid>
         <category>其它</category>
         <pubDate>Tue, 02 Sep 2008 10:19:31 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] fork 多個小孩</title>
         <description>今天進行「GNU Toolchains &amp; Embedded Linux Programming」課程，在講解 fork 時，有同學問到「能不能 fork 多個 child process」，當然是可以的。後續又有同學問到，「能不能 fork 孫子」，當然也是可以的，只不過，在 child process 裡再 fork child process 並不是很主要的做法，只在一些特殊情況，例如要避免 zombie process 產生時，才會用上。 所以，我們只講解如何 fork 多個 child process 的做法。我們舉了一段 code 當做範例，這段 code 寫得很單純，可以說明 fork 的一些觀念。在這裡，大家必須了解的是「fork 之後」的行為是什麼： 1. parent process...</description>
         <link>http://www.jollen.org/blog/2008/08/fork_n_child.html</link>
         <guid>http://www.jollen.org/blog/2008/08/fork_n_child.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sat, 23 Aug 2008 15:48:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] Symbol Table、objdump 與 ELF 綜合小考</title>
         <description>上週進行「GNU Toolchains &amp; Embedded Linux Programming」課程時，最後出了一道考題給同學。題目如下。 請說明上述程式執行後，為什麼會出現以下結果。請將原理描述清楚。 $ gcc -o helo helo.c $ ./helo 0x80495c0 now x = 10 now x = 100 這是一道綜合性的考題，考了很多東西。完全沒有 toolchains 觀念前，同學是一頭霧水，也沒有什麼方向。但是在二天的課程後，從同學繳回的測試卷來看，大家的觀念都已經很健全了。在這裡將題目也提供給大家思考。這是一道不算難的考題，主要考的是「觀念」，並透過「工具的操作」來驗證這些觀念。 觀念的建立絕對是教育訓練最重要的一個環節，也是講師的主要任務，而透過工具的交互操作，來強化課堂觀念，是一個不錯的方法，可以幫助同學記憶。...</description>
         <link>http://www.jollen.org/blog/2008/08/symbol_table_elf_data_start.html</link>
         <guid>http://www.jollen.org/blog/2008/08/symbol_table_elf_data_start.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sat, 23 Aug 2008 10:47:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Openmoko 釋出 ASU</title>
         <description>2008 年 8 月 8 日是北京奧運的開幕日，這一天，也是 Openmoko 推出第三代最新一代手機平臺「Om 2008.8」的日子。Om 2008.8 也稱為 ASU，ASU 是一個專案代號，全名是 April/August Software Update。 ASU 可同時支援 EFL、Qtopia 以及 GTK+ 應用程式，同時也包含一個安裝程式（Installer），可讓使用者自由安裝手機應用軟體，這是過去在校園巡迴課程向同學所介紹的 Openmoko 新的概念，如今終於正式現身了。 ASU 比較另人期待的地方是加入了 EFL 以及 Qtopia，過去 Om 2007.2 是基於 GTK+ 的手機平臺，現在的 Om 2008.8 則是「跳脫」GTK+ 的重要里程碑。ASU 裡有二個值得一提的軟體成果，首先是 Illume。[Illume]...</description>
         <link>http://www.jollen.org/blog/2008/08/asu_om20088_release.html</link>
         <guid>http://www.jollen.org/blog/2008/08/asu_om20088_release.html</guid>
         <category>Openmoko</category>
         <pubDate>Tue, 12 Aug 2008 23:38:04 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 I/O, #4: 什麼是 Blocking I/O</title>
         <description>在先前的專欄中，我們為大家介紹了「I/O」以及「interrupt handling」，接下來我們要將這二個部份合在一起，並討論幾個相當重要的觀念以及機制。首先，我們回到最早在介紹 Linux 驅動程式架構的部份，我們介紹到了 system call 以及 file operations 的觀念；接續 I/O 的部份，我們又提到 read/write system call。到這裡，我們就要融合貫通先前所介紹的重要觀念。請大家先將先前的專欄讀熟，再接續本系列專欄。 在 Linux 驅動程式的整個框架中，最重要，而且必須一開始就先了解的主題有二個： 1. Blocking I/O 的觀念。 2. Wait queue 以及 event-driven（event-polling）的觀念。 雖然這裡分成二個小主題，不過其實這是同樣的一個主題。這裡有很多值得提出討論的觀念，首先針對 Blocking I/O 的觀念進行深度探討。 什麼是 blocking I/O？ 當 user process 透過 read/write system...</description>
         <link>http://www.jollen.org/blog/2008/08/linux_device_driver_blocking_io.html</link>
         <guid>http://www.jollen.org/blog/2008/08/linux_device_driver_blocking_io.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 04 Aug 2008 08:13:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Openmoko 跨出英勇的一步</title>
         <description>自從 Openmoko 在7月4日正式發佈新版的 Neo FreeRunner 後，便不斷受到許多西方媒體的矚目與報導，各種聲音也出現在 Openmoko 社群，以及每一個人的網誌上。許多媒體都給予相當正面的評價與報導，對 Openmoko 團隊來說，這絕對是一大鼓舞。當然，好聲音不少，壞聲音也有。像是，Boing Boing 便刊登了一篇對 Openmoko 相當正面的報導： Openmoko open-source cell phone beats Android to the punch 不久前，Internetling 也刊登了一則有關Openmoko 的評論，標題是「3 Reasons Why Everyone will buy one iPhone and not OpenMoko」。一開始的開場白實在犀厲： But unfortunately, people probably...</description>
         <link>http://www.jollen.org/blog/2008/07/openmoko_brave_step.html</link>
         <guid>http://www.jollen.org/blog/2008/07/openmoko_brave_step.html</guid>
         <category>Openmoko</category>
         <pubDate>Sat, 26 Jul 2008 18:54:09 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>可以開機就好：談作業系統的基礎訓練</title>
         <description>最近在和朋友在討論 Embedded Linux 課程的規劃事宜，希望可以歸納過去所收集的學員意見，以及就助教所提出的課堂問題，對現有課程做調整以及精進。二個星期前，和 thinker 以及 dennis 在聊課程時，興起了一個念頭，我們想要規劃一門「作業系統」的課程。 過去的教育訓練發現，有些學員對於作業系統的背景知識不足，也有些學員對於 Linux kernel 的原理很有興趣，更有些學員對如何寫一個 OS 感興趣，但，由於沒有系統化的文件提供這方面的資訊，因此，讓大家只能由片斷的文件（googling）自己拼湊相關知識，不但沒有效率，而且也經常徒勞無功。 我們想要做的「作業系統」課程，可不是把「恐龍書」搬出來教一教就行了，而是希望走「實務」路線，因此，thinker 提出了一個想法：教大家做一個「只能開機」的 OS。我跟 dennis 都覺得這是一個很不錯的構想，透過「建構式」教學，讓大家從無到有自己寫一個作業系統，這個作業系統也不需要很完整，只要能做到「可以開機」就好了。 昨天晚上，大家再次聚會，再討論了這個「boot only」的 OS。「從無到有自己寫」是一個不太可行的做法，畢竟訓練時數有限，況且「有現成的 Linux kernel」可以用，因此，「從 Linux kernel 剪貼程式碼來做一個新的 OS」是一個最具體可行的做法，也是大家的共識。 透過由 Linux kernel「copy-and-paste」程式碼，拼裝出一個 OS，是一件有意義的事情。雖然是一個拼裝的 OS，但是要讓它可以動，就要了解處理器架構，以及整個開機流程，而且也要知道「要讓一個 OS 可以開機，至少要實作什麼單元。」這是一件有趣的事，大家興趣都來了，一陣技術討論後，很快地，在不到一個小時內，我們就把主題都抓出來了。初步的構想如下。 要知道 Linux kernel 的開機流程，就要有一個學習環境，我們一致認為，透過 Qemu...</description>
         <link>http://www.jollen.org/blog/2008/07/linux-kernel-from-scratch.html</link>
         <guid>http://www.jollen.org/blog/2008/07/linux-kernel-from-scratch.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 24 Jul 2008 15:50:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Process State 與 Wait Queue</title>
         <description>本週要繼續進行 Linux Device Driver 的教育訓練，正好上週有同學問到「process 狀態」的問題，原因是我們在講解範例時，提到 O&apos;Reilly 的 Linux Device Driver 書上以「half sleep」來說明「手動變更 current 狀態」的做法，以及為何不直接呼叫 sleep_on() API 的原因。 當時只做了相當簡要的回答，同學也對 OS 書上講到的 process state 有些不了解。本週打算做比較深入的討論，結果發現我的 Linux Kernel 專欄休眠許久，「Process State」這個章節居然還沒有整理上來，因此在這裡補上這個部份，以免上課要講解時無料可用。 Process 的狀態（state）紀錄在 process descriptor 的 state 欄位。如果您對 process、fork（process creation）以及 preemptive 不熟悉的話，建議您先從頭依序閱讀「Linux Kernel...</description>
         <link>http://www.jollen.org/blog/2008/07/process_state_wait_queue.html</link>
         <guid>http://www.jollen.org/blog/2008/07/process_state_wait_queue.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 17 Jul 2008 23:52:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] 入門 ARM9 平臺 Linux 驅動程式的基本功</title>
         <description>本週進行「Linux Device Drivers」訓練課程，開始帶領學員在 JK2410 開發板上實際撰寫硬體控制的程式碼。前一階段課程費了許多功夫解釋整個架構和觀念，這部份是與硬體無關的主題，主要針對 Linux 作業系統本身的實作與機制做觀念解說，例如：scheduling（為什麼要使用 wait queue 做 I/O 排程、以及使用時機）、critical section 等等。 我們花了一點時間幫同學建立基本概念，主要都是基本功的訓練，整理如下： 1. JK2410 開發板的操作：如何下載 kernel 與 rootfs 到開發板。 2. Kernel 編譯與設定：toolchain 的取得與安裝、Linux kernel 原始碼的取得、如何設定 kernel、如何包裝成 u-boot 格式。 3. 如何將 cdata 移植到 kernel source tree：透過 Config.in（2.4 kernel）與...</description>
         <link>http://www.jollen.org/blog/2008/07/goto_arm_linux_device_drivers.html</link>
         <guid>http://www.jollen.org/blog/2008/07/goto_arm_linux_device_drivers.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 13 Jul 2008 14:27:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>千呼萬喚 Neo FreeRunner 正式上市</title>
         <description>千呼萬喚始出來，第一個開放式的行動通訊平臺 Openmoko 今天正式展開第二代手機產品 Neo FreeRunner 的線上銷售。Openmoko 的官方新聞稿已經發佈在這裡了 [Openmoko Declares Independence for the Mobile Phone]，特別選在獨立紀念日開放 Neo FreeRunner 訂購，正意味著 Openmoko 將在手機市場裡「獨立」走出自己的路，Openmoko 在行動通訊界做了一個革新，這個革新代表的是手機終於獲得真正的自由。 與之前銷售 Neo1973 不同的地方是，Openmoko 這次除了透過線上直銷外，在印度、德國、法國與英國的朋友也能向當地代理商購買 Neo FreeRunner。 距離上次 Openmoko 推出第一代產品 Neo1973 已經過了好長一段時間了，這些日子裡，行動通訊產業發生了許多大事，像是開放手機平臺（如 Android）概念的興起，以及觸控螢幕手機（如 iPhone）的流行，都讓大家有一種耳目一新的感覺。 Openmoko 呢？ 這段時間，Openmoko 除了面臨外在的挑戰外，內部也有很大的調整與改變，但不管怎麼樣，我們相信結果是好的，社群開發者也更積極參與 Openmoko 平臺的開發，而且我們也看到了 Openmoko...</description>
         <link>http://www.jollen.org/blog/2008/07/neo_freerunner_onsale.html</link>
         <guid>http://www.jollen.org/blog/2008/07/neo_freerunner_onsale.html</guid>
         <category>Openmoko</category>
         <pubDate>Fri, 04 Jul 2008 11:42:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Google 手機計畫的腳步慢下來了</title>
         <description>在 The Wall Street Journal 上的一篇文章指出「Google 手機計畫的腳步慢下來了」，有興趣的朋友可參考原文 [Google&apos;s Mobile-Handset Plans Are Slowed]。原因是 carrier 仍與 Android 平臺奮戰中。以下是一些重點掃描，還有些許自已的想法。 Wireless carriers 要的是可以支援自家網路服務的行動裝置，而不是銷售支援其他網路服務的手機，或是自已的網路服務只是該手機的「附加功能」。由此文章也可以看出，這樣的需求，讓 wireless carriers 也開始要求手機製造商製造「branded phones」。即使像 Samsung 這樣的手機製造大廠，也面臨 carrier 要求掛品牌的問題，這方面 Samsung 並沒有什麼回應。 手機品牌廠面臨的一個問題是，當使用者需要的是能提供網路服務的手機時，勢必要和 carrier 建立良好的合作關係。當 carrier 提出的規格，是要求掛自家品牌時，像 Samsung 這樣的手機廠就會面臨一些壓力。從另一個角度來看，手機製造商（handset makers）有了另一個不錯的機會。 提供客製化的應用程式與 UI，以支援不同的網路服務，這是 carrier...</description>
         <link>http://www.jollen.org/blog/2008/06/android_slowed_carrier.html</link>
         <guid>http://www.jollen.org/blog/2008/06/android_slowed_carrier.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Tue, 24 Jun 2008 11:11:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] 從 kernel-space 讀取 user-space 的字串</title>
         <description>User application 使用 write() 函數將字串寫到裝置檔，所以在 driver 裡頭，就要實作 write system call。當字串的傳遞是透過 write system call 寫至 kernel-space 時，driver 就要使用 copy_from_user() 來讀取 user-space 的字串。以下是一個簡單的 write driver function 實作參考，此實作提供由 kernel-space 讀取 kernel-space 字串的方法，當然這裡頭包含諸多隱含在程式裡的重要關念，例如： 1. user-space page 是 valid 或 invalid。 2. 讓不同 device file...</description>
         <link>http://www.jollen.org/blog/2008/06/write_driver_function.html</link>
         <guid>http://www.jollen.org/blog/2008/06/write_driver_function.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 22 Jun 2008 11:47:40 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] 呼叫 kmalloc(GFP_KERNEL) 的函數要可以重覆進入</title>
         <description>使用 kmalloc() 時，要特別注重的是「可重覆進入」的觀念。kmalloc() 的第二個參數稱為 allocation flag，用來控制 kmalloc() 的行為，當此參數有指定 GFP_KERNEL 旗標時，kmalloc() 就是一個 blocking function。 使用 GFP_KERNEL 旗標來配置記憶體時，為什麼會有可重覆進入的議題呢？主要的關鍵在於，當 kmalloc(..., GFP_KERNEL) 無法配置記憶體時，便會做「等待」的動作，這個等待的動作是對「current process」做重排程，並等候記憶體空間。 以 open driver function 來看，通常我們會在 open driver function 裡做記憶體的配置，當記憶體目前無法取得時，open driver function 便會停止（等待），因此不會完成這一次的函數呼叫（沒有 return），此時，同一個 open driver function 會不會再被「重覆」呼叫執行呢？當然會。因為，可能會有另一個 process 去開啟 major...</description>
         <link>http://www.jollen.org/blog/2008/06/kmalloc_reentrant.html</link>
         <guid>http://www.jollen.org/blog/2008/06/kmalloc_reentrant.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 22 Jun 2008 10:10:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Open Source in Mobile 2008 今年更盛大了</title>
         <description>[OSiM World（Open Source in Mobile 2008）] 將於九月17-18日於德國 Berlin 舉行，將有超過 100 位來自 Open Source Mobile 生態系統（ecosystem）的不同產業界重量級講者，為大家帶來各種不同的講題。OSiM 可說是全世界最大且影響力最強的 Open Source Mobile 研討會，有超過 42 個國家的與會者以及不同產業的領域者將出席此會議，今年的 OSiM 可說是 Open Source Mobile 的領導級活動。 倒底有哪些重量級人物將發表演說，查了一下 [Speakers] 果然不是蓋的，像是： * Ari Jaaksi - Nokia / Open Source Operations...</description>
         <link>http://www.jollen.org/blog/2008/06/osim_2008.html</link>
         <guid>http://www.jollen.org/blog/2008/06/osim_2008.html</guid>
         <category>其它</category>
         <pubDate>Sat, 21 Jun 2008 23:14:31 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Google 說 Android 將會 100% 開放源碼</title>
         <description>過去大家經常在討論「Android 不是 100% 開放源碼」，但 Google 目前已做了正式的解釋，Google 表示「the core Android platform will be 100% open source」這又將掀起大家對 Android 的另一波討論。 報導表示，在與多位 Google 員工確認後知道「everything will be opened」，並且所有核心部份也都將採用 Apache software license (ASLv2)，非 core Android 部份的授權則不一定採用 ASLv2。Android 平臺是基於 Embedded Linux 系統，在 Embedded Linux 平臺上，大部份 FOSS 軟體原本就採用...</description>
         <link>http://www.jollen.org/blog/2008/06/google_android_full_opensource.html</link>
         <guid>http://www.jollen.org/blog/2008/06/google_android_full_opensource.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Thu, 05 Jun 2008 08:48:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux WiMAX Driver 實作現況分析</title>
         <description>前陣子接受 DigiTimes 的「手持行動裝置開發關鍵軟體技術發展」研討會邀請，當時就在思考要以什麼主題為主。一些題目大概都是老生常談了，而且又不想以介紹性的方式進行。想了又想，發現最近最當紅的主題非 WiMAX 莫屬，WiMAX 也是今年 Computex 展的主題，因此決定以 Intel 的 [Linux WiMAX development project] 專案做為討論標的。5 月 29 日這一天的演講就以「Linux WiMAX Driver 實作現況分析」定題了。 linuxmax.org 是 Intel 所支持的一個專案計畫，此計畫目前已釋出第一個 WiMAX device driver 以及 WiMAX stack。目前在 linuxwimax.org 上已能找到 Intel WiMAX Connection 2400m 的驅動程式，以及一個 WiMAX stack...</description>
         <link>http://www.jollen.org/blog/2008/06/linux_wimax_driver.html</link>
         <guid>http://www.jollen.org/blog/2008/06/linux_wimax_driver.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 01 Jun 2008 23:20:11 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Richard Stallman 台灣行第四天紀錄: 5/15 演講實紀</title>
         <description>這次的演講地點是清華大學的大禮堂，這是一個又大又舒適的場地，大家都能坐在舒服的軟椅上聽演講。我們在入口處設置了「義賣處」，專賣由 Free Software Foundation 遠渡重洋寄來的一些小玩意兒，我們也依照 Richard 的意思，在現場義賣他自己的書。 今天的主題是自由軟體運動，以及 GNU/Linux operating system，這場演講其實我並沒有很專心在聽講（*汗*），因為一直不斷地在會場穿梭。不過，有許多這天來聽演講的朋友，都在自已的 blog 上做了很不錯的紀錄，他們的紀錄會比較有參考價值： * 2008-05-21: E-Mate News: A talk from Richard Stallman * 2008-05-19: Hialan&apos;s Blog: 5/15 Richard Stallman 清大演講心得 * 2008-05-17: 魔法設計的藝術: 自由軟體之父理查史托曼的演講(清華場) * 2008:05-16: Ryan Chung&apos;s Blog: Richard...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman_speech_nthu.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman_speech_nthu.html</guid>
         <category>其它</category>
         <pubDate>Thu, 22 May 2008 11:40:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Richard Stallman 台灣行第四天紀錄: 5/15 新竹清大行側寫</title>
         <description>5 月 15 日的行程是帶 Richard Stallman 到新竹清華大學，這一天大師所要發表的演講主題是「The Free Software Movement and the GNU/Linux Operating System」。與 Richard 接觸幾天下來，發現他其實是一個很喜歡「看世界」的老爹，正好，我偏愛人物側寫，因此再度來和大家爆料。 Richard Stallman 喜歡什麼東西？幾天下來，我們知道大師喜歡「民俗傳統音樂」、「中國菜」、「中國茶」、「山」，以及「火車」。因此這一天，我和一位商周的記者特別帶 Richard 搭台灣高鐵。Richard 喜歡靠窗的位子，不過他很有風度地讓座給他的女朋友 Dora。 來到高鐵站後，Richard 和 Dora 都覺得高鐵站真是太漂亮了，又大又寬倘，我們照了幾張照片，就往「玻璃工藝博物館」出發了。沒錯！我們是從高鐵站直接開跋到玻璃工藝博物館，為什麼我們會跑到這裡來呢？因為，大師不知道是怎麼知道新竹有這個地方的，他在前一天就特別交待我們，一定要帶他來這裡！ 參觀完玻璃工藝博物館後，我們終於可以來到真正的目的地「清華大學」了。清華大學資工系的幾位教授，在清大裡的一間咖啡店設席款待大師。Richard 非常熱愛閱讀，我們一帶他進到咖啡店後，他就突然眼睛一亮，因為店裡滿滿地都是原文書。他問道「這裡是書店嗎」，正巧遇到咖啡店的老闆，他為大師解答了這個問題，原來，這裡以前是一家書店。 大師突然興緻一來，逛起書店了。他和咖啡店老闆似乎相當聊得來，聊書、聊音樂，興致大開，還在店裡的牆上留下簽名。聊天簽名還不夠，Richard 還挑了幾本書想要買回去，老闆也很夠意思，打折賣出！用餐後，即將展開今晚的演講。離去前，Richard 還問道「你們店開到什麼時候」，他還想要回來挑書呢！幾天下來，看到了大師非常不一樣的另一面，真是一個意外的收獲。...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman_day4.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman_day4.html</guid>
         <category>其它</category>
         <pubDate>Wed, 21 May 2008 20:54:14 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Richard Stallman 結束訪台行程: 5/19 離台</title>
         <description>Richard Stallman 於前天（5/19）離台，前往香港，正式結束這次的訪台行程。相隔三年，Richard 再度來台，對台灣還是記憶深刻呢。上個週末，Openmoko 同事帶著大師品嘗台灣的知名餐廳「鼎泰豐」，以及別具特色的茶料理「喫茶趣」；後者是大師欽點，他在三年前到台灣時曾經品嘗過，這次來台灣特別點名要我們帶他去呢！ 這天早上大約八點來到 Openmoko 公寓找大師，大師給了我一堆貼紙以及胸針，要我分給有需要的朋友。Richard 搭乘港龍航空到香港，接下來的行程如下： * 2008-05-24: 上海復旦大學 - Free Software in Ethics and in Practice * 2008-05-28: 西安交通大學 - Free Software in Ethics and in Practice * 2008-05-30: 北京清華大學 - Free Software in Ethics and...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman_departure.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman_departure.html</guid>
         <category>其它</category>
         <pubDate>Wed, 21 May 2008 16:43:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Richard Stallman 台灣行第三天：下課後</title>
         <description>大師第三天除了到淡江大學演講外，下午還有私人行程，現在就由我來為大家大爆料，瞧瞧大師的另一面！這天，結束公開演講行程後，一行人加大師一共五個人，驅車來到淡水老街裡的一家海鮮餐廳，準備替 Richard 安排一頓豐富的海鮮大餐。 不說您不知道，Richard 是個美食愛好者，而且特愛中國菜，這次來到台灣，我們帶他品嘗了好幾家各具特色的餐廳，遇到他喜歡的菜時，還會眯著眼睛細細品味，一副陶醉樣呢。Richard 今天出門特別帶了一包從義大利帶來的麵包條，午餐時，他把麵包條拿了出來，然後分給大家吃。嗯！這麵包條的味道還真不錯，酥酥脆脆，還有點甜甜的，不過，大師可不是想把麵包條拿來配飯，他把麵包條當筷子用！據大師說，這樣在吃完飯後，可以直接把筷子吃掉！ 午餐後，我們帶 Richard 來到關渡的華碩總公司，他今天有一個拜訪 EeePC 的行程。大師跟 EeePC 的幾位工程師，討論了一些技術議題，其中最重要的就是有關「Free BIOS」的討論。大師的工作配備是一台 OLPC（One Laptop Per Child）再加上一個外接鍵盤，為什麼他要用 OLPC 呢？「因為 OLPC 用的是 Free BIOS」，Richard 說。 當然，自由軟體之父來到此寶地，最重要的工作莫過於推廣自由軟體的理念。「希望 EeePC 能協助推廣自由軟體，並告訴大家，EeePC 用的是 GNU/Linux 系統，而不是 Linux 系統」，Richard Stallman 說。現場 EeePC 的朋友也表達高度的誠意，以及協助推廣自由軟體的意願，「或許我們可以先將 Web 上的內容做修改」（將 Linux...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman.html</guid>
         <category>其它</category>
         <pubDate>Fri, 16 May 2008 22:23:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Richard Stallman 台灣行第三天：演講「The Danger of Software Patent」</title>
         <description>大師今天的行程是到台北的淡江大學發表公開演說，我的同事 tick 今天充當地陪，到 Openmoko 公寓帶 Richard 到淡江大學。今天的場地大約有200個座位，因為反應熱烈，連講座的樓梯也都快坐滿人了！ 今天的講題是「The Danger of Software Patent」，Richard 主要在談論軟體專利是如何危害「創意與想法」的進步，他並且在黑板上畫了一個圖，來講解軟體專利的危險，以及與藥品或其它工程專利的不同。這是一個很有想法的見解，過去我只知道自由軟體基金會是非常「反專利」的，但從未深入了解其原因，今天大師親自到場為大家解釋「為什麼軟體專利不合理」的想法，非常有收獲，因為讓我了解到其實 Richard Stallman 並不是在「反專利體系」，而是強調「軟體專利」的不合理性。 今天在會場遇到了ZDNet Taiwan的馬培治記者，他也寫了一篇相關的報導 [自由軟體基金會創辦人：軟體專利有害無益] 簡單紀錄了 Richard Stallman 今天的演說主軸，是一篇很有參考價值的報導。 Richard 提到「軟體是一個很大的設計專案、需要數以千計的想法（idea）」，他又說道「一個功能就需要由許多的想法所構成（one feature, lots of ideas）」，所以，如果所有的想法都被專利所禁箇，對使用者（也就是我們）其實是一種傷害，我們（也就是使用者）應該站出來悍衛軟體的「自由」不被商業利益所危害。若軟體無法自由修改或變更，使用者也就失去這樣享受「軟體無限創意」的自由了。 「The Danger of Software Patent」軟體專利的危害，在於讓我們無法將「各種不同的想法加以組合」。因為，若想法被專利所限制，人類（使用者）將無法享受軟體多樣化的自由。「想法若透過專利來加以限制，時間一久，將會造成無限的危害」，Richard Stallman 說。 大師將於15日晚間於清華大學發表第二場公開演說，這是大師訪台的最後一場演講，想要一睹大師風采的朋友，可要好好把握機會了！活動訊息請參閱：[http://wiki.openmoko.org/wiki/Richard_Stallman/zh_tw]。 延伸閱讀 2008.05.12: Richard...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman_day3_tku.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman_day3_tku.html</guid>
         <category>其它</category>
         <pubDate>Wed, 14 May 2008 23:01:05 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Richard Stallman 台灣行第一天</title>
         <description>自由軟體基金會創辦人 Richard Stallman 今天下午抵達台灣。這次 Richard Stallman 來台，有一位美麗的小姐 Dora 隨行。到機場接機時，一眼就認出站在路邊等候的大師。大鬍子是大師的特色，非常地容易辨認。 一行人先將 Richard 接到 Openmoko apartment，沒錯！這是「Openmoko 公寓」，是專門「招待」外國工程師的「行館」，Openmoko 公寓非常靠近 Taipei 101。來的路上，Richard 在高速公路上看到 Taipei 101 時，發出了讚嘆的聲音。Richard 的女友 Dora 小姐，對於 101 的外觀則是感到興趣，她覺得 101 大樓長的真是奇怪呢！ 大師是一位非常依賴電子郵件的人，他所有的工作幾乎都是透過電子郵件完成的。在 Richard 來台前，我們也都是完全依靠電子郵件和 Richard 討論行程，以及確認每一個細節。在電子郵件往來過程發現，大師就是大師，對每一個細節都很注重以及重視，這可不是台灣人講的「龜毛」，而是對於工作的認真態度，以及對理念的執著。Richard 在「自由軟體運動」的道路上，一路走來，始終如一。 Richard Stallman 對於自由軟體運動理念相當執著，因此可能有人會認為他是一個不好相處的人，但是今天和大師相處一天下來，我覺得，大師並沒有大師的感覺。不要誤會我的意思了，我指的是，Richard 是一個沒有大師架子的「老爹」，也就沒有那種難以接近，或是言語交談時的壓迫感。除了有些地方，大師有他的「堅持」外，其他事情都很容易和他溝通。但其實，Richard 所堅持的，也只是在表達他的想法，希望能讓我們都能聽聽他的觀念。能親自聽到大師述說他的觀念，這真是一個難得的經驗。...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman_day1.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman_day1.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 12 May 2008 23:09:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>自由軟體基金會創辦人 Richard Stallman 來台演講</title>
         <description>學生時代就相當敬佩的自由軟體精神領袖 Richard Stallman 要來台灣了。Richard Stallman 在就讀哈佛大學時，於麻省理工人工智能實驗室發展 Emacs 軟體，也就是在這個時期，他體驗到駭客文化的可貴與精神，從此成為悍衛自由軟體的鬥士。Sam Williams 也寫了一本「自由軟體的聖戰」[1]，內容在描述 Richard Stallman 的自由軟體運動。 以下引述 Openmoko 的新聞稿： 自由軟體基金會創辦人、同時也是知名軟體 GNU Compiler Collection (GCC) 與 GNU Debugger (GDB) 的原始作者與開發者 Richard Stallman 將於 5 月 12 日來台並發表演說。Richard 於 1984 年發動 GNU operating system 發展計畫，並在...</description>
         <link>http://www.jollen.org/blog/2008/05/richard_stallman_speech_taiwan.html</link>
         <guid>http://www.jollen.org/blog/2008/05/richard_stallman_speech_taiwan.html</guid>
         <category>Openmoko</category>
         <pubDate>Sat, 03 May 2008 11:55:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>嵌入式系統廠商不能不懂的自由軟體授權 GPLv3</title>
         <description>Richard Stallman[1] 是 Free Software Foundation[2]（自由軟體基金會）的創始人。FSF 成立於 1985 年，致力於爭取電腦使用者的軟體使用自由。Richard 也在 1989 年寫出了第一個 GPL （GNU General Public License）[3] 條款，並在 1991 年 6 月份時釋出 GPLv2（GPL version 2）。 GPL 是現今最重要的 Free and Open Source Software（FOSS）授權條款，至今有超過 60% 的自由軟體都是採取 GPL 授權規範。因應時勢需要，GPLv3 在經過長時間的討論後，也於 2007 年 6...</description>
         <link>http://www.jollen.org/blog/2008/04/foss_gplv3_business_embedded_systems.html</link>
         <guid>http://www.jollen.org/blog/2008/04/foss_gplv3_business_embedded_systems.html</guid>
         <category>其它</category>
         <pubDate>Wed, 30 Apr 2008 15:14:53 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Qt 4.4 在 Neo1973 與 HTC Touch Cruise 上展示 iPhone-Like 介面</title>
         <description>前一篇日記「iPhone 改變工程師設計嵌入式裝置的思惟」提到 iPhone 在 UI 方面的卓越表現。稍早前，[Trolltech Labs] 發表一項新的實驗項目：新的 Qt 4.4 已經可以在 Windows Mobile 以及 Embedded Linux 二個平臺上執行了。 (圖片來源：http://dist.trolltech.com/video/wince/qtembedded44video.html) Trolltech Labs 提供一段 demo 影片，Windows Mobile 平臺使用 HTC Touch Cruise 手機，Embedded Linux 平臺則是使用 Openmoko 的 Neo1973 手機。不過，最引人注目的不是「Qt Everywhere」的表現。新的 Qt 在 UI 方面最令人驚豔的是它的「iPhone...</description>
         <link>http://www.jollen.org/blog/2008/04/qt_iphone_like_graphics.html</link>
         <guid>http://www.jollen.org/blog/2008/04/qt_iphone_like_graphics.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 24 Apr 2008 14:00:31 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>iPhone 改變工程師設計嵌入式裝置的思惟</title>
         <description>嵌入式系統發展的標準化平臺正在加速進行。嵌入式裝置的確和桌上型系統（desktop）很不一樣，iPhone 的成功展示了以使用者為中心（user-centered）的設計模式，Patrick Mannion 稱 iPhone 是一種軟體設計的工藝（feat）。(*1) 去年（2007年）十月份於 San Francisco 所舉辦的「Mobile 2.0」研討會上，討論了「Mobile 2.0」（例如：開發式手機平臺）的三大重要課題：user experience、usability 與 design。user-centered 設計模式即是一種收集使用者經驗，並透過使用者經驗工程，設計使用性（usability）更佳的操作介面（UI）。UI 的設計是使用性的重要一環，iPhone 的 UI 設計已經不用再多說了，使用性要佳，裝置必須更聰明（smarter）。應用程式之間是否能緊密地整合，是決定使用性良劣的另外一個重要的因素，「緊密整合」稱之為 coherence 而不是 integration。 Coherence 才能讓裝置更聰明，而不是 integration。 一般的嵌入式裝置都有多層的應用程式架構（layers），也有很多功能層，將許多不同的程式庫、軟體元件等整合在一起，稱之為「integration」，並不是 coherence。甚致，目前的嵌入式裝置雖然有複雜的多分層設計，但之中完全沒有緊密性（coherence）可言。 「iPhone 是一項偉大的創舉與成功，它全部都是軟體。它是一個開放標準（open-standard）的平臺、很可靠，並且有很好的 user interface。」(*1) iPhone 是一個「以使用者為中心的設計典範」並且強力展示了「嵌入式軟體的設計工藝」。要把軟體設計得較複雜，很簡單！但要把軟體設計簡單化，就不容易了！這就是 iPhone 軟體工藝技術的表現。在莫耳定律的影響下，科技業無不卯足全力提升技術，並加速創新流程，但「Apple 則是很滿意他的慢步化表現」（*2)。 [1] iPhone nudging...</description>
         <link>http://www.jollen.org/blog/2008/04/iphone_reconsider_embedded_design.html</link>
         <guid>http://www.jollen.org/blog/2008/04/iphone_reconsider_embedded_design.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Tue, 22 Apr 2008 23:45:59 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] 關於驅動程式的 private data 與可重覆進入函數</title>
         <description>今天進行 Linux 驅動程式的教育訓練課程，課堂中提到「多個 process (/dev/debug[0..n]) 同時 invoke 同一個驅動程式 (fops) 的架構觀念與程式設計」，我們也做了一個課堂練習。這是 Linux 驅動程式架構上，很重要的一個觀念。 如圖，當 P 與 Q 二個 process 同時在系統裡執行時，因為開啟的裝置檔不同，因此 kernel（VFS switch）會分別為二個裝置檔建立一個 struct file 的資料結構空間。因為二個裝置檔的 major number 相同，因此如果 P/Q 同時（或非同時）執行 write system call 時，都會引用（invoke）到同一份程式碼（即圖上的 xxx_write）。 VFS Switch 在 callback xxx_write 時，便會將「正確的」struct...</description>
         <link>http://www.jollen.org/blog/2008/04/private_data_and_reentrant_function.html</link>
         <guid>http://www.jollen.org/blog/2008/04/private_data_and_reentrant_function.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 20 Apr 2008 17:09:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>開放手機：談中國市場的機會</title>
         <description>開放手機的新機會在中國。過去在日記「開放手機：Linux Mobile Phone」與「開放手機：談東方開源」中提到：「拿掉開放手機這件事不說，中國手機市場，不管是低價或高階手機，都已經被國際大廠佔據，很難從中再找到發揮的空間。」、「中國白牌與黑牌手機的特殊市場，更把中國手機的市場空間壓縮得更小」。 這幾天，恰巧也有新聞指出：「大陸主流手機 台品牌廠全面撤退 難敵國際大廠 紛轉戰智慧型手機」。中國手機市場龐大，相當迷人，但進去走一遭卻發現這個市場的困難度。中國人口眾多，「一人買我一顆包子就夠了」形容中國市場「到處是錢潮」，可是手機廠在這裡卻履踢鐵板。解決策略是什麼？ 以下就市場機會與開放平臺二個方向，發表一些個人想法。 市場機會 「透過開放平臺的Linux手機，在更低價手機端（高度一致性的軟硬體平臺），或是不同市場需求的高階手機市場，會是一個很好的機會。」幾天前在台大晶片中心所舉辦的「開放式手機平台論壇」中，主持人陳良基主任也提到「透過開放式手機進入中國的中低階手機市場，會是一個很好的機會」。 由於中國的手機市場已經是國際大廠的天下了，所以採取弱者策略應是中小型手機廠可參考的做法。怎麼樣的廠商叫中小型手機廠？如果不是在中國的這幾個國際大廠，當然就屬中小型廠商。幾百萬支的量，在中國也不算是大規模。以Openmoko來說，這本來就是一家小規模的手機公司，放到中國，只能以「微型企業」自居，所以行銷策略的目的並不是在搶市佔率，而是建立一個屬於自已的小天地。 高階中階低階手機，在這裡都會有機會。不過，「不同市場需求」的高階手機，會是比較容易的一個方向。所謂的不同市場需求的高階手機，就是「差異化的smartphone」。 開放平臺 從事開放手機的工作，最好可以將「積極尋求open-source社群」協助列為主要的經營策略之一。透過open-source社群、集結眾人智慧、快速累積成果與經驗、建立使用者驗體管道、收集使用者經驗等，都是「開放手機平臺」的新革命。 開放手機是一門「使用者生產」的藝術， 如果只是將Android當作是一個「快速的」、「降低研發成本的」、「免費的」、「現成的」手機平臺，就會忽略掉開放平臺最重要的資源與最強大的武器，就會有一點點可惜囉。正因為社群是「協作」模式，所以有時會感覺到「生產過程缺乏組織與條理」，這個部份，肯定違背專業經理人的思考原則。社群發展原本就是比較「抽象」的藝術， 跟科技的「具象」思考不太一樣。有些時候，就要調整自已的想法，或是建構新的思惟體系，才能適應。畢竟，看似沒有條理的一些行動，最後都可能連結成一股強大的力量。 開放平臺的open-source ecosystem，能協助產品差異化的進行，並加速創新流程。不管是外來廠商，或是中國本土的手機廠，開放平臺都是一個很好的新機會。...</description>
         <link>http://www.jollen.org/blog/2008/04/open_mobile_in_china_new_chance.html</link>
         <guid>http://www.jollen.org/blog/2008/04/open_mobile_in_china_new_chance.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Sat, 12 Apr 2008 13:36:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「開放式手機平台論壇」會後手札</title>
         <description>臺灣大學系統晶片中心（System-on-Chip Center, National Taiwan University）今天舉辦「開放式手機平臺論壇」研討活動，此活動邀請產研界的多位先進，以談話方式針對開放式手機平臺進行看法分享與意見交換。 去年自從Google公開發表「Android」平臺與OHA聯盟現身後，開放手機平臺的概念開始被大量討論，並且受到極大的重視。今天的活動當然也是將主軸放在Android平臺上，由會議中的討論，很明顯地感受到各界對於開放手機概念的重視，許多人對於Android也有高度的期許，希望新概念的出現，能產生新的機會與商機。 已經感冒超過二個星期了，惱人的咳嗽久久不能停止，連講話都有點上氣不接下氣，不過還是很認真地在會場聆聽多位先進的看法。順手寫上一點手札，整理下來和大家分享。最後也加上一點個人看法，請參考指正。 「工研院資通所 林寶樹所長」提到，Android可以幫助廠商減少在軟體方面的投資。而台灣廠商面對未來的開放式手機新挑戰，將會是手機「外觀」與「界面」的議題。此外，開放手機平臺將能整合WiMAX並產生新的服務。林所長也提到，在open source community &amp; project這裡，尚未找到成功的開放手機案例。 「台大資訊系 林風教授」是很資深的行動網路應用研究者，實務上也有很完整的經驗，林教授提到，在他過去的研究經驗中看到，「security」會是開放手機平臺一個重要的議題。「凌陽 林文昌副總」以技術角度分享了一些有趣的看法，林副總認為，從IC design house的角度來看，太多的open source軟體對他們來說也是一種負擔，porting的工作以及來自於客戶端的要求，經常成為沈重的負擔。 「資策會網多所 何寶中所長」表示，「Google的企圖是建立新的手機產業鍊」，何所長也針對台灣完整的產業鍊，提出一份「台灣版OHA對照表」，試著從台灣本土的廠商組織出「台灣版的OHA」，這是個有趣而且值得深思的看法。 「聯發科技 張志偉特助」以比較結論的方式發表看法，同時也大略介紹了聯發科技在手機的佈局，聯發科技在3G與smartphone上也會有些著墨，例如WiMAX phone以及DVB-H的roadmap。 前陣子，與Openmoko的CEO ‘Sean’討論了一些關於Linux手機的研發成本議題。開放手機採用Linux作業系統核心，不管是Openmoko或是Android都是採用2.6的Linux核心，但大家對於「Linux手機」卻有一種「美麗的誤會」，這是建立在「Linux是免費的」（正確來講是自由的、不是免費的）刻板映像上。但使用「開放」的手機平臺，是為了尋找新的機會，更明白來說，是為了建立或尋找新的商業模式（business model）。 「台大系統晶片中心 陳良基主任」一開始也提到「open source需要Q.C.」的技術，才能導入產品化。原因是，大多數的open source軟體都是玩家為了證明一些觀念所實作的程式碼，要將這麼多的open source project成果整合成一個平臺，在此平臺上開發應用程式，原本就不是一件簡單的事情，若要再將這個open source平臺整合到「裝置」上（產品），則需要更多的know-how與工程技術，才能讓軟硬體整合無間。 這些都是使用「Linux」來開發手機，需要付出的成本。 所以說，使用Linux並不是為了降低成本，事實上無形的工程成本是相當龐大的。過去，Openmoko也針對這個部份做了計算，若要將open source的成果整合成開放式手機平臺，並且生產手機，要付出的工程費用，單位是「億」。 使用Linux並不能讓你的研發成本降低。簡單來說，就像在玩樂高積木，你用積木堆出一台酷炫的機器人，但卻希望明天他就變成會飛的無敵鐵金鋼。玩具終究還是玩具，我們可以用樂高堆出「概念」，但要做出一台無敵鐵金鋼，這又是另當別論。 「嵌入式產業聯盟 盧功勳」會長也不約而同提到「Q.C.」是open...</description>
         <link>http://www.jollen.org/blog/2008/04/open_mobile_forum_notes.html</link>
         <guid>http://www.jollen.org/blog/2008/04/open_mobile_forum_notes.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Tue, 08 Apr 2008 23:56:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] 交叉編譯（cross compile）thttpd</title>
         <description>本週進行 root filesystem 相關的教育訓練，今天給的課堂練習是 thttpd 的交叉編譯（cross compile）。thttpd 採用標準的 GNU autoconf 來產生 Makefile，因此，交叉編譯 thttpd 的方式是蠻簡單的。配合課堂提供的 cross toolchain（gcc 3.4.1），我們先定義以下有關 cross toolchain 路徑檔檔名的 Makefile 變數： TOOL_TOP = /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu CC = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-gcc AR = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ar LD = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ld AS = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-as STRIP = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-strip...</description>
         <link>http://www.jollen.org/blog/2008/03/cross_compile_thttpd.html</link>
         <guid>http://www.jollen.org/blog/2008/03/cross_compile_thttpd.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 30 Mar 2008 10:54:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>開放手機：Linux Mobile Phone</title>
         <description>中國手機市場如此迷人，又該如何切入呢？開放手機平臺便是一個絕佳的機會。拿掉開放手機這件事不說，中國手機市場，不管是低價或高階手機，都已經被國際大廠佔據，很難從中再找到發揮的空間。此外，中國白牌與黑牌手機的特殊市場，更把中國手機的市場空間壓縮得更小，在中國，超過5000萬台的黑手機，消滅掉了一些中小型的手機廠的生存空間。 因此，透過開放平臺的Linux手機，在更低價手機端（高度一致性的軟硬體平臺），或是不同市場需求的高階手機市場，會是一個很好的機會。自從去年十一月份， Google 正式公開 Android 計畫後，「開放手機平臺（Open Mobile Platform）」的概念開始受到重視。幾個月下來，隨著媒體的報導，讓開放手機平臺概念的大量且持續的曝光，越來越多人在網路上討論這樣的概念，而真 正的引爆點則是 Android 原型機的現身。今年的 Mobile World Congress 展上出現了 Android 的原型機。 Linux手機的技術議題 Linux 作業系統在開放手機平臺佔有舉足輕重的角色，Android 的系統層使用 Linux 2.6 作業系統核心，OpenMoko 平臺也是採用 Linux 2.6 作業系統核心，另外一個重要的開放手機平臺 GMAE 也是基於 Linux 作業系統。 Linux kernel在技術端有幾個主要的議題，在北京的 Linux Developer Symposium上被提出討論。由於官方的Linux kernel更新速度相當頻繁，因此造成不同版本間的一些相容性問題。此外， Linux kernel的社群對Linux...</description>
         <link>http://www.jollen.org/blog/2008/03/open_mobile_phone_linux.html</link>
         <guid>http://www.jollen.org/blog/2008/03/open_mobile_phone_linux.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Sat, 22 Mar 2008 21:12:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>開放手機：談東方開源</title>
         <description>今年的2月19到20日，中國開源軟件推廣聯盟（COPU, China OSS Promotion Union）與Linux基金會（the Linux Foundation）在北京共同舉辦「Linux Developer Symposium（Linux開發者研討會）」。全球三大手機聯盟LiPS、LiMO與OhA都到場發表演說。LiPS在會中提到「中國目前已經是全球最大的手機市場了。」顯見未來中國在手機產業，不管是消費者端、技術端或是規格標準面，都扮演重要的角色。 在手機市場策略方面，鎖定中國市場會是很好的做法，但是若想要由龐大的中國市場分享利益（market share），恐怕並不是一件簡單的事情。 去年全球手機出貨量大約11億支，其中有5.5億支是被賣到中國，佔了將近一半的數量，這還不包括「無法統計」的部份。中國市場由於受「在地文化」的影響很深，因此外來的手機廠商比較難以切入中國市場。中國的開源軟件風氣也很興盛，但與西方的開源文化確有很大的不同。 中國的開源軟件文化主要是由國家單位以及軟件公司推動，再加上本地文化的影響，造就出一個中國自已的特殊開放源碼文化。中國很重視「本地化」這件事情，所謂的本地化，只做「中文化」是不夠的，心須是中國本土「製作」的才是本地化軟件。 許多公司想要運用開放源碼策略進軍中國，但總是吃閉門𡙡。根本原因在於「開放源碼這件事情在中國已經自成體系」，直接拿西方那套策略套用在中國是行不通的。西方的開源是由社群（community）驅動，由社群裡發展出商業模式；但在中國或是台灣，開源是直接拿取開源軟件進行商業用途，直接透過企業或聯盟驅動。 《待續》...</description>
         <link>http://www.jollen.org/blog/2008/03/eastern_world_open_source_culture.html</link>
         <guid>http://www.jollen.org/blog/2008/03/eastern_world_open_source_culture.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Thu, 20 Mar 2008 11:34:07 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] nonblocking wait: try lock</title>
         <description>今天在進行 GNU Toolchains 與 Embedded Linux Programming 教育訓練課程時，提及以 shared memory 實作 IPC 時的同步問題。針對 unrelated process 的同步存取控制，一種古老的做法「locking」能簡單地應用在此同步問題上。 當寫入端做出 locking（如：lock file）時，讀取端便要等待 locking 被解除，因此這是一個 blocking wait 的架構。不過，若將「wait for unlucking」改成「try lock」，便能在中間的空閒時間「做點事情」，程式也不會晾著沒事做。 一種簡單的程式架構，以「try lock」來做同步控制，讓程式閒著也要想辦法幹點活兒。另一個類似的觀念為 pthread semaphore 的 sem_trywait()。 延伸閱讀 2007.01.16: Shared Memory 的 Race Condition...</description>
         <link>http://www.jollen.org/blog/2008/03/nonblocking_wait_try_lock.html</link>
         <guid>http://www.jollen.org/blog/2008/03/nonblocking_wait_try_lock.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sat, 15 Mar 2008 18:13:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Openmoko 開放 Neo 手機工業設計</title>
         <description>過去，手機的工業設計（Industrial Design）都是封閉的，設計原稿走不出深宮大院，設計師拿不到設計原稿，一般人也很難一探手機工業設計的原始樣貌。不過，現在事情不一樣了。在 open source 手機軟體平臺深耕許久的 Openmoko 今天正式發佈一則新聞「Openmoko Unlocks Neo Mobile Phone Industrial Design」，Openmoko 以 ShareAlike Creative Commons （創用CC）授權開放 Neo 手機的工業設計原稿，讓設計師可以自由修改 Neo 工業設計。 創用CC不是一件新鮮事，但是將產品的工業設計原稿以創用CC授權對外公開，還是史上頭一遭。這次所公開的工業設計是 Neo1973 的設計，並提供 CAD 檔供下載 [http://downloads.openmoko.org/CAD/]。 不過早在此新聞稿發佈的幾個禮拜前，Openmoko 早就已經將 CAD 檔公開在首頁上（openmoko.com），社群上的人也很快得到這個消息並下載 CAD 檔，其中也有大學教授，將 Neo 的 CAD 應用在實務教學上。在這則新聞稿發佈的幾天前，一位大學教授 Guillermo 也將他所設計的...</description>
         <link>http://www.jollen.org/blog/2008/03/openmoko_unlocks_neo_mobile_phone_industrial_design.html</link>
         <guid>http://www.jollen.org/blog/2008/03/openmoko_unlocks_neo_mobile_phone_industrial_design.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 05 Mar 2008 11:47:41 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的中斷處理, #3: Bottom Half 的觀念</title>
         <description>為了能寫出很棒的 interrupt handle，Linux 採用一種稱為 bottom half 的觀念來實作 interrupt handler。 Linux 將完整的 interrupt handler 切成2個部份（half）：top half 與 bottom half。Top half 是在呼叫 request_irq() 時所指定的 interrupt handler 函數，bottom half 則是由 top half 所排程（scheduling），真正負責回應中斷的 task。 一般來說，top half 的基本實作原則如下： 1. 儲存裝置相關資料，這個部份會涉及「中斷不同步」的議題，在這裡先不做解釋。 2. 將 bottom half...</description>
         <link>http://www.jollen.org/blog/2008/03/interrupt_handling_bottom_half.html</link>
         <guid>http://www.jollen.org/blog/2008/03/interrupt_handling_bottom_half.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 03 Mar 2008 23:36:14 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的中斷處理, #2: 深入淺出中斷模式</title>
         <description>Interrupt handler 的工作是負責處理裝置的中斷請求，並將結果回報（feedback）給裝置。一般而言，裝置產生中斷時，都是與資料讀寫有關的請求。Interrupt handler 便要根據中斷的特性，來判斷此中斷是要請求驅動程式將資料寫入至裝置，或是由裝置讀取資料。 Linux 驅動程式的 interrupt handler 實作原則如下： 1. 在 interrupt handler 裡，叫醒真正負責此中斷的 task 後立即結束執行。 2. Interrupt handler 應儘量執行最少的程式碼。 3. Interrupt handler 若執行過久，會造成中斷的關閉時間過長，因此可能會遺失緊接著產生的中斷請求。 4. 若 interrupt handler 裡有過長的計算動作或執行過久的程式碼，則應使用 tasklet 或 task queue 將該段程式碼做排程，留待其它時間再執行。如此便可避免interrupt handler執行時間過久。 此外，在中斷模式下做同步控制時，還要考慮是否會佔用過久 CPU 時間的問題。為什麼中斷模式下寫 code...</description>
         <link>http://www.jollen.org/blog/2008/03/interrupt_handling_semaphore.html</link>
         <guid>http://www.jollen.org/blog/2008/03/interrupt_handling_semaphore.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 02 Mar 2008 22:09:11 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的中斷處理, #1: request_irq 基本觀念</title>
         <description>在Linux device driver 中，名為 “interrupt handler” 的 routine 負責處理（回應）實體的硬體中斷。當裝置中斷被觸發時，interrupt handler 便會執行，而 interrupt handler 就工作便是回應該中斷的請求（request）。 Interrupt handler 執行於 interrupt mode，並無 process context 資訊，因此，在 interrupt mode 下執行的執行碼需注意以下 3 點： 1. 由於沒有 process context 的關係，因此無法存取 user space。 2. 無法存取 current 巨集。current 巨集是一個指向自己的 kernel...</description>
         <link>http://www.jollen.org/blog/2008/03/interrupt_handling_1.html</link>
         <guid>http://www.jollen.org/blog/2008/03/interrupt_handling_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 01 Mar 2008 23:58:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[科技資訊] 日本嵌入式系統技術協會（JASA）介紹</title>
         <description>嵌入式系統是目前熱門的科技之一，各地也都有相關的產業協會。日本是嵌入式技術的大國，特別是日本的機器人技術更是全球知名的項目。JASA（Japan Embedded Systems Technology Association ）是日本的嵌入式技術協會，可參考 JASA 官方網站的介紹 [JASA Introduction]。由 JASA 的介紹發現，JASA 提供一個稱為「ETEC」（Embedded Technology Engineer Certification）的認證制度，以及一個年度的機器人大賽，可見日本在嵌入式技術產業上，有相當良好的組織運作。以下是 JASA 簡介的日中對照。 JASA 介紹 * 原文引用自 JASA 網站 [http://www.jasa.or.jp/top/intro/information.html]。 * 日文翻譯及中文編修由 ViYi 提供。 JASAは、組込み業界の基盤を作るべく、以下のような事業を行なっています。 会員、業界の方々に、事業参加への門戸を広く開放していますので、是非、一緒に活動して下さるようお誘いします。 JASA乃是日本社團法人嵌入式系統技術協會(Japan Embedded Systems Technology Association )的英文簡稱 。JASA成立於1986年8月7日，總部設在東京都中央區，分布則有札幌、東京、名古屋、金沢、大阪、福岡。目前會員數包括正會員: 148家企業 以及贊助會員:35家企業。...</description>
         <link>http://www.jollen.org/blog/2008/02/jasa_introduction.html</link>
         <guid>http://www.jollen.org/blog/2008/02/jasa_introduction.html</guid>
         <category>其它</category>
         <pubDate>Thu, 21 Feb 2008 16:45:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>開放手機平臺（Open Mobile Platform）的革命</title>
         <description>自從去年十一月份，Google 正式公開 Android 計畫後，「開放手機平臺（Open Mobile Platform）」的概念開始受到重視。幾個月下來，隨著媒體的報導，讓開放手機平臺概念的大量且持續的曝光，越來越多人在網路上討論這樣的概念，而真正的引爆點則是 Android 原型機的現身。今年的 Mobile World Congress 展上出現了 Android 的原型機，這裡有一些 Android 原型機的照片 [Google attacks: Android at Mobile World Congress]，如果您希望了解更多有關 Android 原型機的資訊，這篇也是入口文。 「開放手機平臺」（或精確來說「開放式智慧型手機作業系統與平臺」）在二零零八年正式引爆。[Android] 是 Google 所提出的開放手機軟體平臺，根據 [Open Handset Alliance]（OHA）的報導，Android 提供 mobile device 完整的軟體環境，包含：作業系統（Linux）、中介軟體（middleware）與主要的 mobile applications。Open Handset Alliance...</description>
         <link>http://www.jollen.org/blog/2008/02/open_smartphone_mobile_platform.html</link>
         <guid>http://www.jollen.org/blog/2008/02/open_smartphone_mobile_platform.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Tue, 19 Feb 2008 23:14:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 對 Android 的「官方」看法</title>
         <description>OpenMoko 的 project lead &apos;Sean Moss-Pultz&apos; 今天接受專訪時，正式提出他對開放手機以及對其他競爭對手的看法。其中，關於 Android 的出現對同樣也是開放平臺的 OpenMoko 有何影響，以及對 OpenMoko 會有什麼衝擊，Sean 今天也都提出他的看法。 首先，對於開放手機這件事情來說，Sean 認為這是不相衝突的二件事情，其觀念在於：一、OpenMoko 本身是一家做「產品」的公司；Google 的 Android 是提供「平臺」的方案。二、OpenMoko 想要做的是 100% 開放源碼的手機平臺，並透過開放平臺建立可獲利的商業模式；但 OHA 旨在發掘商業機會，並不是專注在製作一個 100% 開放源碼的手機軟體平臺。總合來說，Sean 提到「OpenMoko 與 Android 是二個商業模式、二個不相干的東西」。 此外，專訪過程也問到一個根本的問題「OpenMoko 與 Android 軟體的比較與差異」，這是一個技術面的問題，早在一月二十二日，由 Wolfgang Spraul（OpenMoko 工程部門副總）對內部所發出的一封 email 提到「So...</description>
         <link>http://www.jollen.org/blog/2008/02/openmoko_perspective_to_android.html</link>
         <guid>http://www.jollen.org/blog/2008/02/openmoko_perspective_to_android.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 14 Feb 2008 17:09:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>MontaVista Mobilinux 5.0 入圍 EDN 年度創新獎</title>
         <description>MontaVista 的 Mobilinux 5.0 入圍 [EDN（Electronics Design, Strategy, News）] 舉辦的 [第 18 屆創新獎（Innovation Award）]。第 18 屆 EDN 創新獎共分為 20 個類別，Mobilinux 入圍的是軟體類，除了 Mobilinux 外，另外三個軟體類的入圍名單如下： * Graphics library (Microchip Technology) * LabView 8.5 (National Instruments) * Robotics Studio (Microsoft) MontaVista 指出，目前有 90%...</description>
         <link>http://www.jollen.org/blog/2008/02/montavista_edn_innovation_award.html</link>
         <guid>http://www.jollen.org/blog/2008/02/montavista_edn_innovation_award.html</guid>
         <category>其它</category>
         <pubDate>Thu, 07 Feb 2008 13:47:58 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Nokia 收購 Trolltech</title>
         <description>今天來自 linuxdevices.com 上的一則消息 [Nokia to acquire Trolltech for $150 million] 表示，Nokia 將以 1.5 億美金的代價收購 [Trolltech] 公司。Trolltech 是一家知名的跨平臺 GUI 軟體製造商，同時也在 Linux 手機領域中享有盛名。 Symbian 是一家獨立的手機軟體公司，Nokia 擁有將近五成（47.9%）的持股，Nokia 過去大多以 [symbian] 作業系統來製造手機，近年來也有少量使用 Linux 的產品問世。Trolltech 的 Qtopia 產品是專門針對行動與嵌入式裝置所開發的 application platform 與 UI，Qtopia 能夠支援 Linux 與 Windows...</description>
         <link>http://www.jollen.org/blog/2008/01/nokia_acquire_trolltech.html</link>
         <guid>http://www.jollen.org/blog/2008/01/nokia_acquire_trolltech.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Tue, 29 Jan 2008 20:16:57 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>libusb 簡介與第一個範例</title>
         <description>[libusb] 是一個 user-space 的 USB 程式庫，在 embedded linux 應用實作上，我們會使用 libusb 實作一個 host 端的應用程式，並透過 USB 介面存取或控制 target device。 找到所有 USB bus 與 USB device 要撰寫一支 user-space 的 USB device 控制程式，最首要的工作就是找到自己的 USB 裝置。這個工作主要透過以下 4 個函數來進行： usb_init: 初始化 libusb usb_find_busses: 尋找系統裡的所有 USB bus...</description>
         <link>http://www.jollen.org/blog/2008/01/libusb_hello_world.html</link>
         <guid>http://www.jollen.org/blog/2008/01/libusb_hello_world.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Fri, 25 Jan 2008 15:49:43 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 近況更新：Neo FreeRunner、Job Positions 與 Education</title>
         <description>自從先前分享了 OpenMoko 的 OpenLab 活動後，己經很久沒有再跟大家更新相關消息了。在這裡一次將 OpenMoko 的近況做更新。 Neo FreeRunner OpenMoko 在今年的 [CES 2008]（美國消費性電子大展）上，正式揭露新一代產品 Neo FreeRunner。新的 Neo FreeRunner 的對象是終端消費者，並且在硬體端加入了 WiFi、motion sensor 以及 3D 處理器。Neo FreeRunner 的軟體也是基於 OpenMoko，不過以現在的軟體狀況來看，要面對真正的消費者，還需要一些時間。 OpenMoko Open Job Positions 在臺灣的朋友有福了，OpenMoko 正式提供工作機會，詳情可參考 [OpenMoko Visits and Hiring Day]。這是 OpenMoko 首次提供公開的工作機會，過去 OpenMoko...</description>
         <link>http://www.jollen.org/blog/2008/01/openmoko_fresh_news_2008.html</link>
         <guid>http://www.jollen.org/blog/2008/01/openmoko_fresh_news_2008.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 21 Jan 2008 11:48:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 Semaphore 觀念小談</title>
         <description>這二天在進行 Linux 驅動程式的訓練，課程裡談論到 semaphore 可以用來宣告 critical section。在作業系統所述敘的 critical section 觀念中提及，critical section 具備互斥性（mutual exclusive）與單一性（atomic）。對單一性來講，我們必須確保在 critical section 裡不會發生任何的排程（scheduling）動作，wait queue 的使用就是一個例子。Linux kernel 提供的 wait queue 可以讓驅動程式在進行 I/O polling 時，以睡覺（sleep）方式進行，以讓出系統時間；若以 busy-loop 方式進行，是不正確的做法。 所以，sleep 的動作就不能寫在 critical section 裡面，必須先做一個釋放的動作，再呼叫 wait queue 的 API 做睡覺的動作，醒來後再進入 critical section。但是，事情並沒有這麼單純，若是驅動程式的架構設計，能支援多個...</description>
         <link>http://www.jollen.org/blog/2008/01/linux_device_driver_semaphore_discussion.html</link>
         <guid>http://www.jollen.org/blog/2008/01/linux_device_driver_semaphore_discussion.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 20 Jan 2008 10:53:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>下週二的嵌入式系統大拜拜：DTF 2008 Embedded World</title>
         <description>下週二即將舉行的 DTF 2008 Embedded World 是嵌入式系統年度的大拜拜，當天的議程相當精采，還沒報名的朋友要趕快把握機會喔！全程都是免費參加，有興趣的朋友可參考 [詳細的活動說明]。 當天的議程之一是「嵌入式系統發展機會－我們能做什麼?」，這是由教育部嵌入式軟體聯盟召集人金仲達教授所帶來的演說。[嵌入式軟體聯盟] 多年來致力於規劃嵌入式系統課程，在校園培育許多嵌入式軟體的人才。金教授的演說我想會由教育層面切入，這是一個了解目前嵌入式系統在校園紮根狀況的很好機會。 x86 架構近來在嵌入式系統應用佔用非常重要的角色，Track I 的議題針對 x86 嵌入式解決方案做介紹，也是很不錯的議題規劃。Graphics solution 一直是嵌入式系統應用的關鍵技術，許多應用都需要 graphics 的解決方案。 Track II 的議題偏向 SOC 的設計，我自己對「Natural Evolution in the embedded world」這個議程相當感興趣，這是由 ARM 公司行銷部門的經理 Tom Wang 所帶來的演說，ARM 一直是嵌入式 SOC 的領導者，這場演說必定可以吸收到許多新觀念。 Track III 的議題則是著重在嵌入式應用與服務，觸控面板在嵌入式的應用佔用重要地位，圖形化設計也是我自己很感興趣的主題。...</description>
         <link>http://www.jollen.org/blog/2008/01/go_to_dtf_2008.html</link>
         <guid>http://www.jollen.org/blog/2008/01/go_to_dtf_2008.html</guid>
         <category>其它</category>
         <pubDate>Thu, 17 Jan 2008 13:29:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>First Android Phone？</title>
         <description>來自台灣的 [啟碁科技（WNC）] 在 CES 上展示一支 GSM/VoWiFi 的雙模手機，並且是採用 Linux 作業系統核心，同時，也有小道消息指出，Google Android 平臺也會移植到該手機，並且可能的時間是在今年三月，若消息屬於，WNC 將會是第一個發佈 Android 相容手機的廠商。新聞全文 [First Android phone?]。 同一時間，另一個也是開放手機平臺的 OpenMoko 也公佈 Dash Express 的消息，以及 Neo FreeRunner（GTA02）的產品規格。單純以「開放手機系統」來講的話，雖然這二個被廣為注目的開放手機產品有機會同時現身，但嚴格來講，Google Android 平臺似乎己經佔了上風，因為目前尚沒有其他廠商能夠利用 OpenMoko 平臺來生產 end-user 手機，但 Android 己經快做到了。 延伸閱讀 2007.11.09: Android 與 Gphone 觀察 2007.12.02:...</description>
         <link>http://www.jollen.org/blog/2008/01/first_android_phone.html</link>
         <guid>http://www.jollen.org/blog/2008/01/first_android_phone.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Wed, 09 Jan 2008 12:14:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>1/8 tossug 分享活動：用中文寫 Python / 周蠎</title>
         <description>今天 [tossug] 的分享主題是 [使用 Python 與周蟒]，周蠎（zhpy）是一個可以執行中文 Python 程式的軟體，周蠎讓我們可以用中文來寫 Python 程式，真是一個有趣的主題。zhpy 的下載位址是： http://code.google.com/p/zhpy/ 現場 gasolin 展示了一個用 Python 設計的文字遊戲編輯引擎，叫做 [Ren&apos;Py]，這是一個可以製作類似角色扮演遊戲的編輯器。 最後 gasolin 也提到，Python 是去年（2007）成長速度最快的程式語言，也是目前相當受到重視的程式語言。網路上常見的「懶人包」就是利用 Python 撰寫的工具製作的，最近 Google 也在招募 Python 高手，顯見 Python 真的是一個重要的程式語言。...</description>
         <link>http://www.jollen.org/blog/2008/01/zhpy_python.html</link>
         <guid>http://www.jollen.org/blog/2008/01/zhpy_python.html</guid>
         <category>其它</category>
         <pubDate>Tue, 08 Jan 2008 21:13:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>2008 開工了！</title>
         <description>新的 2008 年，「Jollen&apos;s Blog」會把重點放在「Linux kernel」與「Linux device driver」，並且也會將一些時間放在 Embedded Linux 教育訓練的課程規劃上；期待您的意見與指教。 延伸閱讀 2007.01.01: 2007 開工了！...</description>
         <link>http://www.jollen.org/blog/2008/01/2008_101_fireworks.html</link>
         <guid>http://www.jollen.org/blog/2008/01/2008_101_fireworks.html</guid>
         <category>其它</category>
         <pubDate>Tue, 01 Jan 2008 03:51:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>qemu + Linux kernel 模擬與除錯環境實習</title>
         <description>Qemu 是一個功能強大的「processor emulator」，qemu system emulator 還能模擬開發板的週邊。此外，qemu 還包含一個 gdb server 的實作，配合 gdb client 能組合出一個很棒的 kernel &amp; device driver「source-level debug」環境。 Jollen-Kit! Pro. 是由 jollen.org 所推出的 ARM9 開發板，主要用途是拿來做 Embedded Linux 的教育訓練。在前一陣子的 Linux Device Driver 訓練課程中，特別規劃了一個時段的「qemu + Linux kernel 模擬與除錯環境實習」的操作課程，此課程所採用的 qemu 能模擬我們的 Jollen-Kit! Pro....</description>
         <link>http://www.jollen.org/blog/2007/12/qemu_linux_kernel_debug.html</link>
         <guid>http://www.jollen.org/blog/2007/12/qemu_linux_kernel_debug.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 31 Dec 2007 15:41:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>新的 Linux Wireless Stack 現身</title>
         <description>Linux 2.6.22 有一個重要的更新，就是改進了過去對於 wireless 支持的不足。一家叫做 [Devicespace] 的公司，為 open source 做了一項重要的貢獻，他們將一份新的 wireless stack 實作提交給 kernel，並正式收錄於 Linux 2.6.22。詳情可參考 kernelnewbies.org 上的說明 [New Wireless stack]。 Linux 在 wireless stack 上的功能並不是很充份，在 Devicespace 貢獻 kernel 更好的全新 wireless stack 實作後，對 Linux 在無線網路上的支援與應用，將是一個重要的進展。由 Devicespace 所提交的新一代 wireless stack 包含的實作有（引述...</description>
         <link>http://www.jollen.org/blog/2007/12/new_linux_wireless_stack.html</link>
         <guid>http://www.jollen.org/blog/2007/12/new_linux_wireless_stack.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 29 Dec 2007 23:14:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.22 新增 display class</title>
         <description>Linux 2.6.22 於 2007 年 7 月 8 日正式釋出，這個版本的 kernel 有一個令我感興趣的新功能。Linux 2.6.22 新增一個 class driver，稱為「display class」。顧名思義，這個新的 class driver 是用來管理與 &quot;display&quot; 有關 device driver。以下引用自 [include/linux/display.h]： 28 struct display_device; 29 30 /* This structure defines all the properties of a Display. */...</description>
         <link>http://www.jollen.org/blog/2007/12/linux_display_class.html</link>
         <guid>http://www.jollen.org/blog/2007/12/linux_display_class.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 29 Dec 2007 20:22:07 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>簡報下載：Linux 驅動程式的 read/write 觀念解析</title>
         <description>12/19（三） 下午於 [OpenMoko] 的 [OpenLab] 發表了一場演說，時間是一個小時。這是一場有關 Linux 驅動程式的演講訓練活動，本次演講主要在解析 Linux 驅動程式的 read/write 程式碼框架（framework）與觀念解析。大綱如下： * read/write system call * vfs switch * user-space vs. kernel-space: I/O data * short discussion on wait queue: blocking I/O * cdata example 時間只有一個小時，因此在規劃簡報時，決定採取範例導向的方式做介紹。當天以一個 cdata 的範例做主軸，直接透過程式碼來做講解。在此提供簡報電子檔供參考 [linux-device-drivers-read-write]。...</description>
         <link>http://www.jollen.org/blog/2007/12/linux_device_driver_read_write.html</link>
         <guid>http://www.jollen.org/blog/2007/12/linux_device_driver_read_write.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 21 Dec 2007 16:15:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Google Android 採用 Apache License: 為什麼不是 GPL？</title>
         <description>Google 讓基於 Android 技術平臺的「應用程式」採用 [Apache License, Version 2] 的授權條款。許多 Free &amp; Open Source Software（FOSS）採取 GPL 的授權條款，目前 OpenMoko 的架構，也都是選用基於 GPL 授權條款的 FOSS。 Android 與 OpenMoko 一個是開放手機平臺，另一個則是開放源碼手機平臺；前幾日對二個平臺做了差異比較，並且製作了一份 [OpenMoko vs. Android 主要差異比較表]，可透過此表約略了解二個手機平臺之間的不同。 為什麼 Android 的應用程式要採取 Apache License 的授權方式？由 [Apache Software Foundation] 所發展的軟體，也都改採 Apache...</description>
         <link>http://www.jollen.org/blog/2007/12/android_apache_license_not_gpl.html</link>
         <guid>http://www.jollen.org/blog/2007/12/android_apache_license_not_gpl.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Sun, 02 Dec 2007 19:43:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>register_netdev 的入門實例: bonding.c</title>
         <description>今天在「Linux 驅動程式: 進階」的訓練課程中提到，找到正碓的入門實例，比起什麼都來得重要。 有時，老舊的程式碼，更容易幫助初學者掌握基本的架構與 API 用法。在 Linux 驅動程式的課程裡，我推薦同學研究一個早期的網路介面驅動程式，叫做 bonding.c。bonding 是一個用來合併網路卡的驅動程式，而早期的 bonding 驅動程式並沒有太多額外的 algorithm 實作，因此我建議同學，拿出 kernel 2.4.14 裡的 bonding.c 來做實例研究。由於這個版本的 bonding 驅動程式非常赤祼祼地呈現 register_netdev、struct net_device 與封包傳送的介面實作，因此肯定比許多最新的網路卡驅動程式更適合初學者。 kernel 2.4.14 的 bonding.c 可以在 2.6.x 的 kernel 上使用，美中不足的是，使用古老的 bonding driver 無法將 eth 介面合併進來，但至少可以配合 ifconfig 指令來做動態的操作與觀察，例如了解...</description>
         <link>http://www.jollen.org/blog/2007/12/register_netdev_study.html</link>
         <guid>http://www.jollen.org/blog/2007/12/register_netdev_study.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 02 Dec 2007 14:30:59 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ＯpenMoko OpenLab 的第二次官方活動將於12/19（三）舉行</title>
         <description>OpenMoko 贊助成立的 OpenLab 將會在 12/19 舉辦第二次的訓練活動，以下引用自 [OpenLab] 的 [公關稿]： 為了與台灣的 open source 社群互動並回饋社群，OpenMoko 特別贊助成立了 OpenLab。OpenMoko 會不定時舉辦官方的 OpenLab 活動，第二次 OpenLab 活動將於 12/19 (三) 舉辦，本次活動除了延續上次的 Linux 驅動程式訓練外，更特別邀請了中研院自由軟體鑄造場法律組的林誠夏先生來為大家介紹 GPL 的法律觀念。 另外，這次的活動也特別針對 Apache 授權的觀念進行隨興討論，現場由主持人針對 Apache 授權做介紹，並與現場朋友做討論與收集意見回饋。Google 的 Android 手機平臺採用的是 Apache 授權，與 OpenMoko 的 GPL/LGPL...</description>
         <link>http://www.jollen.org/blog/2007/11/openlab_2nd_event.html</link>
         <guid>http://www.jollen.org/blog/2007/11/openlab_2nd_event.html</guid>
         <category>Openmoko</category>
         <pubDate>Fri, 30 Nov 2007 15:43:05 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko vs. Android 主要差異比較表</title>
         <description>今天製作了一份 OpenMoko 與 Android 的主要差異比較表，提供給大家做參考。 下載大圖 [http://people.openmoko.org/jollen/slides/openmoko_android_cmp.jpg]。...</description>
         <link>http://www.jollen.org/blog/2007/11/openmoko_vs_android.html</link>
         <guid>http://www.jollen.org/blog/2007/11/openmoko_vs_android.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 28 Nov 2007 19:20:40 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenLab 場地實景</title>
         <description>[OpenMoko] 的 [OpenLab] 位於 OpenMoko 總部旁 ，進門後，映入眼廉的是一對橘色的鋼柱，這個顏色正是 OpenMoko CIS 的顏色。這對鋼柱，是大樓避震結構的設計之一（避震器），原本藏在一片門板後門，幾個月前 OpenMoko 在裝修新辦公室時，才把這片門板拆除。 從你所看到的這道門進門去，便是 OpenLab，從 OpenLab 角落往外看去，右邊是電腦區，左邊您所看到的投影畫面則是 OpenMoko 的 IRC channel。坐在 OpenLab 裡看社群朋友在聊天，還蠻有趣的！ 一進到 OpenLab，就可以看到一整面綠色的牆，這邊是 OpenLab 的沙發區。 目前 OpenLab 提供 3 台電腦，裡頭目前存放一些講義電子檔。現在大家似乎都還蠻喜歡在 OpenLab 的沙發區聊天開會呢！ OpenLab 的隔壁，就是 training center，目前由 [Jollen&apos;s Consulting] 團隊負責提供訓練課程。...</description>
         <link>http://www.jollen.org/blog/2007/11/openlab_photos.html</link>
         <guid>http://www.jollen.org/blog/2007/11/openlab_photos.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 22 Nov 2007 11:42:27 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 專案介紹與 OpenLab</title>
         <description>在 11/17 (Sat.) 的 OpenLab 開幕活動中，我們為大家準備了一份正式的「OpenMoko 公司與 OpenMoko 專案介紹」文件，將過去到現在的 OpenMoko 專案做一個主要的重點瀏覽。OpenMoko 也於十月二十三日正式獨立為 OpenMoko, Inc.（我本墨客股份有限公司）。在此提供此專欄的電子檔供各位朋友下載 [openmoko_openlab_intro_v1.pdf]。 延伸閱讀： * 2007.10.02: 「Introduction to OpenMoko Project」簡報 * 2007.11.21: OpenMoko OpenLab 開幕活動紀錄（上）...</description>
         <link>http://www.jollen.org/blog/2007/11/openmoko_openlab_intro_v1.html</link>
         <guid>http://www.jollen.org/blog/2007/11/openmoko_openlab_intro_v1.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 21 Nov 2007 19:38:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko OpenLab 開幕活動紀錄（上）</title>
         <description>上週六在大眾總部大樓舉辦 OpenMoko 的 OpenLab 開幕活動，活動的形式是以 OpenLab free training 配合 OpenLab 隨性討論的方式進行。當天來了 35 位朋友，我們的大家長簡明仁董事長以及 OpenMoko 的 leader Sean Moss-Pultz 也都有到現場。 第一場 OpenLab training 是由 OpenMoko coreteam 的 [jserv] 為大家分享 [LINUX 驅動程式架構入門]，jserv 兄在百忙之中還能接受 OpenLab 的邀請，實在是大家的福氣啊！第二場 training 則是由 Dennis 兄為大家介紹最基本的 qemu-neo1973 安裝與 OpenMoko...</description>
         <link>http://www.jollen.org/blog/2007/11/openmoko_openlab_opening.html</link>
         <guid>http://www.jollen.org/blog/2007/11/openmoko_openlab_opening.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 21 Nov 2007 01:29:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Android 與 Gphone 觀察</title>
         <description>自從本週一 Gphone 的消息正式公開後，Gphone 的新聞幾乎攻佔各大媒體的科技版版面，這個星期，被 Google 收購並被 Gphone 採用的開放源碼 Linux 手機平臺 [Android] 也受到大量關注。 Android 是 Gphone 所使用的軟體平臺，根據 [Open Handset Alliance]（OHA）的報導，Android 提供 mobile device 完整的軟體環境，包含：作業系統（Linux）、中介軟體（middleware）與主要的 mobile applications。週一的一場公開視訊會議宣佈了 Gphone 的正式消息，Engadget 提供了這場視訊會議的紀錄稿： http://www.engadget.com/2007/11/05/live-coverage-of-googles-android-gphone-mobile-os-announcement/ 以下節錄幾個重要的談話內容： 1. On Google&apos;s side we have a two part strategy......</description>
         <link>http://www.jollen.org/blog/2007/11/android_gphone.html</link>
         <guid>http://www.jollen.org/blog/2007/11/android_gphone.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Fri, 09 Nov 2007 15:35:44 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ABC News 報導 OpenMoko</title>
         <description>大家都知道，OpenMoko 是一個完全 open source 的專案，在 9/23 日的 ABC News 裡，也特別報導了 OpenMoko 專案，並強調 OpenMoko 的開放特性。報導全文與影片，可由以下網址瀏覽： http://abclocal.go.com/kgo/story?section=drive_to_discover&amp;id=5671823&amp;ft=exLg 我的同事 Chelsea 特別製作了逐字稿，在此特別感謝，並將全文與大家分享。 You&apos;ve seen the iphone by now, but maybe you have a better idea. Members of Home Brew mobile phone club from Menlo...</description>
         <link>http://www.jollen.org/blog/2007/11/abc_news_openmoko.html</link>
         <guid>http://www.jollen.org/blog/2007/11/abc_news_openmoko.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 08 Nov 2007 22:38:44 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>COSCUP 2007 演講簡報下載　</title>
         <description>上週日參加 [COSCUP 2007]（開源人年會），與現場朋友分享了「OpenMoko 好好玩！」的議題。OpenMoko 是一個 100% 開放源碼的 Linux 手機軟體平臺，這場分享演講主要是以推廣者（promoter）的角度來切入，介紹了 OpenMoko 的技術與非技術主題。在此提供簡報電子檔 [COSCUP_2007_OpenMoko_Funny.pdf] 供下載。 另外，演講過程中，撥放了 OpenMoko 社群為 OpenMoko 所製作的創意小廣告，這些廣告可在 YouTube 網站上，以「openmoko」關鍵字做搜尋即可取得。此外，會上提到的「OpenLab 開幕活動」，亦可在 OpenMoko Community Wiki 上取得相關資訊以及報名方式，網址為 [http://wiki.openmoko.org/wiki/OpenMoko_OpenLab_Opening/zh_tw]。...</description>
         <link>http://www.jollen.org/blog/2007/11/coscup_2007_openmoko.html</link>
         <guid>http://www.jollen.org/blog/2007/11/coscup_2007_openmoko.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 07 Nov 2007 22:48:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Introduction to OpenMoko Project」簡報</title>
         <description>昨天到某公司給了一份「Introduction to OpenMoko Project」的簡報，內容主要是針對 OpenMoko 的「技術面」有哪些「組成（components）」做一些簡單的摘要報告，目的是幫助第一次看到 OpenMoko project 的工程師，能在 5 分鐘之內掌握一些重點。簡報電子檔 [OpenMoko_Project_Intro_v0.2.pdf]。 OpenMoko Framework OpenMoko 專案最主要是提供了一個「UI Framework」，稱為 [OpenMoko framework]，現階段的 OpenMoko framework 提供以下四個程式庫： * libmokocore：核心程序庫，提供 OpenMoko 應用程序間的通訊。 * libmokonet：通訊程序庫，提供 GSM、GPS、Bluetooth 等功能。 * libmokopim：PIM（Personal Information Management）程序庫，提供個人資料管理功能。 * libmokoui：UI（user interface）程序庫，提供 OpenMoko 主要的界面設計，包含：containers、widgets 與...</description>
         <link>http://www.jollen.org/blog/2007/10/introduction_openmoko_project.html</link>
         <guid>http://www.jollen.org/blog/2007/10/introduction_openmoko_project.html</guid>
         <category>Openmoko</category>
         <pubDate>Tue, 02 Oct 2007 18:56:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Software Freedom Day 2007 北京：OpenMoko Booth</title>
         <description>OpenMoko 的 booth 並沒有別人家的精彩，可不是我們不用心，因為漂洋過海來到北京，行季箱能裝能塞的東西，也就這麼多了！好吧，還有一個小原因是因為這次準備活動也略顯匆忙，不過，該有的東西可是一樣都沒有少呢。 身為「銀牌贊助」商（沒看到嗎？沒關係我來放大一點。），OpenMoko 當然不能讓大家失望，除了提供 lucky draw 的大獎外，現場可是也準備了一份「Community Press CD」送給大家呢，裡頭有一些 OpenMoko 的「寫真影片」、OpenMoko 簡報 PDF 檔還有當天的 DM 電子檔。 我覺得 OpenMoko 的 poster 還挺酷的，所以也放了一份 PDF 檔到 Community Press CD 裡送給大家。 某個程度上來說，OpenMoko 的 booth 並不算華麗，但是重頭戲「實機展示」可是不能少的。我們擺了 3 台 Neo1973 在現場，Neo 們可是忙碌得很呢，因為大家從未停止把玩他們！ 《待續》...</description>
         <link>http://www.jollen.org/blog/2007/09/sfd_2007_openmoko_booth.html</link>
         <guid>http://www.jollen.org/blog/2007/09/sfd_2007_openmoko_booth.html</guid>
         <category>Openmoko</category>
         <pubDate>Sun, 23 Sep 2007 17:38:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Software Freedom Day 2007 北京：Booth 剪影</title>
         <description>主辦單位這次準備了 400 多個印有《北京軟件自由日2007》的小提袋在現場發放，但是因為與會人數遠超過預期，所以有許多朋友沒機會能拿到這個具有紀念意義的小提袋。當然囉，我也沒能這麼幸運能拿到這個小提袋。啊！好想要一個帶回來收藏啊，原本到會場時，看到地上整排的小提袋，還以為能有機會拿到一個的。 現場有實體展示活動的廠商有 15 家，趁著人潮尚未湧入，拍了幾個「招牌」起來，大家應該都可以看得出來這是哪一家公司。 另外，主辦單位的用心，從小細節就能看得出來。不但為我們準備了很棒的展示桌，連「桌布」也都很有特色，上面印了企鵝的 logo 以及「我們用開源軟件，你呢？」的標語。我覺得這句標語真在是酷弊了，所以也拍了照。 《待續》...</description>
         <link>http://www.jollen.org/blog/2007/09/software_freedom_day_2007_booth_photo.html</link>
         <guid>http://www.jollen.org/blog/2007/09/software_freedom_day_2007_booth_photo.html</guid>
         <category>Openmoko</category>
         <pubDate>Sun, 23 Sep 2007 16:58:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Software Freedom Day 2007 北京：會後報告</title>
         <description>活動概況 這次到北京參與「軟件自由日」活動，相當另人印象深刻。根據「官方」的非正式統計，當天與會者大約有 700 人左右，同時有 15 個參展廠商，以及 10 名的演講者，真是一個熱鬧非凡活動，也是一個很成功的開源活動。 這次的北京軟件自由日是由 Beijing Linux User Group 所策劃主辦，由於這是一個「自由參加」的活動，並不需要事先報名，因此事前並不知道確實的與會人數，主辦單位只能根據以往的經驗來推估可能的人數。我們由主辦單位得到的可能人數是 300~500 位左右。 當天我跟另外一位同事 Chelsea 大約 11 點左右到達會場，活動是在下午 1 點才開始。OpenMoko 是這次的活動贊助商，所以主辦單位提供了一個 booth 讓我們使用，當然，現場一定要實際展示一下 Neo1973 實機！活動的 booth 區是設置在清華大學的 FIT（信息大樓）大樓的 1F，這是一個不錯的空間，相當寬敞而且明亮，演講的會議廳則是在 2F；演講廳的座位雖然不少，但是明顯的前來聽講的朋友多更多，沒有座位坐的朋友，就索性直接坐在走道上，因此整個演講廳都是滿滿的人。 OpenMoko 的場次是在 3:50PM，因為要照顧攤位，所以前面幾場演講都沒有聽到。我們在 2:30PM 左右才進到會議廳，離活動正式開始還不到二個小時，我們準備的 100 份「Community...</description>
         <link>http://www.jollen.org/blog/2007/09/software_freedom_day_report_1.html</link>
         <guid>http://www.jollen.org/blog/2007/09/software_freedom_day_report_1.html</guid>
         <category>Openmoko</category>
         <pubDate>Fri, 21 Sep 2007 23:20:47 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Software Freedom Day, Beijing：OpenMoko 演講簡報下載</title>
         <description>這是 [Software Freedom Day] 第二次於中國舉辦，第二屆的軟體自由日由 Beijing Linux User Group 所籌辦，OpenMoko 本次有幸受邀與會，並發表 20 分鐘的演說。這次活動是在北京清華大學的 FIT 大樓舉辦，因為 OpenMoko 是 sponsor 之一，所以也分配到一個 booth，現場 OpenMoko 展示了 Neo1973 實機，大家都很支持「開源手機」這個想法，現場得到的反應也都很好。 這次活動 OpenMoko 所準備的題目是「由 OpenMoko 社區看開源文化」，演講內容分為二個階段： 1. 前 10 分鐘為大家介紹 OpenMoko 專案、Free Your Phone 理念以及 Neo1973。 2....</description>
         <link>http://www.jollen.org/blog/2007/09/software_freedom_day_2007_openmoko.html</link>
         <guid>http://www.jollen.org/blog/2007/09/software_freedom_day_2007_openmoko.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 17 Sep 2007 17:43:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>CIC 演講「Embedded Linux 開發環境」簡報下載</title>
         <description>上週五受邀至 CIC（晶片系統設計中心）與大家分享「Embedded Linux 開發環境」的題目。本次講題主要分為二個階段，第一階段介紹主要的開發工具，例如：gcc、gdb 等，除了整理必要的幾個工具外，也針對部份工具介紹了重要的使用觀念，以及分享過去的實作經驗。 第二階段則是列出幾個目前主要的 Embedded Linux 發展環境，以及常用的系統分析工具。本次講題針對的對象是 Linux 開發工具初學者，在此提供簡報電子檔 [Embedded_Linux_Toolchains_Intro_v0.1.pdf] 供 CIC 以及有興趣的朋友參考。...</description>
         <link>http://www.jollen.org/blog/2007/09/cic_embedded_linux_tools_presentation.html</link>
         <guid>http://www.jollen.org/blog/2007/09/cic_embedded_linux_tools_presentation.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 17 Sep 2007 12:26:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>LinuxWorld China 2007 會後感想</title>
         <description>[LinuxWorld China 2007] 第一天主要是關於 FOSS 以及 community 的講題，主辦單位所邀請的佳賓都是中國地區領導級的開放源碼軟體公司，例如：Novell、IBM、Microsoft、中科紅旗、紅旗中文2000、MySQL AB等等。在上午的 keynote 演說中，多位講者都是以「開源社區」以及「社群參與」的角度切入，分析開放源碼與商業行為之間的關係，其中令人印象最深刻的講場是「中科紅旗軟件」以及「紅旗中文2000」的演說。為什麼對這二場演講的內容印象最深刻呢？原因有二： 1. 「北京中科紅旗」以及「北京紅旗中文貳仟」都是中國本土的開放源碼軟體公司。 2. 北京開放源碼公司的活動非常熱絡。 二天的活動整個下來，得到許多了寶貴的訊息。就我個人來說，對 FOSS 有了更「整體」性的結論，就以台灣和中國地區的開放源碼軟體運動的現況來說，整體而言，可以給出以下幾個看法，供大家參考： 1. 北京當地的「開源軟件」公司數量遠多於台灣。如果要以嚴格的標準來審核的話，台灣的開放源碼軟體公司數量可能比想像中更少。 2. 關於開放源碼的產業推動，台灣的經濟部也有相關的組織在運作，不過目前尚未看到比較好的成效。在中國地區，一些指標性的開放源碼大公司（例如北京中科紅旗）都能協助推動開放源碼的運動。從比較實際的角度來看，台灣在推動開放源碼方面，組織的建構完成了，例如：委員會的成立、教育聯盟的成立等，但缺乏指標性的推動活動。另外，「open source」最重要的是他的「文化」教育，而不是「使用 open source software」的教育。 另外，當天也聽到 Microsoft（yes）所發表的 open source 簡報，在「Open Source at Microsoft」網站可找到許多資訊。開放源碼運動推行至今，已經不再只是單純的「公開原始碼」的活動了，而是逐漸轉變成軟體或服務公司的重要 business model。...</description>
         <link>http://www.jollen.org/blog/2007/09/linuxworld_china_2007.html</link>
         <guid>http://www.jollen.org/blog/2007/09/linuxworld_china_2007.html</guid>
         <category>其它</category>
         <pubDate>Fri, 07 Sep 2007 22:53:56 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 第一次在北京：會後感想</title>
         <description>先前的日記提到 [OpenMoko 於北京的首次公開演講] 的活動，這是 OpenMoko 第一次在大陸地區有公開的演講。回台灣後，一直想要紀錄分享這次的活動感想，不過由於這陣子太忙碌了，一直到今天才能有空與大家分享這次的活動感想。 當天 Beijing Linux User Group 與會的朋友，出忽我意料之外的，有超過一半都是外國朋友，北京當地的社群朋友比率反而比較低。Beijing LUG 的朋友，給我的印像是很親切熱情的，對於開放源碼的社群參與都展現十足的活力。例如，大家都很熱心發表對 OpenMoko 專案的看法與意見，並且也都希望能參與 OpenMoko 專案，或是給予一些幫助。 Sean 給了一份大約 40 分鐘的 &apos;Introduction to OpenMoko&apos; 簡報。簡報大約是在晚上的 7 點 30 分開始，所以大約在 8 點 10 分左右就結束演說了。不說您不相信，由於 Beijing LUG 的朋友真的太熱情了，OpenMoko 和會場的朋友一直聊天並交換意見，直到晚上 11 點才「正式」結束這次的活動。當然囉，「非正式」的活動（續攤）仍持續著，至於我們一行人，由於有點累了，只好和大家道別了。...</description>
         <link>http://www.jollen.org/blog/2007/09/openmoko_in_beijing_lug.html</link>
         <guid>http://www.jollen.org/blog/2007/09/openmoko_in_beijing_lug.html</guid>
         <category>Openmoko</category>
         <pubDate>Sat, 01 Sep 2007 14:57:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux frame buffer 驅動程式開發簡報下載</title>
         <description>今天有幸受邀發表了一場演講，和大家分享「Linux frame buffer 驅動程式開發」的議題。時間並不長（１個小時），因此只能針對整體架構與部份重點做介紹。簡報檔案下載 [Linux_FB_Driver_Intro_v0.2.pdf]。 本次演講分為二個階段進行，首先是背景知識的部份，針對 Linux 2.6 的 driver model 做總覽；第二部份則是本次的講題，以 s3c2410fb 的驅動程式為例，介紹了 kernel subsystem 與底層（low-level）驅動程式的整個關係。 同時，也在演說中提到 register 與 callback 的觀念。由於 subsystem 的實作是分層架構，C 的實作採用 in-direct function call，所以不能依照傳統結構化程式的方式，單純以 function call 的流程來 trace 驅動程式。...</description>
         <link>http://www.jollen.org/blog/2007/08/linux_frame_buffer_lecture.html</link>
         <guid>http://www.jollen.org/blog/2007/08/linux_frame_buffer_lecture.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 29 Aug 2007 19:12:06 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 第二代 UI 出爐！</title>
         <description>OpenMoko 的第一代 UI 雖然做得太「PC」，不過這段時間也得到許多社群的回饋、意見、抱怨 ;-) 前幾天，OpenMoko 的第二代 UI 終於出現在 svn.openmoko.org 上了。第二代 UI 的最大變革是將整個操作方式，改以「finger-based」的方式重新實作，感謝 [jserv] 很努力的在幫大家 build 新的 OM，終於在昨天看到這傳說中的新 UI 了！ Will 也在他的 YouTube 頻道放了二個小短片： http://www.youtube.com/watch?v=6s8i5uVU5AQ http://www.youtube.com/watch?v=njfeP0g22JY OpenMoko 2007.2 也把「摜性托放」的功能加入了。...</description>
         <link>http://www.jollen.org/blog/2007/08/openmoko_om2007_2.html</link>
         <guid>http://www.jollen.org/blog/2007/08/openmoko_om2007_2.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 01 Aug 2007 10:14:28 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>何謂 Monolithic Process？</title>
         <description>今天討論到 IPC 的程式設計議題時，順帶提及「monolithic process」的觀念，簡單紀錄如下。 傳統的應用程式架構方式，是把不同的「功能」以結構化程式設計觀念，寫成不同的函數。每當我需要使用某個功能時，便以「函數呼叫」的方使來叫用，當該函數結束工作並返回（return）後，主程式才能繼續「polling」下一個所要執行的功能。 這種架構應用程式的程式寫法，會讓整個應用程式是以「單一執行緒」的方式存在，此種「整合應用程式」的做法，便稱為「monolithic process」。例如，Linux kernel 本身也是屬於這種架構。 但是，在應用程式越來越複雜與多元化的今天，我們無法再使用這種方便來整合「不同的應用程式套件」，因為可能會變動到相當大量的程式碼。因此，便導入「應用程式框架」（application framework）的觀念來解決此一問題。 延伸閱讀： * 開放原碼架構設計：D-BUS 觀念小談...</description>
         <link>http://www.jollen.org/blog/2007/07/about_monolithic_process.html</link>
         <guid>http://www.jollen.org/blog/2007/07/about_monolithic_process.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sun, 29 Jul 2007 13:59:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 於北京的首次公開演講</title>
         <description>OpenMoko 將在八月份的 Beijing Linux User Group 定期聚會後的一週，於北京親自向 Linux 社群的朋友介紹 Neo1973 手機並且現場回答相關問題。這是 OpenMoko 第一次在中國大陸的公開演講，時間是 8 月 21 日的晚上 7 點。 官方網站的公告請參考： http://www.beijinglug.org/en/index.php?option=com_content&amp;task=view&amp;id=141&amp;Itemid=1 這次的活動，將會由 OpenMoko 的 leader &apos;Sean&apos; 親自至現場與社群朋友分享 OpenMoko 的理念並展示 Neo1973 實體手機。...</description>
         <link>http://www.jollen.org/blog/2007/07/openmoko_in_beijinq.html</link>
         <guid>http://www.jollen.org/blog/2007/07/openmoko_in_beijinq.html</guid>
         <category>Openmoko</category>
         <pubDate>Fri, 27 Jul 2007 19:38:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Mobile Linux Initiative：專注 Intel 平臺的 Mobile Linux 開發社群</title>
         <description>一個以 Intel-based 平臺為主的 mobile Linux 開發機構日前公開了。這是一個專注於 Linux kernel、UI framework、browser、multimedia framework 以及 embedded linux image creation tools 為主的開發「社群」。可參閱 LinuxDevices.com 上的報導全文： http://www,.linuxdevices.com/news/NS9302797289.html Mobile Linux initiative 的官方網站： http://www.moblin.org/ Mobile Linux initiative 所提供的社群開發資源包含：documentation、mailing lists、bugzilla 以及 IRC 頻道。 Mobile Linux initiative 的 UI framework 方面採用...</description>
         <link>http://www.jollen.org/blog/2007/07/_intelbased_mobile_linux.html</link>
         <guid>http://www.jollen.org/blog/2007/07/_intelbased_mobile_linux.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 25 Jul 2007 18:52:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>人類使用手機的習慣正在慢慢改變</title>
         <description>繼個人電腦後，下一波將會是行動電話的競爭，但目前的行動電話都是封閉且受限的。當行動電話軟體不再被硬體裝置受限時，硬體裝置的重要性將會消失，因為軟體開發者可以儘情地在同一個裝置上客製化或修改軟體，而不需要購買新的手機硬體。 OpenMoko就是一個這樣的平臺，Neo1973是第一支採用OpenMoko系統的手機。OpenMoko是全世界第一個100%開放的手機系統平臺（platform）。OpenMoko的CEO ‘Sean’於FIC（大眾電腦，臺灣）內部培育這項計畫，並於二零零六年十一月正式對外公開推出。 OpenMoko除了致力於完全免費且開放的手機平臺軟體外，也致力於對外宣導一個新的手機使用概念。Sean於第一場OpenMoko的公開演講中提到此概念，即一個呼應「Mobile 2.0」的理念，這也是近來開始被提出討論與分析的一個新的手機生態觀念。 以最簡單的句子來代表OpenMoko的概念，那就是「Free Your Phone」。 一個 Mobile 2.0 的概念正在形成 Mobile 1.0 的代表性產品「手機」改變了這個世界，並且也改變了人類的生活習慣。Mobile 1.0 強調的是手機的「通訊」（communications）能力，我們需要一個能隨時快速撥號的裝置，並且能與遠在千里之外的朋友即時談話；因此，在這個時代，feature phone 的概念被人類完全接受。 何謂 feature phone？由使用者習慣來說，feature phone 具備簡單的操作界面，並且是功能導向式的操作，沒有太多複雜的選單，同時，手機上也都有實體的撥號按鍵，可以讓我們很容易撥打「電話」。 Mobile 2.0 的改變是什麼？有一些線索，可以說明人類使用「手機」的習慣正在改變；也就是，我們的「手機」使用習慣正慢慢轉變為「Mobile 2.0」。另外一個使用手機的觀念轉變是「為什麼我不能客製化或自由修改我的手機」？ 「為什麼我不能客製化或自由修改我的手機」Free Your Phone 每當我需要一個特定的新功能時（new feature），就必須重買一支新的手機，雖然我們可能已經習慣於這樣的手機使用習慣，但是由技術面的角度來說，這是多麼令人感到不解的事情。假如，能有一個開放的平臺，能讓我們隨心所慾客製化手機軟體，或是能自由地更換佈景主題，這不是一件令人愉快的事情嗎。 這就是未來的手機新生態觀念，即以使用者（end-user）為導向，由使用者客製化與設計的手機新使用習慣。Mobile 1.0是一個以廠商為中心，使用者「被迫」接受由廠商所提出的所有概念與產品的手機生態。 通訊習慣的改變 Mobile 1.0強調的是「打電話」的通訊功能，這也是我們唯一所使用的手機通訊功能，因此，在手機裝置上加上實體按鍵是聰明的做法，因為可以為我們帶來撥號的便利性。 喜愛旅遊的朋友，GPS 功能的PDA或手機可以說是不可或缺的重要裝備；具備GPS功能的手機，已經不再是強調打電話的功能了，而是更便利的GPS導航功能。導航是GPS手機重要的「通訊」功能，所以我們想要的是解析度夠好，且螢幕夠大的手機；我們並不會想要在傳統2.2”吋（或更小）的螢幕上看地圖，所以，何不把實體按鍵移除，並換上更大更好的螢幕呢。...</description>
         <link>http://www.jollen.org/blog/2007/07/mobile_for_end_users.html</link>
         <guid>http://www.jollen.org/blog/2007/07/mobile_for_end_users.html</guid>
         <category>Open Mobile Platform</category>
         <pubDate>Wed, 25 Jul 2007 12:50:05 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 高層專訪</title>
         <description>有別於傳統封閉生態系統的手機產業，OpenMoko完全是以新的觀念在做手機。以下是OpenMoko的高層專訪（譯文）。在 Youtube 網站上找到一則今年一月份的 OpenMoko 專訪影片，受訪對象是 OpenMoko 的 leader &apos;Sean&apos;，影片網址：http://www.youtube.com/watch?v=jRvtAAXTIlg 以下節錄專訪重點，以及中文翻譯。感謝 Chelsea 及 Will 的幫忙 ;-) So, OpenMoko is the first integrated software stack for mobile phones that starts with the kernel and goes all the way to the application and...</description>
         <link>http://www.jollen.org/blog/2007/07/openmoko_sean_interview.html</link>
         <guid>http://www.jollen.org/blog/2007/07/openmoko_sean_interview.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 25 Jul 2007 11:31:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Neo1973 ads from The Community</title>
         <description>這就是社群有趣以及可愛的地方，在 OpenMoko 的 community mailing-list 上出現一則 post，krikstone 替 OpenMoko 做了一些網路廣告，並張貼在 YouTube 上： Good and bad, here are some ads for openmoko and the neo1973 I did. Sorry for the bad quality on some but there aren&apos;t many videos or pictures...</description>
         <link>http://www.jollen.org/blog/2007/07/neo1973_ads_from_the_community.html</link>
         <guid>http://www.jollen.org/blog/2007/07/neo1973_ads_from_the_community.html</guid>
         <category>Openmoko</category>
         <pubDate>Thu, 05 Jul 2007 15:42:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 的 New Oceans</title>
         <description>關心 OpenMoko 計畫的朋友，應該都在上週收到 announce@lists.openmoko.org 的一消息了： [openmoko-announce] New Oceans 信件提到，core team 歷經過幾個月的努力，將於將 OpenMoko 由一個小小的計畫團隊，經營成為一個大的 open mobile platfom（community）；OpenMoko 的 leader Sean 也在 email 裡透露 FIC 對 OpenMoko 成長的幫助，以及長輩的支持。 現在我們再回頭來檢視當初 OpenMoko 第一次現身時，與現在的模樣，你會發現 OpenMoko 確實已經不可同日而語，OpenMoko 之所以能宣佈已經成為一個「open mobile platform」，一定是有其道理的，當然這需要在參與的過程中做觀察，並深入剖析，才能了解一些奧妙；畢竟所有的人、事、物都是會進步的（或退步），所以我們也應該要更正面看待這個 project。 在這段 OpenMoko 的成長過程中，最難能可貴的並不是技術上的突破，或是產品的量產，而是許多來自於「社群」上朋友的鼓勵與幫助，這才是最令人感動的。另外，在這段時間，還有最令人敬配的二位重要幕後推手，就是 FIC 的...</description>
         <link>http://www.jollen.org/blog/2007/07/openmoko_new_oceans.html</link>
         <guid>http://www.jollen.org/blog/2007/07/openmoko_new_oceans.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 02 Jul 2007 12:59:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 的 UI application 分為三大類</title>
         <description>OpenMoko 將手機應用程式以 UI 為導向，並依程式的控制方式，將 application 區分為以下三大類： * finger application * stylus application * panel application Finger application 是以手指觸控為導向的應用程式，比如撥號界面。Stylus application 是以筆尖觸控為主的應用程式，例如最典型的 stylus application 為手寫辨試界面。Panel application 則是「嵌」在狀況欄與程式列的應用程式，例如電池計量圖示。 過往的 X 環境（lagecy X）並不適合 mobile device 直接使用，特別是對 mobile phone 而言。由於 UI &amp; user experiments 是手機的重頭戲與特色賣點（unique...</description>
         <link>http://www.jollen.org/blog/2007/06/openmoko_ui_application.html</link>
         <guid>http://www.jollen.org/blog/2007/06/openmoko_ui_application.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 25 Jun 2007 23:05:27 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>關於 Mobile Device 的美工圖</title>
         <description>在為數眾多的 smart phone 產品中，都採用 QVGA（240x320）規格的 TFT-LCD panel，而這些 panel 都是 6x6x6 的 RGB 格式。因此，許多專為 mobile device 所發展的 rendering/text library 都會建議以此格式（6x6x6 RGB）來進行圖形介面與 art work 的設計。 比較另人好奇的地方是，6x6x6 的 RGB 格式要怎麼與 Linux kernel 的 framebuffer 驅動程式做對應。對 linux framebuffer 驅動程式有經驗的朋友都曉得，Linux framebuffer 驅動程式的 pixel format 為...</description>
         <link>http://www.jollen.org/blog/2007/06/artwork_mobile_device.html</link>
         <guid>http://www.jollen.org/blog/2007/06/artwork_mobile_device.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 19 Jun 2007 23:37:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>KDrive 與 Embedded Linux</title>
         <description>KDrive 也被叫做 TinyX，故名思意，這是一個小型的 X server 實作，主要是針對 embedded Linux 的應用所實作的版本。 有別於 xorg-server 裡的其他 X server，KDrive 並不基於以往的 XFree86 程式碼，而是由 Keith Packard 所實作的新版本；目前，KDrive 已被應用在許多 embedded system 的專案中。例如，OpenMoko 的 framework 就是使用 KDrive。 KDrive 另外一個特色是，他並不是像典型的 X server 是在動態時期去載入一些設定，而是在編譯時間就做好參數的設定。 Xorg-server 從 7.1 開始，已經將 KDrive 整合進來，只要下載 xorg-server...</description>
         <link>http://www.jollen.org/blog/2007/06/kdrive_embedded_linux.html</link>
         <guid>http://www.jollen.org/blog/2007/06/kdrive_embedded_linux.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 08 Jun 2007 12:38:14 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Ubuntu Mobile and Embedded 計畫近況</title>
         <description>前陣子所注意的「Ubuntu Mobile and Embedded」計畫，最近又有了新發展。在前次的日記中提及 Ubuntu Mobile and Embedded 是針對 MID（Mobile Innteret Devices）應用所發起的計畫，並且 Uuntu Mobile and Embedded 也會與 Intel 合作推出 Nokia N800 web tablet 產品線。 今天在 Linuxdevices.com 上再度看到 UME（Ubuntu Mobile and Embedded）的新消息了：「Ubuntu&apos;s mobile and embedded project advances」。關於此 project 的最新情況，引述一段報導原文如下： UME is...</description>
         <link>http://www.jollen.org/blog/2007/06/ubuntu_mobile_embedded_advances.html</link>
         <guid>http://www.jollen.org/blog/2007/06/ubuntu_mobile_embedded_advances.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 08 Jun 2007 10:34:40 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>TurboLinux 的 PMP ？！</title>
         <description><![CDATA[最近大家都在談 UMD（Ultra Mobile Device），今天在閱讀 LinuxDevices.com 新聞時突然瞄到「PMP」這個字，原來是「PMP doubles as personal Linux desktop」。奇怪，PMP 不是已經是過時的 marketing 名詞了嗎？索性點過去看清楚： Asian Linux distributor TurboLinux today announced the &quot;global launch&quot; of its combination PMP (portable media player) and Linux boot device. 這個 TurboLinux 的 PMP（稱為 Wizpy）其實和以往傳統的 PMP...]]></description>
         <link>http://www.jollen.org/blog/2007/06/turbolinux_pmp.html</link>
         <guid>http://www.jollen.org/blog/2007/06/turbolinux_pmp.html</guid>
         <category>其它</category>
         <pubDate>Tue, 05 Jun 2007 23:29:31 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>週三的 stack-based coroutine 範例</title>
         <description><![CDATA[週三至工研院進行教育訓練，其中提到了「Linux pthread」的議題，並透過作業系統的觀念（sys_fork），簡單分析了一下為何 Linux pthread 是「bad」。在講解過程中，展示了一個 video surveillance 的應用程式，說明如何改用 event-driven / event-loop / feedback scheduling 的方式來取代傳統的 multi-threaded 架構。 此外，也提到 co-routine（協同式多工）的概念，建議可先行閱讀 [jserv] 兄的「使用 coroutine 實做 user-level thread」。 只以程式語言的技巧，來實作「多工」是一種很有用的做法，課程中，撰寫了一個「stack-based coroutine」的簡單實例，程式碼如下： #include &lt;stdio.h> #include &lt;pthread.h> int count = 0; int state = 0; #define...]]></description>
         <link>http://www.jollen.org/blog/2007/05/stack_based_coroutine.html</link>
         <guid>http://www.jollen.org/blog/2007/05/stack_based_coroutine.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 30 May 2007 23:37:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> 開放原碼架構設計：Glib 小談 (1)</title>
         <description>前言 就程式碼內部的組織來說，以往我們經常重新定義一些基本的東西，並透過這些 &apos;re-defidition&apos; 的巨集或函數（亦稱為 wrapper function）來撰寫程式。有時，也能透過重新定義的方式，將框架（framework）的實作隱藏起來。這種技巧，大量被應用在許多軟體專案中。 Glib 小談 Glib 是 GTK+ 計畫下的「副產品」，Glib 原本主要是給 GTK+ 與 GNOME 使用，不過，現在也有越來越多的應用程式開始使用 Glib 來開發軟體。Glib 就本質來看，他提供一套重新定義過的 data type、event loop 框架、thread 框架、以及物件（object）系統。 Glib 以一種「宏觀」的方式，提供 C 語言一套高度可攜性、簡單易學且通用的工具庫（toolkit）。由於 Glib 實在太優異了，除了 GTK+ 與 GNOME 本身外，也有非常多的 Free / Open Source Software...</description>
         <link>http://www.jollen.org/blog/2007/05/introduction_glib_1.html</link>
         <guid>http://www.jollen.org/blog/2007/05/introduction_glib_1.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Fri, 25 May 2007 10:31:03 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>開放原碼架構設計：D-BUS 觀念小談</title>
         <description>近期以來，因為工作上的需求，花費許多時間在開放原碼的架構設計上；最近已經將相關的作業都準備的差不多了，我想，可以跟大家分享一些架構設計的小觀念。 首先，先由 [D-BUS] 介紹起。使用 D-Bus 來取代傳統的 IPC，並與外部工具（eg. mjpegtools）做整合。 D-BUS 本身屬於 low-level 的 library（libdbus），實務上，我採用了 glib binding 來實作程式，以簡化工作： http://dbus.freedesktop.org/doc/dbus-glib/index.html D-BUS 是一種 &apos;message bus&apos;，未來將取代傳統 IPC 的使用。傳統 IPC 實作，必須將程式架構成 monolithic process，因此在 process 的行為控制，以及 application 間的整合上，都很一定的難度，非常不易於實作「系統」。 引進 D-BUS 技術後，傳統的 monolithic process 被區分為「pieces of D-BUS services」，每個服務，都可以透過「D-BUS...</description>
         <link>http://www.jollen.org/blog/2007/05/talking_d-bus.html</link>
         <guid>http://www.jollen.org/blog/2007/05/talking_d-bus.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Thu, 24 May 2007 11:04:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>無痛入門：OpenMoko Toolchain</title>
         <description>接續幾天提到的「Embedded Linux 應用的痛處: OpenEmbedded」。對初入門的使用者或是學生來說，比較好的方法就是儘量提供一個使用簡便的開發環境，才能降低 Embedded Linux 開發的「恐懼感」。 針對 OpenMoko 的開發應用來說，目前我初步提供一個簡單的解決方案，大致概念如下： - 希望可以 build applications，而不是 build the &apos;system&apos;。 - OpenMoko framework 本身以原始碼形式提供，因為這是 OpenMoko 的核心，並且我們也會經常修改程式碼。 - OpenMoko 的 architecture 部份，除了 OpenMoko framework 本身外，其它的 library、dependencies library 以及相關的 infrastructure（例如 sysvinit、busybox 等），以 binary 形式提供。 -...</description>
         <link>http://www.jollen.org/blog/2007/05/openmoko_toolchain.html</link>
         <guid>http://www.jollen.org/blog/2007/05/openmoko_toolchain.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sun, 20 May 2007 14:06:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 應用的痛處: OpenEmbedded</title>
         <description>日前與 [jserv] 兄聊天時談論到 OpenMoko 的 build system，我們都一致覺得基於 OpenEmbedded 的 OpenMoko build system 太過於複雜，雖然 OpenEmbedded 目前是一套頗流行的 meta data build system，但是對一些想要了解 OpenMoko 的朋友來說，這反而是一個無形的門檻。 今天在 [OrzLab] 上看到 jserv 將 OpenEmbedded 的 &apos;repository&apos; 轉成 Subversion 系統的做法，全文可參閱 [轉換OpenEmbedded的repository為Subversion系統]。OpenEmbedded 原本採用的是 [monotone] 版本管理系統，現在將 OpenEmbedded 的版本管理系統轉換成 SVN 後，就可以延續以往...</description>
         <link>http://www.jollen.org/blog/2007/05/openembedded_subversion.html</link>
         <guid>http://www.jollen.org/blog/2007/05/openembedded_subversion.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 15 May 2007 00:18:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Device 等於 PC</title>
         <description>就現代的硬體來說，embedded device 和 PC 的界線是越來越小了，雖然有時參與的 project 是 &apos;embedded device&apos;，但是技術本質上就好像在做 PC 一樣。本週二參加 tossug 的心得分享，主辦單位邀請到 OpenMoko 來演講，而在整個活動的過程中，也多少透露了這個重要的技術轉變概念；[魔法設計師] 在他的 blog 也提到這點，全文可參考 [OrzLab] 的轉載。 這幾天持續關注 Ubuntu Mobile and Embedded 專案的新聞，很湊巧，在 OpenMoko 的 mailing list 裡看到一則 Ubuntu 專案成員所回覆的訊息，全文轉貼如下： ============ cut ============ On 5/9/07, Vincent ***...</description>
         <link>http://www.jollen.org/blog/2007/05/embedded_device_is_pc.html</link>
         <guid>http://www.jollen.org/blog/2007/05/embedded_device_is_pc.html</guid>
         <category>其它</category>
         <pubDate>Fri, 11 May 2007 20:33:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>struct map_desc 與抽象化程式碼小談</title>
         <description>前日與客戶進行 Linux device driver 教育訓練時，簡單討論到有關 JK2410 的 IO memory layout 描述方式。在 linux 2.6.20.x 的 BSP 實作中，kernel 提供用來描述 board-level（machine）IO mapping 的資料結構稱為 &apos;struct map_desc&apos;，其定義如下： 1 /* 2 * linux/include/asm-arm/map.h 3 * 4 * Copyright (C) 1999-2000 Russell King 5 * 6 *...</description>
         <link>http://www.jollen.org/blog/2007/05/struct_map_desc.html</link>
         <guid>http://www.jollen.org/blog/2007/05/struct_map_desc.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 11 May 2007 11:29:04 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Ubuntu Mobile and Embedded 後續報導</title>
         <description>繼前一則日記「Ubuntu Mobile and Embedded」紀錄了 Ubuntu 將發展 &quot;Mobile and Embedded&quot; 的 Linux distrio 專案後，後續追蹤 LinuxDevices.com 上的二則新聞如下： - Ubuntu eyes mobile Linux devices 「The Ubuntu Mobile and Embedded Project」將在今年 10 月份與 Ubuntu 7.10 同步推出 Mobile and Emedded 的 Linux distro，但是這個特殊版本並非是要給 Linux mobile...</description>
         <link>http://www.jollen.org/blog/2007/05/ubuntu_mobile_and_embedded_next.html</link>
         <guid>http://www.jollen.org/blog/2007/05/ubuntu_mobile_and_embedded_next.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 11 May 2007 00:18:56 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Ubuntu Mobile and Embedded</title>
         <description>方才在 OpenMoko 的 community mailing-list 上看到一則 post，標題是： Ubuntu Mobile and Embedded 原來，二天前在 ubuntu-devel-announce maling list 上出現了一則 post，全文詳 [Ubuntu Mobile and Embedded Edition]。雖然還沒有正式的消息，不過，「Mobile and Embedded」可望再加入一個強而有力的大型 community 的支援。 Ubuntu 也開始參與 Mobile and Embedded 的 Linux distribution 製作，如果「Ubuntu Mobile and Embedded Edition」的 project...</description>
         <link>http://www.jollen.org/blog/2007/05/ubuntu_mobile_and_embedded.html</link>
         <guid>http://www.jollen.org/blog/2007/05/ubuntu_mobile_and_embedded.html</guid>
         <category>其它</category>
         <pubDate>Tue, 08 May 2007 00:20:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.21 報馬仔</title>
         <description><![CDATA[Linux 2.6.21 於二個星期前（25 April, 2007）正式釋出，詳細更新可參考 [ChangeLog-2.6.21] ；Linux 2.6.15 後，每一次的正式版本都更新了相當多東西。觀察近年來 kernel 及相關應用的發展趨勢，注意到了一些現象，這些「異象」意謂著 Linux kernel 的發展正進入所謂的「壯年期」，同時也說明了 Linux kernel community 及 Linux ecosystem 正快速的進步與演化。 雖然 Linux 2.6.21 早在二星期前就釋出，不過近期業務繁忙，一直到這幾天才能安排這項工作。 本次更新包含了以下幾個與我有關，或是較感興趣的項目： 1. VMI 驅動程式如果先前所提到的消息，已正式加入 kernel。 2. 值得注意的是，KVM 驅動程式也加入了 &quot;paravirtualized&quot; 的支援，&quot;paravirtualized KVM&quot; 驅動程式在 context-switch 的效能上有相當大的改進。此部份可參考 LKML...]]></description>
         <link>http://www.jollen.org/blog/2007/05/linux_2_6_21_release.html</link>
         <guid>http://www.jollen.org/blog/2007/05/linux_2_6_21_release.html</guid>
         <category>其它</category>
         <pubDate>Thu, 03 May 2007 23:57:40 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Neo1973 份量夠，但樂趣足！</title>
         <description>今天在閱讀 OpenMoko 的 mailing-list 時，讀到一篇有趣的文章 [Size and weight considerations for future Openmoko devices]。驚！社群上的朋友 Sven Neuhaus 將 Neo1973 /iPhone/M600i/LG Prada 做了個比較，不過對照項目並非功能面或是作業系統，而是針對裝置的大小與重量做比較，還挺有趣的。結果如下： Neo1973 iPhone M600i LG Prada length (mm) 120.7 115 107 98.8 width 62 61 57 54 height 18.5 11.6 15...</description>
         <link>http://www.jollen.org/blog/2007/05/neo1973_size_weight.html</link>
         <guid>http://www.jollen.org/blog/2007/05/neo1973_size_weight.html</guid>
         <category>Openmoko</category>
         <pubDate>Wed, 02 May 2007 23:50:06 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>充實的星期六, OpenMoko Day</title>
         <description>最近聽到非常多與 Free / Open Source Software 有關的驚喜消息，特別與 Linux mobile phone 有關的新聞最讓我感到興趣。上週六 [jserv] 兄邀請我與 OpenMoko 創辦人餐聚，很榮幸再次與 Sean Moss-Pultz 會面。這次餐聚也見到了 Harald Welte 與 Rex，還有大眾電腦的幾位長輩；是一次非常有意義的餐聚。 在前往聚會地點的途中，我心中就暗自盤算了一個問題，打算向 Sean 請益。前幾天提到 GMAE 的成立，GMAE 對 Linux mobile phone 會是一個非常重要的 milestone；GNOME 發佈此消息後，不但吸引許多人的興趣與注意，對 UI 技術架構的發展也產生重要影響。 由於在 GMAE 的會員名單中看到了 OpenMoko，最令我感興趣的當然就是...</description>
         <link>http://www.jollen.org/blog/2007/04/nice_openmoko_day.html</link>
         <guid>http://www.jollen.org/blog/2007/04/nice_openmoko_day.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 30 Apr 2007 18:48:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>全球最大 Embedded System 博覽會, Nov. 14-16, in Yokohama, Japan.</title>
         <description>號稱全球最大的嵌入式系統博覽會　Embedded Technology Conference (ET2007)，將於 Nov. 14-16 於日本 Yokohama 舉辦，今年將有 28,000 名參與人員出席。本年度 ET2007 博覽會的主軸如下： - consumer electronics - automotive electronics - mobile/ubiquitous computing - factory automation/robotics 此外，重點的技術議題包含： - multicore processors - WiMAX - Linux - real-time design - testing strategies for...</description>
         <link>http://www.jollen.org/blog/2007/04/et2007_japan.html</link>
         <guid>http://www.jollen.org/blog/2007/04/et2007_japan.html</guid>
         <category>其它</category>
         <pubDate>Thu, 26 Apr 2007 21:35:54 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>GNOME Mobile Platform</title>
         <description>近期 Embedded Linux 的發展與應用，不斷出現許多新興社群；前幾日在 Embedded Linux Conference, Santa Clara, USA（April 19, 2007）上出現一則令人興奮的消息： The GNOME Foundation announced today the creation of the GNOME Mobile &amp; Embedded Initiative (GMAE), and a software platform for user experience development across a wide range of...</description>
         <link>http://www.jollen.org/blog/2007/04/gnome_embedded_system_mboile.html</link>
         <guid>http://www.jollen.org/blog/2007/04/gnome_embedded_system_mboile.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 23 Apr 2007 18:07:01 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] Spinlock in Process-Context Code</title>
         <description>紀錄 Linux device driver 課程，關於「spinlock」的討論。 Kernel synchronization 的機制中，semaphore 有二種版本可供使用： - Semaphore: down(), up() - Spinlock 二種不同的 semaphore 實作的差異在於「P operation」的實作： - down/up, 採取 sleeping 方式 - spinlock, 採取 busy loop 方式 在 interrupt handler 的實作上，由於 kernel 並非與 process context 做切換（kernel 執行的是...</description>
         <link>http://www.jollen.org/blog/2007/04/spinlock_in_process_context_code.html</link>
         <guid>http://www.jollen.org/blog/2007/04/spinlock_in_process_context_code.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 22 Apr 2007 14:21:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[教育訓練紀錄] Mmap and remap_page_range(), in the nutshell.</title>
         <description>繼 Linux programming 課程紀錄「小談 mmap() 與 VMA」後，今天在 Linux device driver 課程再聊到有關 VMA 與 mmap driver function 的重要觀念；重點紀錄如下。 當 user-space 呼叫 mmap() system call wrapper function 後，kernel 會在 process address space 裡建立新的 VMA，並在 callback mmap driver function 時將「該」VMA 傳遞給我們的驅動程式。 因此，在驅動程式裡，只需要利用 remap_page_range()...</description>
         <link>http://www.jollen.org/blog/2007/04/mmap_remap_page_range_nutshell.html</link>
         <guid>http://www.jollen.org/blog/2007/04/mmap_remap_page_range_nutshell.html</guid>
         <category>教育訓練紀錄</category>
         <pubDate>Sun, 22 Apr 2007 10:34:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Qemu 模擬週邊的兩三事</title>
         <description>這二天跟幾個朋友聊技術，大家似乎都對 qemu 如何模擬週邊硬體都很感興趣，特別是原理的部份，雖然我只簡單帶過幾句話，不過還是簡單紀錄一下，也能跟大家分享。 關於「qemu 怎麼模擬週邊硬體」，看似神秘，不過，先三不一沒有來澄清觀念： - 不是模擬硬體的 waveform - 不是模擬硬體的 timing - 不是模擬硬體的 schematics - 沒有對硬體的行為做完整模擬 那麼，qemu system emulator 倒底模擬週邊硬體什麼東西？ - 反應 driver (如 U-Boot 或 Linux device driver) 對 I/O port 或 I/O memory 的 read/write - 保存與更新硬體狀態，並在 driver...</description>
         <link>http://www.jollen.org/blog/2007/04/qemu_hw_emulation_how.html</link>
         <guid>http://www.jollen.org/blog/2007/04/qemu_hw_emulation_how.html</guid>
         <category>U-Boot , ARM9 and Pre-OS 相關</category>
         <pubDate>Thu, 19 Apr 2007 23:32:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>再聊 CPUState、qemu 的 gdbserver</title>
         <description>前一則日記「小聊 qemu 的 CPUState」提到： 相關應用，例如，我們只要觀察 r15（pc）暫存器的值，就可以知道現在這台機器的程式執行位置。實際上的應用，像是 qemu 所實作的 gdbserver 即是透過此 object 的資訊，來回覆 gdb client 的命令。 以下展示實際的操作畫面。 下圖是利用 jk2410-emulator 模擬 Jollen-Kit! Pro. 的開機畫面，使用的 kernel 是 2.6.20.4： 在 kernel 檢查 root filesystem 是否為 initramfs 的時候，我們啟動了 gdb client，並透過 socket 連到 qemu 的 gdbserver；為了方便進行...</description>
         <link>http://www.jollen.org/blog/2007/04/cpustate_qemu_gdbserver.html</link>
         <guid>http://www.jollen.org/blog/2007/04/cpustate_qemu_gdbserver.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 18 Apr 2007 00:06:35 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> ELF 之 Dynamic Linking 觀念教學, #2: DT_NEEDED 基本概念</title>
         <description>所謂「如何找到程式所需（depends）的程式庫」並非一件很技術面的事情，程式經常會呼叫程式庫裡的函數，並且由於 Linux 是 shared library 系統，因此 程式執行時，如何找到程式需要的程式庫，其實是一件很自然的事情。 程式所需的程式庫，稱為相依性程式庫，即 library dependencies；並且，程式庫也會再相依其他的程式庫，因此，找出 library dependencies 是一種拓樸邏輯關係。 由 dynamic linker 的實作角度來說，程式的 library dependencies 紀錄在 dynamic segment 的 DT_NEEDED entry 裡，dynamic linker 便是由 DT_NEEDED 為起點，建立 library dependencies 關係圖，此圖又稱做 NEEDED list。 例如，若程式相依 libm 與 libc，那麼，DT_NEEDED entry...</description>
         <link>http://www.jollen.org/blog/2007/04/elf_dynamic_linking_2_dt_need.html</link>
         <guid>http://www.jollen.org/blog/2007/04/elf_dynamic_linking_2_dt_need.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Tue, 17 Apr 2007 22:53:42 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> ELF 之 Dynamic Linking 觀念教學, #1: 前言與簡介</title>
         <description>接續前些時日的「Program Loading」專欄，本系列日 記將會介紹「dynamic linking」的核心觀念。首先，我們由 dynamic segment，即 .dynamic section 切入；如果您還不清楚為何以此做切入，建議先行閱讀 &apos;Program Loading&apos; 專欄，以建立基礎概念。 Dynamic section 是整個 dynamic linking 體 系的觀念核心，絕對不能放過；在 System V ABI 規格中，有詳細的 dynamic section 介紹。Dynamic section 裡頭包含多個 &apos;entry&apos;，每一個 entry 紀載不同的資訊。首先，我們先找出 dynamic section 的資料結構定義如下： /* Dynamic section entry. */ typedef...</description>
         <link>http://www.jollen.org/blog/2007/04/elf_dynamic_linking_1.html</link>
         <guid>http://www.jollen.org/blog/2007/04/elf_dynamic_linking_1.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 16 Apr 2007 13:17:12 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>小聊 qemu 的 CPUState</title>
         <description>今天繼續來聊 qemu 的內部實作。在 qemu 裡頭，有一個 object 叫做 CPUState，這是一個重要的 qemu data structure，其實作如下（cpu-all.h）： #elif defined(TARGET_ARM) #define CPUState CPUARMState ... 我們以 ARM 做為 target，再找到 target-arm/cpu.h： typedef struct CPUARMState { /* Regs for current mode. */ uint32_t regs[16]; /* Frequently accessed CPSR bits are...</description>
         <link>http://www.jollen.org/blog/2007/04/qemu_cpustate_object.html</link>
         <guid>http://www.jollen.org/blog/2007/04/qemu_cpustate_object.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 11 Apr 2007 20:16:12 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>分享一下最近修改 jk2410-emulator 的心得</title>
         <description>來分享一下最近修改 jk2410-emulator 的心得，簡單紀錄重點，不過應該對有志研究 qemu 的 developer 有些啟發作用；OrzLab 有意舉辦 qemu 的讀書會，到時一定要跟大家多多請教，了解這個模擬器的明日之星。 對於 qemu internal 的研究，我還算是新手，幾天前從 jserv 那拿來了 openmoko-emulator 後，再參照 qemu-neo1973，做了一些小修改。最近在研究 qemu PC emulator，由於 qemu 可以研究的地方真的很多，像是： - dynamic translator（解譯 target CPU opcode 的核心） - accelerator（kqemu） - translation cache - MMU emulation -...</description>
         <link>http://www.jollen.org/blog/2007/04/about_jk2410_emulator.html</link>
         <guid>http://www.jollen.org/blog/2007/04/about_jk2410_emulator.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 10 Apr 2007 22:03:51 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>qemu-neo1973 / openmoko-emulator / jk2410-emulator</title>
         <description>[OpenMoko] 將 [GTA01] 硬體模擬功能加入到 qemu 裡了。這是由 OpenMoko 與 OpenedHand 所貢獻的 patch，稱為 qemu-neo1973，可由 OpenMoko 的 svn 下載 [http://svn.openmoko.org/trunk/src/host/qemu-neo1973/]。此外，[OrzLab] 日前也提供一份 &quot;openmoko-emulator&quot; 的模擬器，這是 qemu-neo1973 的分支版本，由 OrzLab 負責維護，並且也對 qemu 本身做了瘦身的動作。其它訊息可延伸閱讀 OrzLab 的 blog： OpenMoko/Neo1973硬體模擬 另外，我也將 OrzLab 所維護的 openmoko-emulator 另外再做了一個分支稱為 &quot;jk2410-emulator&quot;，也就是 Jollen-Kit! 開發板（JK2410）的模擬器。以下是初步的模擬畫面，上圖是 LCD panel，下圖是...</description>
         <link>http://www.jollen.org/blog/2007/04/qemu_neo1973_openmoko_jk2410.html</link>
         <guid>http://www.jollen.org/blog/2007/04/qemu_neo1973_openmoko_jk2410.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sun, 08 Apr 2007 23:31:19 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>關於 Acceptable Time 概念：運用在我的 Event-Driven 架構中</title>
         <description>前一篇日記提到，「feedback scheduler」是 time-triggered 模式，但我所規劃的架構為「full user-space」的實作，因此，怎麼在 user-space 計算時間，便成為一個核心議題；考慮到我們所定義的「acceptable time」有別於真實的系統時間（clock），或是即時性（real-time），因此我定義了一個基本時間單位：T。 若下一個時間單位為 T2，則 T_interval = T2 - T1，也就是每個 T 時間可以取得一個真實的系統時間，即 T_interval，但這不是我們想要的「時間」；假設 T_interval = 10ms，那個在我的系統中，每個基本時間單位 T 會等於真實時間的 10ms。 我們定義 TS(n) 為：每個事件到達後，一直到它的「control task」被「啟動」所需的花費時間（latency）。再定義 TD(n) 為：control task 啟動後，到執行結束所需要的時間長度。由於在這個系統裡，是不考慮真實時間的，只用「幾個單位」來表示所謂的「時間」，所以可以簡單將此系統的概念表示成： TS(n) = n * T TD(n) = n...</description>
         <link>http://www.jollen.org/blog/2007/04/acceptable_time_event_driven.html</link>
         <guid>http://www.jollen.org/blog/2007/04/acceptable_time_event_driven.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sun, 08 Apr 2007 14:34:05 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded System 與使用者的互動：Event-Triggered or Not？</title>
         <description>Event-Driven（或 Event-Trigger）的架構研究，通常伴隨嵌入式系統與控制的主題出現，我們以「嵌入式控制系統（Embedded Control Systems）」來泛指相關的研究主題。目前，在 embedded control system 的研究領域中，以 event-trigger 和 feedback scheduling 的技術為主；embedded control system 目前是 pervasive computing 的當紅題目。相關的研究，可在 [Feng XIA] 的網站中找到許多有用的 paper，建議可先由 &quot;Event-Triggered Feedback Scheduling of Embedded Control Systems [1]&quot; 此篇 paper 著手，以了解更多這方面的最新研究。 不過，我的目的並不是在了解 embedded control system 的設計理論，而是希望由相關的研究文獻中，找到一些適合「顯示與互動式」的嵌入式軟體架構。大略分享一下目前的初步研究如下。 互動是指使用者與機器的互動，而我想要的架構在於能簡化與有效設計「顯示（GUI）與互動（user...</description>
         <link>http://www.jollen.org/blog/2007/04/embedded_system_event_triggered_or_not.html</link>
         <guid>http://www.jollen.org/blog/2007/04/embedded_system_event_triggered_or_not.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sat, 07 Apr 2007 13:16:12 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded System 與使用者的互動：關於 Event-Driven 架構</title>
         <description>關於 embedded system 的應用程式架構，最廣為人知的模型就是「event-driven」的做法。傳統的應用程式若是採用「結構化」的方式來設計，是否能適合 embedded system 的應用還需要進一步評估。 典型的 embedded system 裝置經常需要處理圖形顯示與使用者互動，通常使用者是透過像是 touch panel 或是 GPIO 的硬體介面與應用程式溝通，再由應用程式更新圖形顯示。 因此，有沒有任何做法，可以讓我們在 Linux 系統下以直觀的「事件」方式設計程式呢？經常看到的實作方式是使用 pthread 的方式來實作，透過 pthread 來產生多個執行緒，每個執行緒負責設定一個以上的事件；所有的事件都在 parent process 裡的 software loop 做判斷處理。這是最簡本的做法。 上述所提的 parent process 負責「case」（C 的 swith 敘述）所有的事件，並做出相對應的處理，這個 process 通常也被叫做 thread manager，或是...</description>
         <link>http://www.jollen.org/blog/2007/04/embedded_system_event-driven.html</link>
         <guid>http://www.jollen.org/blog/2007/04/embedded_system_event-driven.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 04 Apr 2007 14:43:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>愚人節的禮物？OrzLab Launch Day</title>
         <description>好友 [jserv] 兄稍早捎來一則訊息...。以下引述 jserv 來信的部份內容： 最近跟朋友弄了一個實驗室，想法是能讓更多創意透過自由軟體，落實於嵌入式裝置或者特定的硬體中，這個實驗室名稱為 &quot;Open RazzmatazZ Laboratory &quot;，簡稱 OrzLab，一言以蔽之，訴求就是： &quot;Open RazzmatazZ Laboratory (OrzLab) funds an environment for freedom and creativity based on Free Software and Open Source efforts.&quot; 此外，jserv 提到他的願景： 避免重複的專案開發，並針對嵌入式系統或系統整合廠商需求，提出有價值的解決方案，建構一系列自由軟體為基礎的系統架構。也因此，針對特定主題，開發出足夠好且高度創意的專案，並確保以 GPL / BSD License / MIT X...</description>
         <link>http://www.jollen.org/blog/2007/03/orzlab_launch.html</link>
         <guid>http://www.jollen.org/blog/2007/03/orzlab_launch.html</guid>
         <category>其它</category>
         <pubDate>Sat, 31 Mar 2007 20:18:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Kernel 2.6.21 將正式加入 VMI（Virtual Machine Interface）</title>
         <description>在 LinuxDevices.com 上的一則新聞「Linux kernel gains paravirtualization option」指出，kernel 2.6.21 將加入 VMI（virtual machine interface）的功能，讓 kernel 得以「 modify itself for faster performance when run under a hypervisor」另外可參考這篇較完整的報導「Linux Kernel to Add VMI」。VMI 是由 VMware 公司所貢獻的實作，VMware 是知名度相當高的虛擬機器軟體商，同時也是老牌子的虛擬機器軟體，目前，Intel 與 AMD 已經將虛擬化技術列入重要的產品規劃（roadmap）項目裡了，再加上 VMware 公司的貢獻，可見虛擬化技術真的是 2007 年的重要技術發展趨勢之一。 上面所提到的「Hypervisor」指的是支援虛擬化處理器的虛擬機器管理軟體（Virtual...</description>
         <link>http://www.jollen.org/blog/2007/03/virtual_machine_interface_vmi.html</link>
         <guid>http://www.jollen.org/blog/2007/03/virtual_machine_interface_vmi.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 29 Mar 2007 23:12:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>看 Linux kernel 應具備的首要觀念是？</title>
         <description>Linux kernel 是狀態機還是結構化程式流程？ 作業系統（Operating System）的研究，我們以 Linux kernel 的探討來說明一些應有的正確觀念。 對於 Linux kernel 的研究，最經常聽到有人提起「kernel source code」的研讀與分析，並且最常看到的研究方式為「尋找 kernel 進入點，並依照程式流程（flow）做循序研究」，不過，這卻是一種「大部份情況下都錯誤」的研究方式。 由於電腦系統是一種 foreground-background system，並且 Linux kernel 是在此系統上的作業系統，因此整體的 kernel 行為是「control patch」，也就是「控制權的轉移」與「系統狀態的改變」，並不是「程式（函數）流程（flow）」，或是「程式結構（structure）」的問題；最近有朋友問起這方面的議題， 正好也在進行 Linux device driver 的 training，因此特別整理這則日記，來與大家分享，若有任何論述上的失誤，或是有不同的觀點，歡迎在這裡留言 分享。 許多人對於「作業系統」的觀念可能真的有點薄弱；具體來說，對於 kernel 內部原理的研究，其方法應該是： 1. kernel 的開機階段，是以「流程（flow）」的角度來做討論。 2. kernel...</description>
         <link>http://www.jollen.org/blog/2007/03/importance_hacking_linux_kernel.html</link>
         <guid>http://www.jollen.org/blog/2007/03/importance_hacking_linux_kernel.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 24 Mar 2007 16:09:30 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>小結 Program Loading 觀念</title>
         <description>由「Program Loading」專欄所得到的觀念如下。 外部程式（stored program）的執行是透過 fork system call，先將 current process 複製一份成為他的 child process。接著再透過 exec system call 將外部程式的 ELF image 載入，並取代原來的 process。Kernel ELF loader 會讀取 ELF image，並將 text segment 與 data segment 重新 mapping，接著再找到程式的 program interpreter。 外部程式的最初執行是由 program interpreter 開始，program interpreter 透過...</description>
         <link>http://www.jollen.org/blog/2007/03/program_loading_conclusion.html</link>
         <guid>http://www.jollen.org/blog/2007/03/program_loading_conclusion.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 23 Mar 2007 10:56:44 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>哪些是 Free / Open Source 軟體人員的基本條件？</title>
         <description>前陣子 OpenMoko 在社群裡徵求 Free / Open Source 的開發人員，讓我們來看一下，對於一個這麼有經驗的 Free / Open Source 團隊而言，他們開出的基本條件是什麼（引用 mailing-list 原文）： 2) We don&apos;t have enough UI / Application developers -- If anybody meets (or knows somebody who can meet) the following qualifications: * &gt;= 2...</description>
         <link>http://www.jollen.org/blog/2007/03/open_source_developer.html</link>
         <guid>http://www.jollen.org/blog/2007/03/open_source_developer.html</guid>
         <category>其它</category>
         <pubDate>Wed, 21 Mar 2007 13:38:04 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 接受社群的建議加入 WiFi 模組</title>
         <description>OpenMoko 專案最近透過他們自己的 ecosystem 向社群請求有關 GPL WiFi 模組的廠商以及驅動程式，昨天 OpenMoko 宣佈了以下這則消息： 主旨: [openmoko-announce] RE: Crossroads 完全表頭 Dear Community, A big thanks again for all your feedback! We&apos;re meeting with vendors this week and are optimistic about our chances to find a WiFi...</description>
         <link>http://www.jollen.org/blog/2007/03/openmoko_wifi_available.html</link>
         <guid>http://www.jollen.org/blog/2007/03/openmoko_wifi_available.html</guid>
         <category>Openmoko</category>
         <pubDate>Tue, 20 Mar 2007 11:40:06 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>小談 mmap() 與 VMA</title>
         <description>最近在 program loader 專欄裡，整理並分享了 kernel 的 ELF loader 主題；接著下來就是 dynamic linking 的議題了。在正式介紹 dynamic linking 前，先來簡單提一下「memory mapping」的觀念；近期在進行 Linux programming 的教育訓練，正好可以跟同學做個小討論。 在 IPC 的課程中提到 mapped memory 的行程間通訊機制，是透過「shared file」來做訊息的傳遞；將 shared file mapping 到 process address space 的 system call 為 &apos;mmap()&apos;。以下是其中一個簡單的程式範例 （mmap_write.c）： #include...</description>
         <link>http://www.jollen.org/blog/2007/03/mmap_vma.html</link>
         <guid>http://www.jollen.org/blog/2007/03/mmap_vma.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Fri, 16 Mar 2007 17:38:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF 之 Program Loading 教學文件, #4: Program Loader 整體流程</title>
         <description>Program loader 的整體流程如下： 1. 使用者在 shell 模式下執行外部程式（stored program）。 2. shell 以 fork+exec system call 的方式執行外部程式。 3. 透過 0x80H 軟體中斷（x86）叫用 kernel 的 exec（sys_execvp）system call service。 Kernel Space Program Loader4. Exec system call 呼叫 program loader（ELF loader），將 process image（ELF image）載入。 5. Program...</description>
         <link>http://www.jollen.org/blog/2007/03/elf_program_loading_4_flow_chart.html</link>
         <guid>http://www.jollen.org/blog/2007/03/elf_program_loading_4_flow_chart.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 13 Mar 2007 14:26:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF 之 Program Loading 教學文件, #3: Segment Type 與 Kernel Space Loader</title>
         <description>Segment Type Program loading 時期會處理以下 4 種 segment： #define PT_LOAD 1 /* Loadable program segment */ #define PT_DYNAMIC 2 /* Dynamic linking information */ #define PT_INTERP 3 /* Program interpreter */ #define PT_PHDR 6 /* Entry for header table itself...</description>
         <link>http://www.jollen.org/blog/2007/03/elf_program_loading_3_segment_type.html</link>
         <guid>http://www.jollen.org/blog/2007/03/elf_program_loading_3_segment_type.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 09 Mar 2007 19:46:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> Process Creation, #6：Exec System Call 的觀念</title>
         <description><![CDATA[有關 exec system call 的前言，除了以下日記外： 2006.12.31: Process Creation, #1：由 shell 執行外部程式《基本觀念與範例》 2007.01.02: Process Creation, #2：Running a &quot;User Process&quot; 也請閱讀以下日記： 2007.01.05: Linux 的 Virtual Memory Areas（VMA）：基本概念介紹 2007.01.15: Linux 的 Virtual Memory Areas（VMA）：Process 與 VMA 整體觀念 Exec system call 的 service routine...]]></description>
         <link>http://www.jollen.org/blog/2007/03/process_creation_6_exec.html</link>
         <guid>http://www.jollen.org/blog/2007/03/process_creation_6_exec.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 08 Mar 2007 19:47:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF 之 Program Loading 教學文件, #2: Program Header Table</title>
         <description>了解系統行為的研究方法，我認為有效的步驟應分成三個階段來進行。 初次入門：一開始進行研究時，因為對於系統的基本觀念還不夠完備，因此「學中做、做中學」成了最有效率的入門方式，透過「概念的實作」與「實作讀到的概念」的過程，最可以幫助我們在短時間內掌握重要的核心知識。以 ELF 專欄為例，在入門時期，我用了 loader 0.1~0.5 共 5 個小範例來陳述 ELF 的格式以及 section 的觀念。 掌握觀念：首先發表一個自己的看法。「將所有理論或概念全部動手實作一遍」，在我看來，並不是很有效率的辦法，這種做法應當很有幫助，但是卻會延緩學習速度，因此，這個時 期的重點如果是在「通盤掌握整體的重要關鍵」，那麼「善用工具來做分析」自然是最有成 效的方式。以「工具來操作並驗證觀念」是建議的做法，另外一個理由是，這種做法比較能貼近實務面。在「ELF 之 Program Loading 教學文件」的日記裡，我將會以此做法來分享教學文件。 思考與研究：這個階段有點像是「實驗室」的做法，在這裡不再贅述。 Program Header Table 這裡有幾個重要的觀念： 1. Program header table 是程式要能執行的重要資訊，program header table 紀錄 ELF image 裡的 &apos;segment&apos; 分佈，請參考 Jollen&apos;s Blog「ELF...</description>
         <link>http://www.jollen.org/blog/2007/03/elf_program_loading_2_pht.html</link>
         <guid>http://www.jollen.org/blog/2007/03/elf_program_loading_2_pht.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 08 Mar 2007 16:19:41 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>小聊 .dynstr 節區</title>
         <description>昨天與同學小談了一下 .dynstr 節區，簡單紀錄如下。 我們知道 ld.so（dynamic linker/loader）與 ldd 指令，而這二個程式都會參考到 ELF 的 .dynstr（dynamic linking 的 string table）。以 ldd 來說，我們用 ldd 來找出 ELF 執行檔的相依動態程式庫： # ldd hello libc.so.6 =&gt; /lib/tls/libc.so.6 (0x42000000) /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x40000000) 這個動作依賴 .dynstr 節區所提供的資訊，也就是說，當 .dynstr 的內容有誤或是不存在時，ld.so 與 ldd 便無法正常工作。例如：...</description>
         <link>http://www.jollen.org/blog/2007/03/dynstr_section.html</link>
         <guid>http://www.jollen.org/blog/2007/03/dynstr_section.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 05 Mar 2007 12:31:00 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF 之 Program Loading 教學文件, #1: Segment 的觀念</title>
         <description><![CDATA[「Program Loading」的議題在討論「如何將程式載入記憶體」，以便後續的「執行」。在「ELF（Executable and Linking Format）格式教學文件」第 1~8 篇文章裡，我們了解基本的 ELF 觀念，並建立所謂的「節區」知識。 本系列日記「ELF 之 Program Loading 教學文件」將會介紹有關程式載入（program loading）的核心主題，在此之前，請先閱讀 Jollen 的「Executable and Linking Format」專欄，以基本基礎的先備知識。 Segments 由 &quot;execution view&quot; 的角度來看程式（即 process），所謂的節區（section）已經被進化成區段（segment）的觀念了。廣義來說，section 可被分為以下 3 種 segment： Text segment - 指存放唯讀（read-only）程式碼與資料的所有 section 。 Data segment - 指存放可寫（writable...]]></description>
         <link>http://www.jollen.org/blog/2007/03/elf_program_loading_1_segment.html</link>
         <guid>http://www.jollen.org/blog/2007/03/elf_program_loading_1_segment.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 05 Mar 2007 12:05:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 的 gsmd：Linux 手機的 GSM Modem 通訊程式</title>
         <description>Linux 手機是 Embedded Linux 的重要應用項目之一，要能具備「手機」的功能，最基本的規格之一當然就是要支援 GSM（Global System for Mobile Communications）標準，也就是我們稱之為 2G 的行動電話標準。 GSM 系統使用一種稱之為 GSM modem 的裝置（也就是我們耳熟能詳的「數據機」）來做電話的「外撥（dial out）」與「接聽（answer）」功能。因此，Linux 手機要能打電話與接聽電話，必須將 target device 外接 GSM modem，並透過 GSM modem 的指令集（AT command）來對 GSM modem 下撥號或接聽指令。 GSM modem 與 target device 是以 UART（RS-232）介面連接，因此需要一個與 GSM modem...</description>
         <link>http://www.jollen.org/blog/2007/02/openmoko_gsm_modem_gsmd.html</link>
         <guid>http://www.jollen.org/blog/2007/02/openmoko_gsm_modem_gsmd.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sat, 24 Feb 2007 22:38:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 釋出原始碼了</title>
         <description>OpenMoko 於台北時間 2007-02-15 正式開放原始碼下載！如果您還不曉得 OpenMoko 專案的重要性，可先行閱讀以下幾則消息： OpenMoko 準備舉旗進攻了 「Mobile 2.0 的思考」與第一隻採用 OpenMoko 的 Linux Smartphone OpenMoko 是史上頭一遭完全開放原始碼的 Linux 手機，OpenMoko 專案強調 100% 的開放與社群；隨著這個專案的正式問世，未來的 Linux mobile phone 生態想必將會出現大變化。以下是 OpenMoko announce 的 mail，為了見證這重要的歷史時刻，我將收到的 mailing-list 全文刊載： 日期: Wed, 14 Feb 2007 18:02:37 +0100 寄件者:...</description>
         <link>http://www.jollen.org/blog/2007/02/openmoko_announce.html</link>
         <guid>http://www.jollen.org/blog/2007/02/openmoko_announce.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sat, 17 Feb 2007 18:08:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.20 報馬仔</title>
         <description>Linux 2.6.20 早在 2007-02-04 就釋出了，不過 Jollen 一直到今天才去看 Linux 2.6.20 的 Changelog，順便在這裡做一點筆記。 2 個星期前釋出的 kernel v2.6.20 又多了許多功能與 device driver，詳細的 Changelog 說明可參考 kernelnewbies.org 的 [LinuxChanges]。此次的更新，幾個與我的工作較密切的有： 1. Linux 2.6.20 在 arch/powerpc/ 裡新增了 Sony Platstation 3 的支援。 2. Networking device driver 方面，更新了 Tsi 108/109...</description>
         <link>http://www.jollen.org/blog/2007/02/kernel_2_6_20_release.html</link>
         <guid>http://www.jollen.org/blog/2007/02/kernel_2_6_20_release.html</guid>
         <category>其它</category>
         <pubDate>Wed, 14 Feb 2007 23:47:59 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 測試：Full root filesystem for ARM9 階段《NFS Mount》</title>
         <description>Bootstrap root filesystem 是一個基本且可開機的 root filesystem，針對 ARM9 的 root filesystem 建構與開發，要如何有效率的進行測試與發展是必修的一門功課。傳統的 Embedded Linux 應用，大多是以 NFS 的方式來測試 target device 的完整 root filesystem（full root filesystem）；另外還有一種較「先進」的測試方式是使用 sshfs 的方式來進行，可參考 Jserv 兄的 blog「sshfs 在 Embedded Linux 開發的應用」。 以 NFS 進行 Embedded Linux 的開發測試，主要是針對 target device...</description>
         <link>http://www.jollen.org/blog/2007/02/nfs_root_filesystem_arm9.html</link>
         <guid>http://www.jollen.org/blog/2007/02/nfs_root_filesystem_arm9.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 12 Feb 2007 16:11:53 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>（無關 Embedded Linux）修改論壇註冊方式</title>
         <description>雖然 Linux 的技術發展快速，不過，spam 的技術發展更是驚人。許多 anti-spam 的軟體似乎都敗陣下來了，還好我的 mailbox 還挺得住。 前幾天，Jollen&apos;s forum 被大量的 spam 機器人註冊並發送垃圾信，造成「Forum 訂閱會員」被大量的 spam 間接攻擊。在這裡先向 Jollen&apos;s forum 會員們道歉，前幾天，被 spam bot 瘋狂註冊我的 forum，並張貼大量的廣告信，造成 forum 會員無端收到由 forum.jollen.org 發出的 spam，造成您的諸多困擾，深感抱歉。 目前已將 forum 的註冊方式改為「經 email 認證後，由管理員手動開啟權限」，為加速您的權限啟用速度，請在註冊表單的「學員碼」欄，輸入「iamnotspam」，以加速您的帳號啟用速度（如下圖）。未填寫者，需要透過「人腦 spam 辨識」流程，在啟用速度上，可能會慢些。還請多加見諒。 目前，用來對付 spam bot 的方法之一是「手動輸入驗證碼」（如下圖），這是流行許久的方法，不過已經被攻破了。Jollen&apos;s forum...</description>
         <link>http://www.jollen.org/blog/2007/02/i_hate_spam.html</link>
         <guid>http://www.jollen.org/blog/2007/02/i_hate_spam.html</guid>
         <category>其它</category>
         <pubDate>Thu, 08 Feb 2007 17:45:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux / ARM9 課程的範例：root filesystem</title>
         <description>提供 Jollen 的 Embedded Linux / ARM9 課程的範例，本課程重心放在 root filesystem 的建構技術與觀念解說。第 1~2 天的課程實作產出範例如下： arm9.so-busybox.tar.bz2 arm9.so-hello.tar.bz2 jk2410_pkgs_ports-20070204.tar.bz2 第一份是「bootstrap root filesystgem」的製作、第二份是 cross compile「Hello World」for ARM9 的實例、第三份是 madplay project 與 nano-X project（MP3 player 與 AVI player）的實例。 第一份範例的內容可參考 Jollen 的「製作 ARM9 的 Bootstrap Root...</description>
         <link>http://www.jollen.org/blog/2007/02/embedded_linux_root_filesystem_arm9.html</link>
         <guid>http://www.jollen.org/blog/2007/02/embedded_linux_root_filesystem_arm9.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 07 Feb 2007 17:30:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>研究 Dynamic Loader, #1: dlopen</title>
         <description>學到 ELF 的格式，並了解 .text/.data/.bss section 後，接下來絕對不能錯過「ELF loader」領域最經典的題目 - dynamic loader。不把 dynamic loader 從頭到腳好好研究一遍的話，實在是可惜了！ 要學習 dynamic loader 的議題，並深入核心實作，最好可以由 ld.so 程式設計的主題切入。ld.so 是 Linux 的 dynamic loader，如果 man ld.so 的話，可以得到以下解釋： DESCRIPTION ld.so loads the shared libraries needed by a program, prepares the pro-...</description>
         <link>http://www.jollen.org/blog/2007/02/dynamic_loader_1_dlopen.html</link>
         <guid>http://www.jollen.org/blog/2007/02/dynamic_loader_1_dlopen.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 05 Feb 2007 23:54:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 I/O, #4: fops-&gt;ioctl 實作</title>
         <description>延續前一篇文章的介紹，在了解 copy_to_user() 與 copy_from_user() 二個 API 後，接著 Jollen 將由 Linux device driver 的架構層來討論 user-space 與 kernel-space 的 I/O 機制。 同時，也延續在「架構層」系列教學專欄的 debug card 範例。 基本觀念 需要由 user-space 讀取資料，或是寫入資料給 user-space 的主要 3 個 driver method 為：read、write 與 ioctl。指向 user-space 資料空間（buffer）的指標是 kernel 回呼...</description>
         <link>http://www.jollen.org/blog/2007/02/linux_device_driver_io_4.html</link>
         <guid>http://www.jollen.org/blog/2007/02/linux_device_driver_io_4.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 02 Feb 2007 21:28:57 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux/PowerPC 新世代《序幕》</title>
         <description>Linux/PPC 現在已經改為 Linux/PowerPC。由於 IBM 成立 power.org 組織後，便以 Power Architecture 來稱呼 PowerPC 處理器晶片，因此，以往所慣用的 PPC 現在必須正名為 PowerPC。也就是說，用 PowerPC 來統稱新世代 Power Architecture 處理器晶片會比較好；以往的 PPC 簡稱將會被捨棄。 Linux kernel 由 2.6.15 版開始，已經把 arch/ppc/ 重新組識到 arch/powerpc/，不過在整個 migration 的工作完成前，arch/ppc/ 仍會持續存在，只不過 arch/ppc/ 將會停止發展；接下來的 Linux kernel for PowerPC 將會轉移到...</description>
         <link>http://www.jollen.org/blog/2007/01/linux_kernel_powerpc.html</link>
         <guid>http://www.jollen.org/blog/2007/01/linux_kernel_powerpc.html</guid>
         <category>其它</category>
         <pubDate>Wed, 31 Jan 2007 14:56:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>關於 U-Boot 的程式整體進入點</title>
         <description><![CDATA[關於 U-Boot 的程式進入點，我以 SMDK2410 平臺為例來說明。首先，在每張 board 的目錄下，都會有一個 linker script，程式的整體進入點可以閱讀此檔案得知。以 SMDK2410 來說，我們應該由 &lt;U-Boot&gt;/board/smdk2410/u-boot.lds 檔案看起，以下是其內容節錄： ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { cpu/arm920t/start.o (.text) *(.text) } 在 linker script 的 SECTIONS 命令區塊中，.text section 一開始被放進 &lt;U-Boot&gt;/cpu/arm920t/start.o 檔，所以能了解到此檔案是整個 U-Boot...]]></description>
         <link>http://www.jollen.org/blog/2007/01/u-boot_entry_point.html</link>
         <guid>http://www.jollen.org/blog/2007/01/u-boot_entry_point.html</guid>
         <category>U-Boot , ARM9 and Pre-OS 相關</category>
         <pubDate>Tue, 30 Jan 2007 23:41:53 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>U-Boot：Porting a new Board（如何在 U-Boot 裡新增自己的 board）</title>
         <description><![CDATA[U-Boot 在 board/ 目錄下存放個別板子的支援程式碼（board support codes、board support package），並且是一張板子一個目錄。有時，基於一些理由，我們會想到新增一個新的 board 目錄來存放我們的 BSP。例如，以 Jollen-Kit!（JK2410）為例，JK2410 是基於 SMDK2410 所發展，若將 U-Boot 設定為 'smdk2410_config'，也能支援我們的 JK2410。但是，我們會想要另外增加一個 &lt;U-Boot&gt;/board/jk2410/ 目錄，來擺放 JK2410 的程式碼，即便 &lt;U-Boot&gt;/board/smdk2410/ 與 &lt;U-Boot&gt;/board/jk2410/ 裡的程式碼是 100% 相同的。 有這樣需要的幾個具體理由是： 練習 U-Boot 移植。 避免修改到原始的 BSP 程式碼。 門面問題，讓 U-Boot 也能有專屬於我們板子的支援，而不是基於其他的板子。 將來會正式釋出...]]></description>
         <link>http://www.jollen.org/blog/2007/01/u-boot_porting_a_new_board.html</link>
         <guid>http://www.jollen.org/blog/2007/01/u-boot_porting_a_new_board.html</guid>
         <category>U-Boot , ARM9 and Pre-OS 相關</category>
         <pubDate>Mon, 29 Jan 2007 16:14:11 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>LiMo Foundation（Linux 手機發展基金會）開張了</title>
         <description>國際大廠「合作」成立「非營利組織」的基金會，似乎成為一種運動了，這意謂著更開放、更自由與更社群化的企業手法，已成為建構 ecosystem 的重要方針之一。 LiMo 基金會開門營業了。今天在 LinuxDevices.com 看看到這則消息：Cellphone giants unveil mobile Linux foundation，六家手機大廠（Motorola, NEC, NTT DoCoMo, Panasonic Mobile Communications, Samsung Electronics, and Vodafone.）共同贊助並成立一個名為「LiMo」的基金會，引述一小段新聞原文如下： The collaboration of giants now known as the LiMo Foundation was first announced in mid-June of last year....</description>
         <link>http://www.jollen.org/blog/2007/01/limo_foundation.html</link>
         <guid>http://www.jollen.org/blog/2007/01/limo_foundation.html</guid>
         <category>其它</category>
         <pubDate>Fri, 26 Jan 2007 18:38:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>製作 ARM9 的 Bootstrap Root Filesystem</title>
         <description><![CDATA[更新「Building ARM9 Bootstrap Root Filesystem」教學文件，在此提供與各位朋友分享，並請多多指正，以讓文件內容更加完善。以下文件以 MS-Word 轉檔，請多見諒。 《Jollen的Root Filesystem建置技術系列》 製作ARM9的Bootstrap Root Filesystem &nbsp;作者／陳俊宏 http://www.jollen.org 更新日期：2007/1/23&nbsp; 在「完整註明出處」的前提下（註明方式說明），您能立即擁有轉貼與引用的授權，且毋需知會作者。&nbsp; 目的&nbsp; 製作 bootstrap root filesystem（base root filesystem）以提供一個最簡單、陽春且可開機的環境；製作完成的系統可開機到shell模式，並可使用 busybox 提供的指令。&nbsp; 準備工作&nbsp; 首先，您必須準備一台 host 開發環境，並安裝好 cross toolchain；接著，由於本文是做實機測試，因此，如果您沒有 ARM9 開發板，可以考慮使用 Qemu 來做模擬測試。&nbsp; 以下的操作示範，只節錄重點指令片段，您可能必須根據自己的整體實作流程，來微調指令的順序，或是參數等。&nbsp; Step 1：建立工作目錄&nbsp; 建立一個專用的工作目錄，命名為 arm9.so-busybox/：&nbsp;...]]></description>
         <link>http://www.jollen.org/blog/2007/01/arm9_bootstrap_root_filesystem.html</link>
         <guid>http://www.jollen.org/blog/2007/01/arm9_bootstrap_root_filesystem.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 23 Jan 2007 18:25:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>OpenMoko 準備舉旗進攻了</title>
         <description>OpenMoko 二天前釋出他的最新 roadmap 規劃，OpenMoko 的 project leader &quot;Sean Moss-Pultz&quot; 在 1/20 日發表了「釋放你的手機（Free Your Phone）」，此文提到，Neo1973/OpenMoko 將採三階段來「釋放手機」，首先即將到來的是「2007-02-11 Phase 0: Developer Preview」。 第一階段的計畫中，開發者將能取得 OpenMoko 的原始碼；完整的 OpenMoko Linux distribution 與原始碼將會開放。以下是 FIC Neo1973 手機的硬體規格： * 120.7 x 62 x 18.5 (mm) * 2.8&quot; VGA (480x640)...</description>
         <link>http://www.jollen.org/blog/2007/01/openmoko_announce.html</link>
         <guid>http://www.jollen.org/blog/2007/01/openmoko_announce.html</guid>
         <category>Openmoko</category>
         <pubDate>Mon, 22 Jan 2007 20:16:27 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>[筆記] Linux 2.6 的 MMC Core</title>
         <description>以下整理自 Jollen 筆記（非教學文件），許多地方未能清楚交待，這部份有請大家自行補齊了。本文分享給有志研究 Linux MMC 驅動程式實作（MMC Core）的朋友參考。以下分析基於 Linux 2.6.17.7，更新版本的 kernel 加入了許多 patch（例如 Linux 2.6.19 的 SDHC patch），這些更新內容不在討論之列。 續前一篇日記「Linux（open source）的 SD/MMC/SDIO 支援現況概要」所提到的，目前的 Linux SD/MMC/SDIO 「嚴格來說」，只支援 MMC 記憶卡，如果是要插上 SD 記憶卡，使用上則會有諸多限制。 由 Linux 驅動程式的角度來看，單就 MMC 的部份來分析的話，Linux 的 SD/MMC 驅動程式層包含以下實作（Kconfig）： CONFIG_MMC CONFIG_MMC_BLOCK 相關檔案位於 drivers/mmc/...</description>
         <link>http://www.jollen.org/blog/2007/01/linux_26_mmc_core.html</link>
         <guid>http://www.jollen.org/blog/2007/01/linux_26_mmc_core.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 20 Jan 2007 00:06:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux（open source）的 SD/MMC/SDIO 支援現況概要</title>
         <description>SD（Secure Digital）與 MMC（Multimedia Card） SD 是一種 flash memory card 的標準，也就是一般常見的 SD 記憶卡，而 MMC 則是較早的一種記憶卡標準，目前已經被 SD 標準所取代。在維基百科上有相當詳細的 SD/MMC 規格說明：[http://zh.wikipedia.org/wiki/Secure_Digital]。 SDIO（Secure Digital I/O） SDIO 是目前我們比較關心的技術，SDIO 故名思義，就是 SD 的 I/O 介面（interface）的意思，不過這樣解釋可能還有點抽像。更具體的說明，SD 本來是記憶卡的標準，但是現在也可以把 SD 拿來插上一些週邊介面使用，這樣的技術便是 SDIO。 所以 SDIO 本身是一種相當單純的技術，透過 SD 的 I/O 接腳來連接外部週邊，並且透過 SD...</description>
         <link>http://www.jollen.org/blog/2007/01/open_source_sd_mmc_sdio.html</link>
         <guid>http://www.jollen.org/blog/2007/01/open_source_sd_mmc_sdio.html</guid>
         <category>其它</category>
         <pubDate>Fri, 19 Jan 2007 17:32:39 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>SD/SDIO 的開發板</title>
         <description> Jinvani Systech 推出 SD/SDIO 的發展平臺，特別的是，這是一張 PCI-based 的 host controller 卡！相當的有用處，詳見 LinuxDevices.com 上的新聞全文 [http://www.linuxdevices.com/news/NS7542044278.html]。 我以「相當的有用處」來形容這個發展平臺的理由是，在 SD/SDIO 相關的專案裡頭，host controller 的發展與移植並非首要的工作，重點工作反而是： 1. 基於 SD/SDIO 週邊介面卡的 device driver，例如 WiFi card、Bluetooth、GPS modem、SD memory 等。 2. SD/SDIO card 的相關應用程式，例如數位相框軟體（基於 SD memory card）等。 因此，如果可以在 host 端（x86）插上一張這種卡，事情就美妙許多了，因為可以減化部份應用程式的測試工作，同時也能加速...</description>
         <link>http://www.jollen.org/blog/2007/01/sdsdio.html</link>
         <guid>http://www.jollen.org/blog/2007/01/sdsdio.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 19 Jan 2007 15:49:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 測試：Bootstrap root filesystem（x86）階段《程式執行測試》</title>
         <description>本文是單純實作時的測試方法說明，「Bootstrap root filesystem」的做法、步驟、概念與隱含的觀念請自行參考相關文件。 前情提要：由 Busybox 開始 這個階段的實作「提要」如下。 我們到 Busybox 官方網站下載原始碼：http://busybox.net/downloads/busybox-1.3.1.tar.bz2。如果您是初次「把玩」open source package，必須了解一個重要的概念：對任何的 open source 套件而言，以下二份文件是必讀的： README INSTALL 大多數的套件都包含以上二個檔案，並且許多重要的資訊都寫在這二份文件檔裡。將 Busybox 套件解開後，先檢查以下的 utility 是否有勾選： init process shell（請優先選用 ash） 並且將安裝路徑（install prefix）設定到事先建立的 root filesystem 空目錄。接著進行編譯，在編譯過程中可能會產生一些錯誤，請先把產生錯誤的選項取消，試著將 Busybox 編譯出來後並安裝至 root filesystem 目錄下。 我要怎麼測試此階段 root filesystem 的正確性？...</description>
         <link>http://www.jollen.org/blog/2007/01/embedded_linux_testing_rfs.html</link>
         <guid>http://www.jollen.org/blog/2007/01/embedded_linux_testing_rfs.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 17 Jan 2007 15:43:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Shared Memory 的 Race Condition</title>
         <description>今天在討論基本的 shared memory 機制時聊到，shared memory 有同步性的問題（synchronization），主要的原因是 Linux 並未對 shared memory 做同步的控制。以下單純由 user-space programming 的角度來探討此觀念。 首先，試作以下 3 個小程式： shm_allocate.c，用來請求 shared memory shm_read.c，用來讀取 shared memory shm_write.c，用來寫入 shared memory 以上程式可由 [http://tw.jollen.org/ipc-programming/shm_race.tar.bz2] 下載。以下是操作方法： # ./shm_allocate jollen Shared Memory Segment ID: 98306 先執行 shm_allocate 配置...</description>
         <link>http://www.jollen.org/blog/2007/01/shared_memory_race_condition.html</link>
         <guid>http://www.jollen.org/blog/2007/01/shared_memory_race_condition.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Tue, 16 Jan 2007 15:54:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> Linux 的 Virtual Memory Areas（VMA）：Process 與 VMA 整體觀念</title>
         <description>要了解 VMA（Virtual Memory Area）的「整體觀念」，最好的方式就是圖解說明。下圖說明了 process 與 VMA 的整體觀念。 圖：Process 與 VMA 整體觀念 Memory Descriptor Linux 的「Process Descriptor」資料結構為 struct task_struct（include/linux/sched.h）。Process descriptor 裡的 mm field 紀錄了 process 的 VMA 資訊： struct task_struct { ... struct mm_struct *mm; ... } struct mm_struct 即是...</description>
         <link>http://www.jollen.org/blog/2007/01/process_vma.html</link>
         <guid>http://www.jollen.org/blog/2007/01/process_vma.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 15 Jan 2007 15:27:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Process Creation, #5：copy_process()</title>
         <description>Before We Start Trace Linux kernel 時，有幾個相當重要的原則要掌握住： 不要對 Linux kernel 做逐行的研讀（trace line-by-line、最忌諱的做法），而是掌握我們想要了解的核心觀念，並針對此核心觀念來了解相關的實作細節。 必須整理觀念與程式碼的對應，但並不是要大家對原始碼做逐行註解，而是針對細部觀念，將相關的實作片斷整理出來即可。 每個 kernel API 的實作原本就會包含許多的「OS 基礎概念與理論」，例如：mutex、semaphore、locking 等等。與這些基礎知識相關的程式碼，本來就是屬於整體的部份，所以應該「跳脫」個別的 kernel API 實作。 如 3.，也就是說，如果我原本就懂這些東西，就應該很清楚了解這些「片段程式碼」的作用，應避免「完美主意」作祟：不要急於看懂這些片斷的程式細節，以免因小失大。 如 3.，如果我原本就不懂這些東西，可以試著把這些程式碼當做「黑盒子」來看待。這樣的，這也是「學習方法」的問題，並非要刻意逃避這些自己不懂的東西。 以本日記為例，我們想要了解 Linux kernel 如何產生新的 process，而其中的關鍵便是 copy_process() 函數。但是，目前我們在做的是 sys_fork() 的 trace，而 sys_fork() 並不指定任何的 clone_flags 參數值，因此，在...</description>
         <link>http://www.jollen.org/blog/2007/01/process_creation_5_copy_process.html</link>
         <guid>http://www.jollen.org/blog/2007/01/process_creation_5_copy_process.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 14 Jan 2007 01:59:19 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Nano-X 程式設計, #4：設定 Window Manager（wm.c）</title>
         <description>wm.c 以 image.c 為範本，wm.c 執行後在畫面上只會看到圖片圖（沒有視窗標題列與邊框），並且可使用滑鼠來拖曳圖片。本範例主要在展示以下的 Nano-X API 程式設計方法： ˙ 如何設定視窗屬性（window manager）。 ˙ 如何與使用者做互動（human interactive）。 要寫出「托曳圖片」的功能，首先必須把視窗的標題列與邊框去除，否則只能在標題列上托曳整個「視窗」。做法非常簡單，只要在建立視窗時設定 window manager 即可： wid = GrNewWindowEx(GR_WM_PROPS_APPWINDOW | GR_WM_PROPS_NODECORATE | GR_WM_PROPS_NOAUTOMOVE, NULL, GR_ROOT_WINDOW_ID, 0, 0, image_jollen.width, /* 圖片寬度 */ image_jollen.height /* 圖片高度 */, 0xFFFFFF); 粗體字的地方是新加入的 window...</description>
         <link>http://www.jollen.org/blog/2007/01/nano-x_programming_4.html</link>
         <guid>http://www.jollen.org/blog/2007/01/nano-x_programming_4.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sat, 13 Jan 2007 23:11:50 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Nano-X 程式設計, #3：顯示圖片（image.c）</title>
         <description>程式範例 image.c 是以 hello.c 為基礎，加上顯示圖片的功能。透過 image.c 我們可以學到以下的 Nano-X 程式設計方法： ˙ 如何使用嵌入式圖片 ˙ 如何將圖片顯示於視窗上 由檔案讀取圖片檔並顯示顯示圖片是一般常見的做法，這裡我們所要實作的範例是希望可以將圖片直接嵌入程式裡，而不是由外部檔案讀取。 如何使用嵌入式圖片 要將圖片嵌入於程式裡，首先必須將圖片轉換成數值資料形式的 C 程式。Nano-X 提供一個檔名為 convbmp 的工具來將 BMP 格式的圖片轉換成 C 程式。 convbmp工具的原始程式位於 src/mwin/bmp/convbmp.c，這是提供給 Microwindows API 使用者的工具，因此我們在設定 Nano-X 編譯選項時，除了勾選 Nano-X API 外，還要勾選 Microwindows API 選項才能產生 convbmp 執行檔。編譯後可以在...</description>
         <link>http://www.jollen.org/blog/2007/01/nano-x_programming_3.html</link>
         <guid>http://www.jollen.org/blog/2007/01/nano-x_programming_3.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sat, 13 Jan 2007 20:41:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Process Creation, #4：sys_fork《核心實作》</title>
         <description>接續前一記日記的觀念：「Linux 以 sys_fork 或 sys_clone 來產生新的 process，而這二個 system call 最後都會呼叫到 do_fork() 函數，do_fork() 是 Linux 主要的 fork-routine。」 將此觀念以實作角度來說明的話，do_fork() 必須要做的工作便是「copy 原來的 process 成為另一個新的 process」。Linux 的 sys_fork() 內部實作就是以「copy process」的方式來實作。也就是說，當 user program 呼叫 fork() wrapper function 後，sys_fork() 便會「copy」原來的 process，以得到一個新的 process。 由此觀念的推導，我們便能了解到，sys_fork() 的內部實作關鍵便是： 1. 如何...</description>
         <link>http://www.jollen.org/blog/2007/01/process_creation_4_sys_fork.html</link>
         <guid>http://www.jollen.org/blog/2007/01/process_creation_4_sys_fork.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 11 Jan 2007 23:17:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>.bss section：C 語言所種下的因</title>
         <description>由於當初 C 語言標準提到「未初始化的全域變數（un-initialized global variables）其初始值為零（zero）」，所以得到的結果便是「程式執行時，必須將未初始化的全域變數都初始化成零」。 Linux 針對這種狀況的解決方式是「配置 zeroed pages 給 .bss section」，因此 un-initialized global variables 的值（value）便會為零。 註：Un-initialized global variables 會被編譯器放到 .bss section，可參考 Jollen 的「BSS Section 觀念教學」專欄。 此外，global variable 被初始化為零時，也會被 GCC 放到 .bss section 裡。所以，以下的寫法： int foo; main() { ... }...</description>
         <link>http://www.jollen.org/blog/2007/01/no-zero-initialized-in-bss.html</link>
         <guid>http://www.jollen.org/blog/2007/01/no-zero-initialized-in-bss.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 10 Jan 2007 22:44:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Truncate It」小技倆的原始碼與原理</title>
         <description>先前提到的「一個防止程式被玩耍的小技倆」中，Jollen 提供了一個稱為「Truncate It」的小工具，我把他的原始碼放在此處「http://tw.jollen.org/elf-programming/truncate_it.tar.bz2」，有興趣的朋友可下載回家把玩。 用法請參考前一則日記的介紹，另外，「Truncate It」只是一個「呈現概念的原型」，並未良好的 coding，除了結果是輸出到 stdout 外，現階段也只能處理 IA32 的 ELF image。 Truncate It 的原理 Truncate It 的原理相當簡單，我只是把「Section Header Table」等資訊由 ELF image 中移除，因此「標準工具」便無法處理 ELF image；這是由於 GNU binutils 的工具都是以 linking view 來解讀 ELF image 之故，若要正常反組譯「truncated ELF image」，就要以 execution view 的角度來解讀執行檔。 此外，Section...</description>
         <link>http://www.jollen.org/blog/2007/01/truncate_it_tricky_source.html</link>
         <guid>http://www.jollen.org/blog/2007/01/truncate_it_tricky_source.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Tue, 09 Jan 2007 23:41:47 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Qt Centre Programming Contest 2007：與一些自己的小想法</title>
         <description>Qt Centre（The Ultimate Qt Community）釋出一則消息：「Qt Centre Programming Contest 2007」。嘿，Qt Centre 也和幾個 partners（這裡面當然有 Trolltech）辦起 Qt4 的程式設計比賽了。 社群手法 先前曾提到的「Embedded Linux 2006 十大回顧！」都是很「具體」的事件，不過若大環境來看，絕對可以加上一條「開放源碼的社群經營手法在 2006 年展現氣勢。」大家可以思考 Linux mobile 的爆炸性成長過程，與其策略手法，甚致是 IBM 的幾個 case study，便能了解「社群手法」的重要性。 因為形成了這樣的 ecosystem，因此更能促進 open source 運動的發展，這絕對是好事一樁，。 回歸正題 2007 年的開放源碼世界，除了「Linux mobile」會持續躍進外，「community」的經營手法當然也會是本年度的重點戲。 每次看到一些消息，腦筋都不免會跳脫常軌，出現一些奇怪的聯想。還是回到主題來吧。Qt4 的比賽當然不會是一個「解題（problem...</description>
         <link>http://www.jollen.org/blog/2007/01/qt_centre_programming_contest.html</link>
         <guid>http://www.jollen.org/blog/2007/01/qt_centre_programming_contest.html</guid>
         <category>其它</category>
         <pubDate>Mon, 08 Jan 2007 23:32:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Process Creation, #3：sys_fork《基本觀念》</title>
         <description>fork() 是「Process Creation」議題的重要里程碑：提到 system call 代表著我們的研究要正式進入 kernel space 的層面了。 值得附帶一提的是，sys_fork 是一個 machine-dependent 的 system call，以 i386 為例，其實作位於 linux/arch/i386/kernel/process.c。*1 Operating System 端的觀念 sys_fork 是非常重要的 system call，從作業系統的角度來解釋的話，這就是「建立 process」的主要 system call。當外部程式（即 ELF image）被使用者鍵入指令後，shell 便會呼叫 fork() 系統呼叫，並透過作業系統的 fork system call 來產生新的 process，以執行此外部程式。這種類型的 fork 也稱做...</description>
         <link>http://www.jollen.org/blog/2007/01/process_creation_3_sys_fork.html</link>
         <guid>http://www.jollen.org/blog/2007/01/process_creation_3_sys_fork.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 08 Jan 2007 13:44:14 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 的 Virtual Memory Areas（VMA）：基本概念介紹</title>
         <description><![CDATA[由 user process 角度來說明的話，VMA 是 user process 裡一段 virtual address space 區塊；virtual address space 是連續的記憶體空間，當然 VMA 也會是連續的空間。VMA 對 Linux 的主要好處是，可以記憶體的使用更有效率，並且更容易管理 user process address space。 從另一個觀念來看，VMA 可以讓 Linux kernel 以 process 的角度來管理 virtual address space。Process 的 VMA 對映，可以由 /proc/&lt;pid&gt;/maps 檔案查詢；例如 pid...]]></description>
         <link>http://www.jollen.org/blog/2007/01/linux_virtual_memory_areas_vma.html</link>
         <guid>http://www.jollen.org/blog/2007/01/linux_virtual_memory_areas_vma.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 05 Jan 2007 14:08:01 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>應用在 Embedded Linux 場合的 Busybox 有了 &quot;CONFIG_DESKTOP&quot;</title>
         <description>Busybox 於 2006-12-14 釋出 1.3.0（stable）版，並於 2006-12-27 釋出 1.3.1（stable）更新。不過，吸引我的並不是這個平凡的版本更新資訊，而是看到以下這段文字： This release has CONFIG_DESKTOP option which enables features needed for busybox usage on desktop machine. &apos;CONFIG_DESKTOP&apos; 的出現，讓原本是應用在 Embedded Linux 場合的 Busybox，也開始支援 Desktop Linux 的應用了。於是，我心裡浮現出以下的感想... Busybox 原先的設計理念是基於「簡化的系統工具」與「簡單化的指令集」，並朝 footprint 的目標而發展；當初由於 target device 硬體環境的貧乏（如 RAM...</description>
         <link>http://www.jollen.org/blog/2007/01/embedded_linux_busybox_desktop.html</link>
         <guid>http://www.jollen.org/blog/2007/01/embedded_linux_busybox_desktop.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 05 Jan 2007 00:05:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>一個防止程式被玩耍的小技倆</title>
         <description><![CDATA[今天在分享自己實作上的經驗時，聊到「如何防止程式被人家玩了！」。我們所要實現的想法很簡單，就是設法防止「執行檔」被 Linux 下的「標準程式工具」給把玩了！例如： 防止被 &quot;objdump&quot; 工具讀取 防止被 &quot;objdump –d&quot; 做反組譯 防止被 gdb 除錯 防止 symbol table 被 nm 讀出 防止被其它的標準程式工具（GNU bintuils，如 file 等）所操作 我分享了一個簡單的方法，這個方法在以往「Linux Systems Programming」的課或多或少也曾向同學介紹過；不過，大家要知道的是，這只是一個有趣的小東西，或者說是一個「小手段」，任何高手級的 Linux 玩家，大概只要不到一小時就能輕易 反擊這個做法。 實測 就拿 &quot;tar&quot; 指令來看，以下是正常的操作： # objdump -d /bin/tar /bin/tar: file format...]]></description>
         <link>http://www.jollen.org/blog/2007/01/truncate_it_tricky.html</link>
         <guid>http://www.jollen.org/blog/2007/01/truncate_it_tricky.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Thu, 04 Jan 2007 01:51:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Process Creation, #2：Running a &quot;User Process&quot;</title>
         <description>Process Creation 在討論「Process Creation」議題時，首先要了解的就是「Linux 的三種 Process」。同樣是「執行中的程式（process）」，但是依其「特性（design perspective）」區分的話，可以歸納為以下三種： idle process kernel threads user process 其中「user process」就是我們此系列日記所要介紹的對象。User process 是很單純的一種 process，簡單來說，以下二種「執行程式的方式」就是 user process： 在 shell 模式中輸入 Linux command 所執行的外部程式 由 init process 所執行的外部程式 那麼 user process 是怎麼執行的呢？嗯，先前我們提過的日記「Process Creation, #1：由 shell 執行外部程式《基本觀念與範例》」便介紹了這樣的觀念。 Process Creation：Running...</description>
         <link>http://www.jollen.org/blog/2007/01/process_creation_2.html</link>
         <guid>http://www.jollen.org/blog/2007/01/process_creation_2.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 02 Jan 2007 23:08:35 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>2007 開工了！</title>
         <description>新的 2007 年，「Jollen&apos;s Blog」也會把重點放在「Linux kernel」與「Linux device driver」；期待您的意見與指教。...</description>
         <link>http://www.jollen.org/blog/2007/01/2007_new_year.html</link>
         <guid>http://www.jollen.org/blog/2007/01/2007_new_year.html</guid>
         <category>其它</category>
         <pubDate>Mon, 01 Jan 2007 00:52:44 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Process Creation, #1：由 shell 執行外部程式《基本觀念與範例》</title>
         <description>本系列專欄是「了解 ELF 動態時期行為」的前導專欄，建議您先行爬文「理解 dynamic loader 內部原理的幾個先備知識（下）：Kernel 端的議題」。 Shell 執行外部程式的觀念 在 2006 年的最後一天，就先來解說一下「下指令後、程式怎麼載入與執行」的觀念。首先，您必須知道並具備以下的 Linux 系統程式觀念： 1. fork() 系統呼叫：用來建立 child process。 2. exec 系列系統呼叫：以一個「外部程式」來取代自己（current process）的執行空間。 3. parent process、child process 與 Linux process tree。 了解以上三個主題後，就可以很容易理解「下指令後、程式怎麼載入與執行」的過程；這是很重要且基本的三個議題，若您不是很清楚這三個議題的觀念，可以查詢「Linux Systems Programming」的相關文件。 接下來，首先我們要知道的是，Linux 並沒有提供 &quot;spawn&quot; 的 system call；再來，shell...</description>
         <link>http://www.jollen.org/blog/2006/12/process_creation_1_shell.html</link>
         <guid>http://www.jollen.org/blog/2006/12/process_creation_1_shell.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 31 Dec 2006 20:14:16 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>理解 dynamic loader 內部原理的幾個先備知識（下）：Kernel 端的議題</title>
         <description>前些日子寫到「理解 dynamic loader 內部原理的幾個先備知識（上）」時提及，必須略懂 .bss section 的觀念，並且最後也提到「之後再寫日記，以一段 code 來說明。」。其實之後幾天我就把介紹 .bss section 觀念的日記寫好了，只是還沒有加入到專欄索引，趕快來把索引做好！ 今天加入「BSS Section Concepts: .bss section 的基本觀念介紹」的專欄索引。 以下是必讀的二個專欄（及理由）： 1. 必須先懂 ELF 到底是什麼東西，才會知道 .bss 是 ELF 的「一個節區」。可以參考 Jollen 的「 Executable and Linking Format: 重要的 ELF 格式介紹」專欄。 2. 接著才是讀「BSS Section Concepts:...</description>
         <link>http://www.jollen.org/blog/2006/12/enabling_dynamic_loader_2.html</link>
         <guid>http://www.jollen.org/blog/2006/12/enabling_dynamic_loader_2.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 29 Dec 2006 21:20:29 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>更新 uClinux-dist 的教學專欄</title>
         <description>uClinux 的 distribution 稱為 uClinux-dist，今天把 uClinux-dist 使用的教學專欄做了小小修正與整理，並提供給有需要的朋友。此系列教學專欄共有 5 篇文章，如下： 2004.02.26: uClinux-dist 使用教學, #1：uClinux 與 uClinux-dist 介紹 2004.02.26: uClinux-dist 使用教學, #2：安裝 uClinux 的 GNU ARM toolchain 2004.02.26: uClinux-dist 使用教學, #3：uClinux-dist 的使用 2004.02.26: uClinux-dist 使用教學, #4：編譯 uClinux-dist 與常見問題 2004.02.26: uClinux-dist 使用教學, #5：使用...</description>
         <link>http://www.jollen.org/blog/2006/12/update_uclinux-dist.html</link>
         <guid>http://www.jollen.org/blog/2006/12/update_uclinux-dist.html</guid>
         <category>其它</category>
         <pubDate>Wed, 27 Dec 2006 14:17:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>（非關 Embedded Linux）Google Trends 反應人心！</title>
         <description>（非關 Embedded Linux）今天晚上跟小弟弟提到「Google Trends」可以用來幫助我們了解「關鍵字的搜尋趨勢」，結果丁小弟寄了以下二張圖片給我。 好一個「罄竹難書」。...</description>
         <link>http://www.jollen.org/blog/2006/12/google_trends.html</link>
         <guid>http://www.jollen.org/blog/2006/12/google_trends.html</guid>
         <category>其它</category>
         <pubDate>Wed, 27 Dec 2006 01:51:56 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 I/O, #3: kernel-space 與 user-space 的「I/O」</title>
         <description>重要觀念 任何作業系統底下的「驅動程式」，都需要分二個層面來討論所謂的「I/O 處理」： 1. 實體層：驅動程式 v.s. 硬體。 2. 虛擬層：驅動程式 v.s. user process 在前一篇日記「Linux 驅動程式的 I/O, #2: I/O 存取相關函數」中所提到的 I/O 函數是處理「實體層」的 I/O；本日記所要介紹的 copy_to_user() 與 copy_from_user() 則是在處理「虛擬層」的 I/O。另外，在繼續往下讀之前，您必須了解以下的觀念都是「等價」的： 1. 驅動程式與 user process 的 I/O；等於 2. 驅動程式與 user process 間的 data communication；等於 3....</description>
         <link>http://www.jollen.org/blog/2006/12/linux_device_driver_io_3.html</link>
         <guid>http://www.jollen.org/blog/2006/12/linux_device_driver_io_3.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 26 Dec 2006 23:40:04 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 2006 十大回顧！</title>
         <description>LinuxDevices.com 推出「Embedded Linux 2006 十大回顧」！內容提到今年 10 個主要的 embedded Linux 發展趨勢（以下是簡要翻譯，請閱讀原文有很完整的說明）： 1. Linux 也有自己的手機囉！ 2. 許多廠商開始提供完整（&quot;complete&quot;）的 mobile phone software stacks 了，參賽者有 Trolltech, a la Mobile, Cellunite, Aplix, Access！（Jollen 編註：事實上 2006 年出現在地球上的 mobile phone software stack（application framework）不只於此） 3. 關鍵性的 embedded Linux 開發工具！（Jollen...</description>
         <link>http://www.jollen.org/blog/2006/12/embedded_linux_2006.html</link>
         <guid>http://www.jollen.org/blog/2006/12/embedded_linux_2006.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 25 Dec 2006 21:05:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Hiker：另一個 GTK+ based 的 Linux mobile phone application framework</title>
         <description>本年度與明年度的既定工作之一是「survey of application framework for Linux mobile phones」以及「what are they target」。今天是歡樂的 Christmas，不過是要工作的一天；去年與前年的耶誕節正好遇到假日都是放假。但是也有許多公司今天很人性化的放了一天假，結果就在閒逛網站時，又瞄到一則新聞「Framework aims to commercialize mobile Linux apps」。 如果我的國文造詣還可以的話，以「雨後春筍」來形容「Linux application framework for mobile devices」應該是挺合適的；今年（２００６）如果要寫 Linux 年度大事記的話，這個主題絕對是前 10 名的。 本週是２００６年最後一週，也是為２００７年做準備的最後一週，輕鬆一下也是不錯的。 回歸正題 另一個以 GTK+ 為基礎的 Linux mobile devices 的「application framework」也釋出了，這個 application framework...</description>
         <link>http://www.jollen.org/blog/2006/12/hiker_application_framework_linux_mobile.html</link>
         <guid>http://www.jollen.org/blog/2006/12/hiker_application_framework_linux_mobile.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 25 Dec 2006 20:28:34 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Merry Christmas 2007 祝各位佳節愉快！</title>
         <description> Merry Christmas and Happy New Year 2007! 　 　 祝 jollen.org 的所有朋友耶誕佳節愉快。 --jollen...</description>
         <link>http://www.jollen.org/blog/2006/12/chirstmas_2007_merry.html</link>
         <guid>http://www.jollen.org/blog/2006/12/chirstmas_2007_merry.html</guid>
         <category>其它</category>
         <pubDate>Fri, 22 Dec 2006 23:57:33 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>non-GPL 授權的 Linux kernel module 要禁用？</title>
         <description>non-GPL 授權的 Linux kernel module 是否在 2008 年的一月份起開始禁止！？ 「SEJeff」在 OSNews.com 上寫了一篇 Blog，內容提到「non-GPL Linux kernel modules will not work after January 2008」，結果更可怕的是截至目前（本日記出版時）為止，已經有 27x 篇的「comments」在討論這個話題。 Comments 裡頭各式各樣的延伸看法都有，大家可以去瞧瞧。...</description>
         <link>http://www.jollen.org/blog/2006/12/non-gpl_linux_kernel_module.html</link>
         <guid>http://www.jollen.org/blog/2006/12/non-gpl_linux_kernel_module.html</guid>
         <category>其它</category>
         <pubDate>Thu, 21 Dec 2006 23:47:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 的 SDIO Stack 也有 open-source 的版本了！</title>
         <description>SDIO 是走 SD 插糟的週邊介面，SDIO 也是普及於 PDA/Mobile 的週邊規格，實際應用例如：透過 SDIO（SD 插糟），可以外接許多 SDIO 的週邊卡，像是 SDIO WiFi card 或是 SDIO CMOS sensor。Linux 從 2.6.17 開始正式加入了 SD/MMC 的 stack driver（也就是 API core 層），但是並沒有 SDIO 的 stack driver。 因此，「玩家」可以試著由現有的 SD/MMC stack 做修改，並實作 machine-dependent 的驅動程式（例如：s3c24x0）。或是花錢買解決方案，例如：MontaVista、印度的 embWise 公司。...</description>
         <link>http://www.jollen.org/blog/2006/12/linux_sdio_stack_open_source.html</link>
         <guid>http://www.jollen.org/blog/2006/12/linux_sdio_stack_open_source.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 21 Dec 2006 17:09:23 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 I/O, #2: I/O 存取相關函數</title>
         <description>I/O 存取相關函數 要提到「I/O 處理」當然要整理 Linux 提供的相關函數，以下分 3 大類來整理： 1. I/O port 2. I/O memory 3. PCI configuration space 4. ioremap I/O Port 以下是 Linux 提供最原始的 I/O port 存取函數： ˙ unsigned inb(unsigned port); ˙ unsigned inw(unsigned port); ˙ unsigned inl(unsigned port);...</description>
         <link>http://www.jollen.org/blog/2006/12/linux_device_driver_io2.html</link>
         <guid>http://www.jollen.org/blog/2006/12/linux_device_driver_io2.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 20 Dec 2006 22:57:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>用 SIMH 的 PDP-11 模擬器跑 2.11BSD</title>
         <description>為了能看到 2.11BSD on PDP-11 跑起來的樣子，所以要找一個簡單的方法先讓東西跑起來。由 tuhs 上 mirror 回來的一堆東西裡，找到 PDP-11/Boot_Images/2.11_on_Simh/211bsd.tar.gz 這個檔案，直接取用這個檔案，把它解開後發現裡頭有這麼多東西： 這裡頭的檔案是給 SIMH 模擬器用的，也就是「Bob Supnik&apos;s PDP simulator」。我用的是 SIMH V3.6-1，以下是編譯後得到的一堆古董機模擬器： 我把 211bsd.tar.gz 解在這個目錄下。接著用 PDP-11 的模擬器來開機： $ ../pdp11 ./211bsd.simh 結果跑出這個畫面： 一時之間不曉得發生什麼事，結果按了個 [Enter] 後： 接下來，大家應該會做跟我一樣的動作： 還蠻酷的。...</description>
         <link>http://www.jollen.org/blog/2006/12/simh_pdp-11_211bsd.html</link>
         <guid>http://www.jollen.org/blog/2006/12/simh_pdp-11_211bsd.html</guid>
         <category>其它</category>
         <pubDate>Wed, 20 Dec 2006 18:16:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>The Unix Heritage Society（古老的 UNIX）與 PDP-11 模擬器</title>
         <description>有時候換個心境來「考古」一下，比學習新技術更有樂趣。 The Unix Heritage Society 「The Unix Heritage Society（tuhs）」保留了很久以前的 UNIX 系統，引述 tuhs 網站上的一句話： The preservation and maintenance of historical and non-mainstream UNIX systems. tuhs 也提供 rsync 服務，所以我就把上面的檔案都抓回來了！根據 tuhs 網站上的說明，我下的 rsync 命令如下： rsync -avz minnie.tuhs.org::UA_Root . rsync -avz minnie.tuhs.org::UA_Applications Applications rsync...</description>
         <link>http://www.jollen.org/blog/2006/12/the_unix_heritage_society_unix.html</link>
         <guid>http://www.jollen.org/blog/2006/12/the_unix_heritage_society_unix.html</guid>
         <category>其它</category>
         <pubDate>Wed, 20 Dec 2006 16:07:40 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>使用 genext2fs 的 &apos;-D&apos;（device file table）來建立 root filesystem</title>
         <description>本文只適合「Embedded Linux / x86: 基礎能力與系統管理」的學員、對 root filesystem 建立有基本概念的朋友，或是「Embedded Linux 嵌入式系統實作演練, 2e」的讀者。 本日記介紹更方便的 nano-X 專案建立方式，以下做法使用的 shell script 並「不是」Jollen 原創，而是 Jollen 的恩師「Joe」貼心提供給學員使用的。目前 Joe 老師在大學主持嵌入式 Linux 實驗室，上過 Joe 老師課的同學仍然可以寫 email 跟他請教問題。 步驟 1. 利用 gennanox 來產生主要的目錄（骨幹）： # sh ./gennanox generating fstab generating group...</description>
         <link>http://www.jollen.org/blog/2006/12/genext2fs_device_file_table.html</link>
         <guid>http://www.jollen.org/blog/2006/12/genext2fs_device_file_table.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 19 Dec 2006 18:50:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>簡易的 initramfs 製作方式</title>
         <description>Linus 本人在 Linux 2.6 時代所提出的 &quot;initramfs&quot; 是一種更好的 &quot;root=&quot; 做法。在這裡先不對 initramfs 做詳細介紹與原由說明，不過，簡單來說，initramfs 就是「kernel 2.6 的 initrd」。Initrd（initial ramdisk）即 /dev/ram0，是一種普遍使用在 embedded Linux 的觀念；embedded Linux 利用 initrd 來載入 root filesystem（或是 bootstrap root filesystem 後再以 NFS 掛進完整 RFS）。 本日記介紹製作 Linux 2.6 的 initramfs 簡易方法。假設 RFS...</description>
         <link>http://www.jollen.org/blog/2006/12/root_filesystem_initramfs.html</link>
         <guid>http://www.jollen.org/blog/2006/12/root_filesystem_initramfs.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 19 Dec 2006 01:10:53 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>bss section 的觀念：執行時期的結構說明</title>
         <description>目前已經了解到：.bss section 在 linking view 時是不佔檔案長度的，在 execution view 時，根據其長度來佔用記憶體大小。 關於 .bss section 的結構，其實一張圖就夠了。直接切入重點吧！ 前言 先重新編譯 bss.c 範例： # gcc -g -o bss bss.c # ./bss .bss section starts at 0x8049588 foo is 0. foo is 12345. .bss section starts at...</description>
         <link>http://www.jollen.org/blog/2006/12/bss_section_3.html</link>
         <guid>http://www.jollen.org/blog/2006/12/bss_section_3.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 17 Dec 2006 22:02:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>.bss section 的觀念：執行時期的長度</title>
         <description>在「理解 dynamic loader 內部原理的幾個先備知識（一）」講到：.bss 節區「linking view」上不佔檔案空間。這點可以用 readelf 來做 ELF linking view 端的印證： # readelf -e bss|more (bss 是我們的範例執行檔) ... Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0...</description>
         <link>http://www.jollen.org/blog/2006/12/bss_section_2.html</link>
         <guid>http://www.jollen.org/blog/2006/12/bss_section_2.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 15 Dec 2006 02:02:28 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>.bss section 的觀念：uninitialized data section</title>
         <description><![CDATA[.bss 節區存放「uninitialized data」，由程式碼的角度來看，就是「未初始化的變數」。我們直接以一段 code 來說明，讓大家更清楚這樣的概念。 #include &lt;stdio.h&gt; int foo; int bar; int main(void) { int *ptr; printf(".bss section starts at %08p\n", &foo); printf("foo is %d.\n", foo); ptr = &foo; *ptr = 12345; printf("foo is %d.\n", foo); printf(".bss section starts at...]]></description>
         <link>http://www.jollen.org/blog/2006/12/bss_section_uninitialized_data.html</link>
         <guid>http://www.jollen.org/blog/2006/12/bss_section_uninitialized_data.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 15 Dec 2006 01:11:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>理解 dynamic loader 內部原理的幾個先備知識（上）：ELF 端的議題</title>
         <description><![CDATA[接下來，即將啟動 ELF 格式的「execution view」介紹。本日記是進入「dynamic loader」前的準備工作「之一」。 果然是很大挑戰的研究。說明幾個注意事項如下。 必須了解 ELF 的格式觀念 「Executable and Linking Format」專欄已經把 ELF 格式的「linking view」做了初步的介紹，在此專欄裡，Jollen 針對 ELF 格式的概念以 loader v0.1~v0.5 共五個範例做說明。想要了解 ELF 格式的朋友，可以參考此專欄。 Section 的用途摘要說明 每個 section 都有不同的用途，在 SysV ABI 裡所定義的特殊 section 與其用途整理如下： Section 用途 .bss &nbsp;用來置放程式裡未初始化的資料（uninitialized data），當程式執行時預設會將這裡的資料初始化為0（zero）。 .comment...]]></description>
         <link>http://www.jollen.org/blog/2006/12/enabling_dynamic_loader_1.html</link>
         <guid>http://www.jollen.org/blog/2006/12/enabling_dynamic_loader_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 14 Dec 2006 23:39:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.20 將正式加入 KVM 驅動程式</title>
         <description>方才在 slashdot 上撇見「It looks like the newest version of the Linux kernel (2.6.20) will include KVM, the relatively new virtualization environment.」這篇 blog，kernel 2.6.20 已正式加入了 KVM 驅動程式，這也宣告 Linux 已經正式踏入「虛擬化（virtualization）」這個熱門的伺服器技術領域了。 Linux 的 kernel-space 虛擬機器驅動程式稱為「KVM」，KVM 於今年的 10 月 19 日首次正式發佈於 linux-kernel mailing list，並且於...</description>
         <link>http://www.jollen.org/blog/2006/12/kvm_driver_coming.html</link>
         <guid>http://www.jollen.org/blog/2006/12/kvm_driver_coming.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 12 Dec 2006 22:10:05 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 驅動程式的 I/O, #1: 基本概念</title>
         <description><![CDATA[由本篇日記開始，我們將進行「Linux Device Driver 入門：I/O 處理」的議題討論。這裡所提的 I/O 處理定義是：user process 與 physical device 的 I/O 存取。 在讀「Linux Device Driver 入門：I/O 處理」專欄前，您必須熟悉 Linux 驅動程式的架構，因此「Linux Device Driver 入門：架構層」的專欄是 Jollen's Linux Device Driver 系列專欄的先備知識；此外，接下來的專欄使用的語法也必須對架構層有基本認識後才能看得懂。 Linux 驅動程式 I/O 機制 Linux device driver 處理 I/O 的「基本款」是： fops-&gt;ioctl...]]></description>
         <link>http://www.jollen.org/blog/2006/12/inux_device_driver_io_1.html</link>
         <guid>http://www.jollen.org/blog/2006/12/inux_device_driver_io_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 12 Dec 2006 12:02:30 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>LPIC-3 即將登場</title>
         <description>幾天前 LPI（Linux Professional Institute） 修改了認證規定，自至再也沒有所謂的終生有效的 LPIC 證照了。前幾天 LPI 又發佈消息指出，明年一月將會開始發動 LPI 的最頂級認證「LPIC-3」。LPIC-3 的認證也籌畫好幾年了，終於在今天看到這則另人感動的消息。 由於 LPIC-3 是針對大型企業應用與 IT 專家、顧問等級的認證考試，能取得 LPIC-3 這種級數的認證，會是一種技術能力上的肯定；不過，LPIC-3 必須具備「有效」的 LPIC-1 與 LPIC-2 才能報考，所以尚未取得前二級的認證，或是證照過期的朋友，可要先做一下準備功課了。 原文報導在此：http://www.linux-watch.com/news/NS8820915301.html...</description>
         <link>http://www.jollen.org/blog/2006/12/lpic3.html</link>
         <guid>http://www.jollen.org/blog/2006/12/lpic3.html</guid>
         <category>其它</category>
         <pubDate>Mon, 11 Dec 2006 23:22:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.19 正式支援 Atmel AVR32 架構</title>
         <description>Linux 2.6.19 正式加入了 Atmel AVR32 architecture 的支援，這是由 Atmel 原廠所實作的 architecture-level porting。引用一段節錄至 KernelNewbies.org 的 changelog wiki 上的說明： AVR32 is a new high-performance 32-bit RISC microprocessor core, designed for cost-sensitive embedded applications, with particular emphasis on low power consumption and high code...</description>
         <link>http://www.jollen.org/blog/2006/12/avr32_linux.html</link>
         <guid>http://www.jollen.org/blog/2006/12/avr32_linux.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 09 Dec 2006 18:28:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>新書入荷：Embedded Linux Primer</title>
         <description>這本書在網路上「打書」打了很久，昨天跑去天瓏站著翻閱約一分鐘後就把它帶回來了。原因是這是一本對於 embedded Linux 的 domain issues 整理的很不錯的書，並且也具備優質原文書的特點，也就是對於概念與觀念的「文字陳述」都能不廢話的切入核心（有時看英文才能挑起一些 sense ）。這就是為什麼一定要閱讀原文書的原因。 這本書沒有 step-by-step 的教學，也沒有類似「指令介紹」的條列說明。對於已經有「片斷實作經驗」的讀者來說，閱讀此書能快速得到「完整的領域知識」；會以「快速」來形容是因為這本書需要一些片斷的實作經驗，才能比較容易理解章節的關係與內文佈署，但是我特別喜歡這種風格的寫作，主要原因是能無痛且快速瀏覽完整的相關議題。 同時，這本書也能讓想學習 embedded Linux 的讀者清楚了解到 embedded Linux 所涉及的層面到底有多廣。...</description>
         <link>http://www.jollen.org/blog/2006/12/got_embedded_linux_primer.html</link>
         <guid>http://www.jollen.org/blog/2006/12/got_embedded_linux_primer.html</guid>
         <category>其它</category>
         <pubDate>Thu, 07 Dec 2006 15:11:58 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>我要怎麼知道 kernel 更新了什麼東西？</title>
         <description>這是一個時常被問到的問題，由於 kernel 的變動快速，因此 Jollen 在日前便寫了一篇「讓 kernel 常在我心：探討如何與 kernel 的發展同步」的日記，內容是大略介紹如何與 kernel 的發展同步（day-by-day）。 但是，如果並不是很需要每天去注意 kernel 的動態的話，只要在每個 kernel 穩定版（stable）釋出後去看 Changlog 就好了。特別是 kernel 2.6.1x 的更新項目（update）、臭蟲修正（big fix）、新的驅動程式與 filesystem 更是以可怕的「量」在 patch，特別是最近半年的 3 個 kernel 版本（2.6.17~19），變化量真是到了油門全開的狀態，所以每天看 kernel 會是沈重的負擔。 話說回來，改變是好事。期待的是，看著這麼多的改變與越來越多的新驅動程式加入，以及企業級（enterprise-class）功能的成熟，我們已經可以拿到越來越棒的「成熟」kernel 了。誠如 Linus 在 2.6.19 stable 釋出時的玩笑話「It&apos;s one of...</description>
         <link>http://www.jollen.org/blog/2006/12/linux_kernel_changelog_howto.html</link>
         <guid>http://www.jollen.org/blog/2006/12/linux_kernel_changelog_howto.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 06 Dec 2006 22:15:54 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>MIT Programming Tricks：HAKMEM</title>
         <description>今天在「苦牢之最後一年」的 blog 裡看到這篇：「開根號倒數 (InvSqrt(), 1 / sqrt(x)) 速算法」，標題讓我大感興趣，原來是一篇 slashdot 上的新聞，他們在找「開根號倒數」這個利害技巧的原作者，詳細介紹可看苦牢兄的 blog。Slashdot 的新聞所提到的「找人」過程在這裡：http://www.beyond3d.com/articles/fastinvsqrt/。 仔細閱讀的話發現還相當有趣，作者是誰最後仍然不可考，被點名的高手都說不是他幹的！不過最大的收獲是知道了一份「HAKMEM」的文件，這是在 60&apos;s 年代到 70&apos;s 年代初期，一群 MIT 的高手所記錄的程式寫作技巧（tricks）。 長久以來一直被「分層架構」與「抽象化設計」所教育著，便遺忘了這些原本才是「程式設計師」本質的數理應用，只能說 programmer 稱不上，充其量可能只是看文件寫 code 的 coding mahcine 吧。 另外，講到程式寫作技巧，就想到有趣的「解題」遊戲，又想到一位「冼鏡光」老師，冼老師的那本 C 名題精選著作是解題的必備好書。目前冼老師在 Michigan Technological University 教書，老師有個人首頁。...</description>
         <link>http://www.jollen.org/blog/2006/12/mit_programming_hakmem.html</link>
         <guid>http://www.jollen.org/blog/2006/12/mit_programming_hakmem.html</guid>
         <category>其它</category>
         <pubDate>Wed, 06 Dec 2006 20:48:02 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> ELF（Executable and Linking Format）格式教學文件, #8: loader v0.5 與結果輸出（改善與小討論）</title>
         <description>我們接續 loader v0.4 的工作，強化一下輸出結果的可讀性；先來比較一下 loader v0.4 與 loader v0.5 的輸出畫面。 $ ./loader-0.4 loader-0.4 $ ./loader-0.5 loader-0.4 ELF Identification Class: 32-bit objects Machine: Intel 80386 Num of secionts: 34 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text...</description>
         <link>http://www.jollen.org/blog/2006/12/_elfexecutable_and_linking_for.html</link>
         <guid>http://www.jollen.org/blog/2006/12/_elfexecutable_and_linking_for.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 06 Dec 2006 01:12:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #7: 讀 ELF 的 Section Name（透過 strtab）</title>
         <description><![CDATA[根據 SysV ABI 的定義，若 section 的類型為 SHT_STRTAB，則該 section entry 即為 string table 的 section header。Section 的類型可由 section header 的 sh_type 欄位來判斷，SysV ABI 定義的 section 類型（sh_type）如下表所示。 表 sh_type 欄位的定義 Name &nbsp;Value SHT_NULL &nbsp;0 SHT_PROGBITS &nbsp;1 SHT_SYMTAB &nbsp;2 SHT_STRTAB &nbsp;3 SHT_RELA &nbsp;4...]]></description>
         <link>http://www.jollen.org/blog/2006/12/elfexecutable_and_linking_form.html</link>
         <guid>http://www.jollen.org/blog/2006/12/elfexecutable_and_linking_form.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 04 Dec 2006 17:25:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #6: 讀 ELF Section（程式列表）</title>
         <description><![CDATA[範例列表：loader v0.3 /* * Copyright(c) 2003,2006 www.jollen.org * * ELF programming. ver 0.3 * */ #include &lt;stdio.h&gt; #include &lt;unistd.h&gt; #include &lt;elf.h&gt; #include &lt;fcntl.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; int elf_ident(char *ident) { if (*(ident+EI_MAG0) != ELFMAG0) return 0; if (*(ident+EI_MAG1) !=...]]></description>
         <link>http://www.jollen.org/blog/2006/12/executable_linking_format_elf_6.html</link>
         <guid>http://www.jollen.org/blog/2006/12/executable_linking_format_elf_6.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 04 Dec 2006 16:39:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>LPI 發佈新的 recertification 規定：未來 LPIC 證照將不再終生有效</title>
         <description>LPIC 證照要「重考」了，新的重新認證規章己經正式發佈了；由取得認證日起算，在二年後就要準備重新認證的程序。 LPI 會在取得認證二年後建議做重新認證（recertification）的動作，若要讓取得的 LPIC 認證有效（ACTIVE），就必須在五年內完成重新認證的工作。重新認證必須通過持有最高認證等級的所有最新考試，通過重新認證後，證書的狀態便會更新為 ACTIVE，有效期間為五年。 當取得較高等級的認證後，由取得較高等級之日起算，所有較低等級的認證狀態都會變更為 ACTIVE，期限一樣是五年。若沒有重新進行認證考試，並且讓認證失效的話，那麼就要重新取得所有認證，包含目前的最高等級與較低等級的認證。 LPI 由 2004 年 9 月 1 日開始，啟用了認證狀態資料庫，透過此資料庫能查詢證照的狀態（ACTIVE 或 INACTIVE），以往在此日期以前所取得的認證都被視為終生有效，不過在新的規章裡，LPI 將不再賦與該早期認證的終生有效權利。在 2004 年 9 月 1 日前取得認證的朋友，仍然要根據最新訂定的規章乖乖進行認證的工作。 因此，LPIC 認證將不再終生有效，原先的「終生版本」將由取得認證之日算起五年內有效。所以如果你的 LPIC 證照是在 2004 年 9 月 1 日之後取得的話，照這樣算來，就要在 2009 年 9 月...</description>
         <link>http://www.jollen.org/blog/2006/12/lpi_certification_lpic.html</link>
         <guid>http://www.jollen.org/blog/2006/12/lpi_certification_lpic.html</guid>
         <category>其它</category>
         <pubDate>Sun, 03 Dec 2006 23:09:26 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> System Call 專題討論, #6：unistd.h（x86）</title>
         <description>unistd.h 是一個重要的標頭檔，裡頭是 system call 編號的定義；另外，linux/arch/i386/kernel/entry.S 則是每一個 system call 的進入點，也就是 system call table（位於 .data section）。 unistd.h也定義了處理不同參數個數的 system call handler，在這個標頭檔裡可以看到處理 0~6個參數的 handler（_syscall0~_syscall6）。例如以下是處理 1 個參數的handler： #define _syscall1(type,name,type1,arg1) \ type name(type1 arg1) \ { \ long __res; \ __asm__ volatile (&quot;int $0x80&quot; \ :...</description>
         <link>http://www.jollen.org/blog/2006/12/system_call_6_unistd_h.html</link>
         <guid>http://www.jollen.org/blog/2006/12/system_call_6_unistd_h.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 01 Dec 2006 16:52:45 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title> System Call 專題討論, #5：0x80 軟體中斷</title>
         <description>System call 是透過中斷來呼叫，而在 x86 系統的架構中，32-255 是所謂的 maskable interrupts 即使用者定義的中斷。Linux 在 i386 上實作system call可透過以下 2 個機制： ˙ lcall7/lcall27（call gates，呼叫閘道） ˙ int 0x80（software interrupt．軟體中斷） Linux 應用程式使用 int 指令來觸發 0x80 號軟體中斷，其它作業系統像是 Solaris 的應用程式，則是使用 lcall7。在開機時，IDT是由arch/i386/kernel/traps.c:trap_init() 做初始化的設定： void __init trap_init(void) { #ifdef CONFIG_EISA if (isa_readl(0x0FFFD9)...</description>
         <link>http://www.jollen.org/blog/2006/12/system_call_5.html</link>
         <guid>http://www.jollen.org/blog/2006/12/system_call_5.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 01 Dec 2006 16:44:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>System Call 專題討論, #4：x86 的 Interrupt</title>
         <description>我們由之前的 hello.S 程式範例來做切入： movl $len,%edx movl $msg,%ecx movl $1,%ebx movl $4,%eax int $0x80 System call 編號 4（%eax = 4）為 sys_write 函數，其原型宣告如下： ssize_t sys_write(unsigned int fd, const char * buf, size_t count) 根據 sys_write 的參數宣告，我們必須傳遞參數如下： ˙ 第 1 個參數為 unsigned int...</description>
         <link>http://www.jollen.org/blog/2006/12/system_call_4.html</link>
         <guid>http://www.jollen.org/blog/2006/12/system_call_4.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 01 Dec 2006 16:36:58 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>System Call 專題討論, #3：使用 Assembly 呼叫 System Call（x86）</title>
         <description>Wrapper routine 透過 0x80 號中斷（軟體中斷）進入 kernel space，並且跳至 system call handler執行。由於透過軟體中斷即可達成呼叫 system call的目地，因此使用 assembly來寫程式時，我們也可以直接呼叫system call。 在產生軟體中斷前，我們必須告訴 Linux kernel 所要呼叫的 system call 編號，system call 的編號透過 %eax 暫存器來指定；若要傳遞參數，則是透過其它暫存器來傳遞。 參數傳遞與傳回值 Linux system call最多可傳遞6個參數，參數的傳遞是透過以下的暫存器來完成： %ebx：第1個參數。 %ecx：第2個參數。 %edx：第3個參數。 %esi：第4個參數。 %edi：第5個參數。 %ebp：第6個參數（做臨時用途）。 System call 的編號由 %eax 暫存器指定。System...</description>
         <link>http://www.jollen.org/blog/2006/12/system_call_3_assembly_system.html</link>
         <guid>http://www.jollen.org/blog/2006/12/system_call_3_assembly_system.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 01 Dec 2006 16:30:40 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>System Call 專題討論, #2：使用 C 語言呼叫 System Call</title>
         <description>在 Linux system 底下，必須透過 GLIBC 裡的 system call function 來取得 kernel 的 system call 服務。 由 GLIBC 提供用來呼叫 system call 的函數稱為 wrapper function，wrapper function會呼叫 Linux kernel的handler routine，即 system_call() 函數。 呼叫 getpid() system call 的範例： #include #include #include int main() {...</description>
         <link>http://www.jollen.org/blog/2006/12/system_call_2.html</link>
         <guid>http://www.jollen.org/blog/2006/12/system_call_2.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 01 Dec 2006 16:24:50 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>System Call 專題討論, #1：什麼是System Call</title>
         <description>System call 是 process 與作業系統之間的介面。System call 是由 Linux kernel 所實作並提供給使用者，user-space program 可透過 system call 與Linux kernel 溝通。以 C 語言來呼叫 system call 的話，則是透過 GLIBC（libc）來間接呼叫。 GLIBC 提供呼叫 system call 的介面稱為 wrapper routine，wrapper routine 會叫起 Linux 的 system call handler，最後再由 system call handler...</description>
         <link>http://www.jollen.org/blog/2006/12/system_call_1.html</link>
         <guid>http://www.jollen.org/blog/2006/12/system_call_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 01 Dec 2006 16:10:04 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>TimeSys 十二月份的 Webinar</title>
         <description>TimeSys 是一家「供應現成 RFS」的服務公司，他們每個月都會有幾場 Webinars 的活動，本月份（１２月份）的 Webinars 一共三場： 1. Linux Boot-Up：了解由 bootloader 開機到 user-space 模式，並執行 user program 的過程。 2. Hello World, from an Embedded Perspective：怎麼把 &quot;Hello World&quot; 做 cross compilation 後放到 RFS。 3. Survey of Linux Filesystems：介紹 embedded system 使用的 filesystem，以及建立...</description>
         <link>http://www.jollen.org/blog/2006/12/timesys_webinar.html</link>
         <guid>http://www.jollen.org/blog/2006/12/timesys_webinar.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 01 Dec 2006 15:48:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>PReP / CHRP / OpenFirmware</title>
         <description>最近有些朋友在問 PReP / CHRP / OpenFirmware 的關係，老實說這真的有點混亂，特別是 PReP / CHRP 是歷史所留下的遺跡，所以就用最簡潔的方式大概說明一下吧。 PReP（PowerPC Reference Platform）是最早的 PowerPC reference design，PReP 規格並沒有風行，原因是 IBM 是以「一言堂」的模式來制定這項規格。PReP 之後則是 CHRP（Common Hardware Reference Platform）的第二代 PowerPC reference design 規格，CHRP reference design 制定了作業系統支援的規格。CHRP 的另外一個重要內容則是定義 OpenFirmware 的標準。 OpenFirmware（也稱為 OpenBoot）的角色等於 PC 的 BIOS，也就是開機時期的軟體。OpenFirmware...</description>
         <link>http://www.jollen.org/blog/2006/11/prep_chrp_openfirmware.html</link>
         <guid>http://www.jollen.org/blog/2006/11/prep_chrp_openfirmware.html</guid>
         <category>U-Boot , ARM9 and Pre-OS 相關</category>
         <pubDate>Wed, 29 Nov 2006 15:57:57 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Debian ARM 爆起：思考社群發展模式的關鍵二個因素</title>
         <description>Debian ARM 已成為 Debian 數十種平臺的 distribution 中的第三大。由 Debian 的 popularity-contest 統計資料來看，Debian ARM 已經超越 PowerPC 成為第三大的 Debian 架構分支。詳細報導在此。 讓 Debian ARM 成為第三熱門的 Debian 版本的功臣就是今年大大有名的 NSLU2 計畫，如果您還不曉得 NSLU2 的名號，可以到NSLU2 的官方網站瞧瞧。當初 NSLU2 計畫發起時，便立下這樣的志願（節錄自 LinuxDevices.com 的報導）： to have the Linksys NSLU2 become a fully...</description>
         <link>http://www.jollen.org/blog/2006/11/debian_arm_nslu2_community.html</link>
         <guid>http://www.jollen.org/blog/2006/11/debian_arm_nslu2_community.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 29 Nov 2006 09:18:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #5: 讀 ELF Section（說明）</title>
         <description>今天的內容「讀取 ELF section」是這系列 ELF 文章的重點戲。因為我們終於進入 ELF 的核心議題「節區的觀念」了。在 loader v0.5 以前的範例，都是屬於靜態的討論（linking view）；在 loader v0.6 開始的討論中，我們將會開始提到動態的執行行為（execution view）。 如何讀取 ELF Section 我們分 2 個步驟來讀取 ELF 的 section 資訊： 1. 如圖一，一開始先讀取 section header table 的資訊。section header table 是所有 section 的紀錄表格，所有的 section 都要透過 section header...</description>
         <link>http://www.jollen.org/blog/2006/11/elfexecutable_and_linking_form.html</link>
         <guid>http://www.jollen.org/blog/2006/11/elfexecutable_and_linking_form.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Tue, 28 Nov 2006 17:14:49 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 與王建民</title>
         <description><![CDATA[椅子坐太久除了手痛、腰酸與腳麻外，頭腦也會變的極度渾沌。所以在計畫讓屁股離開椅子前，就來看了一下「王建民」。有趣的是，我找了一下「王建民」跟「embedded linux」在 Google 的搜尋量比較，結果還挺有趣的。先來看一下「embedded linux」跟「wince」、「embedded system」關鍵字的搜尋關係： embedded linux&nbsp;&nbsp;&nbsp; wince&nbsp;&nbsp;&nbsp; embedded system&nbsp;&nbsp;&nbsp; 結果 embedded linux 跟 embedded system 的關係相當密切，幾乎是貼在一起走的。至於跟 wince 做比較的話，則是保持一定的差距，看起來跟幾年前相差不遠。 再來是「embedded linux」PK「王建民」： embedded linux 王建民&nbsp;&nbsp;&nbsp; 2005 年 Q1 以前，「王建民」幾乎是躺平的，大概只有 2004 Q3 亞洲盃時凸起來一下下。然後 2005 年 Q1 上大聯盟後是上市密月期，連拉數日長紅，接著到 2005 Q4 ~ 2005...]]></description>
         <link>http://www.jollen.org/blog/2006/11/embedded_linux_3.html</link>
         <guid>http://www.jollen.org/blog/2006/11/embedded_linux_3.html</guid>
         <category>其它</category>
         <pubDate>Tue, 28 Nov 2006 14:00:27 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #4: 第一個範例：loader v0.2（ELF Identification）</title>
         <description><![CDATA[ELF Identification ELF header 資料結構裡的 e_ident 欄位用來判斷檔案是否為ELF格式的欄位，e_ident 欄位是一個陣列資料結構，其長度由 SysV ABI所定義的常數 EI_NIDENT指定。 EI_NIDENT 的值為 16 代表 e_ident 欄位有 16 個元素，SysV ABI 定義了 8 個常數來索引 e_ident 陣列的元素。 表 e_ident[] 索引值定義 Name &nbsp;Value &nbsp;說明 EI_MAG0 &nbsp;0 &nbsp;ELF 識別字元 EI_MAG1 &nbsp;1 &nbsp;ELF 識別字元 EI_MAG2...]]></description>
         <link>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_4.html</link>
         <guid>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_4.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sun, 26 Nov 2006 12:27:02 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #3: 第一個範例：loader v0.1（讀 ELF 檔頭）</title>
         <description><![CDATA[ELF 的第一個範例：loader v0.1 ELF header 儲存執行檔的重要資訊，我們必須先知道如何讀取 ELF 檔案的檔頭資訊（header），才能處理個別節區（section）。在 GNU/Linux 系統下，程式可以直接引用 elf.h 標頭檔。完整的程式範例 loader-0.1.c 列表如下。 /* * Copyright (C) 2003 www.jollen.org * * ELF programming. ver 0.1 * */ #include &lt;stdio.h&gt; #include &lt;unistd.h&gt; #include &lt;elf.h&gt; #include &lt;fcntl.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt;...]]></description>
         <link>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_3.html</link>
         <guid>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_3.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Fri, 24 Nov 2006 00:06:02 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>我用來建立 Linux System Calls&apos; Table 的程式</title>
         <description>以 Perl 寫的簡單 script，可以用來產生 Linux 的系統呼叫表（system call&apos;s table）。雖然程式笨笨的，跑一次也要一段時間，不過還是幫了我許多忙。由於 Jollen 網站上的 Linux System Calls&apos; Table 並不會針對每個版本做更新，所以我就把我用的 Perl script 提供出來給大家自行使用。 不過，2.4/2.6 不同版本間的 system call 都是一樣的，除了注意是否有新增的 system call 外，也不會有什麼差別。而且，也不常看到 kernel 在新增 system call。 這個 Perl Script 的使用方法請參考檔案內的 README 說明。下載檔案 [lsct_gen-0.1.tar.bz2（10 KBytes）]。另外，這個 script 也會把...</description>
         <link>http://www.jollen.org/blog/2006/11/lsct_gen.html</link>
         <guid>http://www.jollen.org/blog/2006/11/lsct_gen.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Thu, 23 Nov 2006 19:12:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #2: ELF header 與範例規劃</title>
         <description>本文接續之前的日記「ELF（Executable and Linking Format）格式教學文件, #1: ELF 簡介」，在了解 ELF 的用途後，再來我們先由「ELF Header」的部份開始看起，我們的目標是寫一個可以將 ELF 執行檔裡所有 section 讀取出來的程式。未來將繼續朝 user-space 的 ELF 處理前進。 如果您是 Jollen 的讀者，或許曾經在書上讀到這個章節，本系統的內容與書上內容大致相仿，但仍有一些小差異，建議您可再讀一次。我希望能以其它的出版形式，將這些內容都與大家分享。 ELF header：檔頭格式 ELF 於 SysV ABI 標準中定義，其中 ELF header 的結構如下表： Field Description e_ident 用來辨別檔案是否為ELF，並包含一些machine independent 的資料。 e_type 檔案的類型 e_machine...</description>
         <link>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_2html.html</link>
         <guid>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_2html.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 22 Nov 2006 23:39:19 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>讓 kernel 常在我心：探討如何與 kernel 的發展同步</title>
         <description>從事 Embedded Linux（GNU/Linux systems on devices）工作的朋友，除了日常的讀書功課外，另外一個重要的工作就是「隨時注意 Linux kernel 的發展狀況」。要能與 Linux kernel 的發展同步，嚴格來說，已經是一件吃重的工作了，不過還是可以列出幾個基本的工作原則如下： 1. 每天閱讀 linux-kernel 郵遞論壇（mailing-list）的「標題」。 2. 隨時上 kernel.org 看看最新釋出的 kernel 版本（或留意 linux-kernel-announce mailing-list）。 3. 閱讀釋出版本的 Changelog。 4. 不要與 git 系統的距離太遠，定時看看 git 系統，保持一定的「短距離」。 Mailing List linux-kernel 上的 posts 每天的量大約在 200~350...</description>
         <link>http://www.jollen.org/blog/2006/11/reading_kernel_kernel_patch.html</link>
         <guid>http://www.jollen.org/blog/2006/11/reading_kernel_kernel_patch.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 20 Nov 2006 19:53:07 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ELF（Executable and Linking Format）格式教學文件, #1: ELF 簡介</title>
         <description>ELF（Executable and Linking Format）是 object file 的檔案格式，其主要結構是以 section（節區）為主，我們可以利用 GNU binutils 套件的 objdump 工具來列出執行檔的 section 與其內容。例如，我想把 ls 命令的 ELF section 列印出來： # objdump -x /bin/ls |more ... Idx Name Size VMA LMA File off Algn 0 .interp 00000013 08048114 08048114 00000114...</description>
         <link>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_1.html</link>
         <guid>http://www.jollen.org/blog/2006/11/executable_linking_format_elf_1.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Sun, 19 Nov 2006 22:12:09 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>MontaVista 推出 Dev Rock 5 嵌入式 Linux 開發工具之《殺手級 IDE 快快出現！》</title>
         <description>Embedded Linux 的開發工具一日千里，主意不錯而且發展速度快，顯現的是未來「bring Linux to devices」的工作將更快速（快但是不見得輕鬆），這也將會構成 embedded Linux 將來市佔率（使用 Linux 做為 device OS 解決方案的比率）能大幅並快速提升的要素之一：「快速平臺與軟硬解決方案」 （rapid prototyping platform and SW/HW solutions）。 由此可大膽推測，embedded Linux 後期的生態環境正在快速形成當中，或許再過 2~3 年，就會有殺手級的 embedded Linux 的開發工具（IDE）出現。倘若如此，developer 現在一個很重要的工作就是僅快去學習研究 embedded Linux 的基礎原理；未來才能善用工具，而不是只會用工具。 embedded Linux 的開發工具逐漸成形了，會這麼說是因為今天看到一則新聞： 「MontaVista launches Dev Rocket 5...</description>
         <link>http://www.jollen.org/blog/2006/11/montavista_dev_rock_5_linux_id.html</link>
         <guid>http://www.jollen.org/blog/2006/11/montavista_dev_rock_5_linux_id.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Thu, 16 Nov 2006 23:08:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>深入淺出 insmod, #1</title>
         <description>深入淺出 insmod, #1 作者／陳俊宏 http://www.jollen.org 這篇文章的目的是為了解釋 Linux 驅動程式課程中，經常被詢問的部份，我把這個地方以紅色來標示： struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t,...</description>
         <link>http://www.jollen.org/blog/2006/11/hello_world_insmod_1.html</link>
         <guid>http://www.jollen.org/blog/2006/11/hello_world_insmod_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 15 Nov 2006 20:52:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Sun Microsystem 釋出 GPLv2 Java 實作：與我的有感而發</title>
         <description>Sun Microsystems 在今天宣佈，將要以 GPLv2 釋出他的 Java 實作。 這二年可以看到非常多的廠商或是專案加入 open source community 的陣營，而 Sun 的 Java 實作超過 10 年的發展，過程真是非常的精采，最終也提出 GPLv2 的版本，有點小意外，但我想可能也不出大家所預期的可能結果。 Sun 的 Java 實作最終還是選擇以 GPLv2 釋出新版本，並且也不意外地引發「Is Java&apos;s move to GPL too late?」的討論。在這 10 幾年的精采發展過程中，Java 也曾回拒 open source 的想法與建議，最終仍然無法抵擋一個潮流與趨勢。 與其說 Sun...</description>
         <link>http://www.jollen.org/blog/2006/11/sun_microsystem_gplv2_java_1.html</link>
         <guid>http://www.jollen.org/blog/2006/11/sun_microsystem_gplv2_java_1.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 14 Nov 2006 21:07:05 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Novell 宣佈釋出 Mono 1.2：Linux 執行 .NET 程式的解決方案</title>
         <description>前幾天大家或許都看到 Microsoft/Novell 宣佈要作作開發 Linux 軟體的新聞了。就在 2 天前，Novell 在 Microsoft 的 TechEd Developers Conference &amp; Expo（Barcelona Spain）宣佈推出 Mono 1.2。 Mono 是一套可以讓 Linux 與 Unix 使用者執行 Microsoft .NET 程式的軟體，在 LinuxWatch 的報導中提出 1.2 版是一個重要的里程碑，節錄原始報導如下： Mono 1.2 enables Linux and Unix users to use...</description>
         <link>http://www.jollen.org/blog/2006/11/novell_mono_12linux_net.html</link>
         <guid>http://www.jollen.org/blog/2006/11/novell_mono_12linux_net.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 13 Nov 2006 00:04:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux Link TEch Show 的訪談：理查史都曼談 GPLv3</title>
         <description>我們知道前陣子、這陣子，有關 GPLv3 的議題真的是「有點火」熱。大家對 GPLv3 都有不同的看法與意見，甚致連 Linus 也都跑出來表示意見。 日前 Linux Link Tech Show 對理查史都曼（Richard Stallman）做了一場訪談，主題是談論有關 GPLv3 的修改目的。這場訪談是以聲音檔的方式提供下載，有 ogg 與 MP3 二種格式可取得。 找個時間一定要仔細聽聽這個訪談，畢竟 GPLv3 很可能會決定開放源碼解決方案的大未來。...</description>
         <link>http://www.jollen.org/blog/2006/11/linux_link_tech_show_gplv3.html</link>
         <guid>http://www.jollen.org/blog/2006/11/linux_link_tech_show_gplv3.html</guid>
         <category>其它</category>
         <pubDate>Sun, 12 Nov 2006 23:43:59 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Linux 核心分享包,#3: fork_init()《講義6》</title>
         <description><![CDATA[我們知道，在 start_kernel() 的開機過程中，會呼叫許多初始化核心的常式。其中 fork_init() 是用來初始化 kernel 的&quot;fork&quot; 環境的。&quot;fork()&quot; 是用來產生 child process 的 system call，當 parent process 想要執行外部程式時，會先 fork child process，接著 child process 再利用 exec system call 自己的空間取代為外部程式。 從講義第 5 頁開始，我們把問題做分割，找出與 Scheduling 有關的初始化流程來做研讀，因為我們想要以 Scheduling 做為深入 Linux kernel 的第一門課。 講解 fork_init() 1....]]></description>
         <link>http://www.jollen.org/blog/2006/11/jollen_linux_3_fork_init.html</link>
         <guid>http://www.jollen.org/blog/2006/11/jollen_linux_3_fork_init.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 09 Nov 2006 23:41:50 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>「Mobile 2.0 的思考」與第一隻採用 OpenMoko 的 Linux Smartphone</title>
         <description>這隻手機是由台灣的大眾電腦所開發（真是一個好消息），原始的報導在 LinuxDevices.com 上，詳情可點閱這篇文章「Cheap, hackable Linux smartphone due soon」。 Neo1973（代號：FIC-GTA001） 是「completely open, Linux-based, GPS-equipped, quad-band GSM/GPRS phone」，沒錯，這是一隻「PHS 手機」。預計上市的時間是今年（2006）的 12 月中，並在明年的 1 月份銷售。 Neo1973 採用 Samsung S3C2410 平臺，並且是第一隻採用「OpenMoko」平臺的 Linux 智慧型手機，此外，更採用「apt-get-lke」的 software manager。不管正著看還是反著看，都很符合 Linux 玩家的習慣（與期望）。 非常期待他的問世，到時一定要去帶一隻回家「hack hack」一番。 Sean Moss-Pultz（Neo1973 的 PM，大眾電腦），在 Amsterdam（阿姆斯特丹）所舉行的「Open Source...</description>
         <link>http://www.jollen.org/blog/2006/11/mobile_20_openmoko_linux_smart.html</link>
         <guid>http://www.jollen.org/blog/2006/11/mobile_20_openmoko_linux_smart.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Wed, 08 Nov 2006 20:37:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #7：（第157號系統服務）sys_sched_getscheduler</title>
         <description>「作業系統的排程器（scheduler）提供好幾種排程演算法，並在不同的應用場合，或是不同的 process 採取適合的排程策略（policy）。」 Linux 的 process descriptor 資料結構為 struct task_struct，我們最早開始談論與 process 有關的 system call 時，就看過這個用來描述 process 的資料結構。struct task_struct 裡頭的 policy 欄位便是用來描述該 process 的排程策略。 與排程有關的系統呼叫 整理與 scheduling 有關的幾個 system call 如下（可參考「Linux 2.6 的 System Call：12 大類」），另外 Jollen 也把到目前為止已介紹過的 system call 加上紅色註記。...</description>
         <link>http://www.jollen.org/blog/2006/11/linux_system_calls_forum_7157s.html</link>
         <guid>http://www.jollen.org/blog/2006/11/linux_system_calls_forum_7157s.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 05 Nov 2006 00:03:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>目前的「Linux System Calls&apos; Forum」與「Jollen 的 Linux 核心分享包」專欄進度報告。</title>
         <description>「Linux System Calls&apos; Forum」與「Jollen 的 Linux 核心分享包」是二個相互配合的專欄，因此相關的日記彼此之間是具備相依性與次序的。建議的閱讀順序是「依照日記的時間（即發佈順序）」來閱讀「Linux System Calls&apos; Forum」與「Jollen 的 Linux 核心分享包」。這是這二個系統日記的閱讀建議。 目前的狀況報告 對於 Linux system call 的討論，我們已經來到了 scheduler 的門口了，要深入了解 Linux scheduler 的設計原理與相關理論前，Jollen 還必須多做一點功課才行。到目前為止，我們所討論過的幾個 system call 如下。 跟上我們的腳步：請讀以下的文章，再看這篇日記！ 2006.10.11: Linux System Calls&apos; Forum, #1：(第20號系統服務) sys_getpid 2006.10.12: Linux System Calls&apos;...</description>
         <link>http://www.jollen.org/blog/2006/11/linux_system_calls_forumjollen.html</link>
         <guid>http://www.jollen.org/blog/2006/11/linux_system_calls_forumjollen.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 04 Nov 2006 21:34:02 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>KVM 驅動程式的 HOWTO</title>
         <description>之前提到過 Kernel 2.6 的 KVM 驅動程式現身了，今天看到 KVM 驅動程式的 HOWTO 已經上線了。KVM 的官方網站是：http://kvm.sourceforge.net/ 裡頭除了有 HOWTO 外，也有 mailing list 可以加入了。KVM 的驅動程式除了有 kernel-space 的 driver 外，也包含一個 user-space 的 library，以及給 QEMU 的 patch。...</description>
         <link>http://www.jollen.org/blog/2006/11/kvm_howto.html</link>
         <guid>http://www.jollen.org/blog/2006/11/kvm_howto.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 02 Nov 2006 22:03:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Preemptive Process Scheduling 的觀念</title>
         <description>先前我們在介紹 sys_getppid 時，跳掉了一段 code 如下： #if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) { ... } #endif 這段 code 在判斷 kernel 是否有 &apos;CONFIG_SMP&apos;（多處理器）與 &apos;CONFIG_PREEMPT&apos;（可搶先的 process 排程）。目前 kernel 2.6 在各種處理器平臺已經支援 preemptive process scheduler，當然也包含了 i386 處理器。 這個 kernel 的設定位於 arch/i386/Kconfig，我們節錄 Kconfig 內容如下： config PREEMPT bool &quot;Preemptible...</description>
         <link>http://www.jollen.org/blog/2006/11/_scheduler_running_process.html</link>
         <guid>http://www.jollen.org/blog/2006/11/_scheduler_running_process.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 02 Nov 2006 14:55:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Ragel：狀態機編譯器</title>
         <description>Ragel 是一個 &quot;State Machine Compiler&quot;，Ragel 可以把狀態機（regular expression）編譯成 C/C++/Objective-C/D 程式碼。Ragel 除了可以用來快速撰寫分析文件的程式外，用來學習 Automata 也是很好的工具。 Ragel 的官方網站：http://www.cs.queensu.ca/~thurston/ragel/...</description>
         <link>http://www.jollen.org/blog/2006/11/ragel.html</link>
         <guid>http://www.jollen.org/blog/2006/11/ragel.html</guid>
         <category>其它</category>
         <pubDate>Wed, 01 Nov 2006 20:48:08 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>玩 FreeDOS 1.0</title>
         <description>FreeDOS 在今年 9 月時釋出了重大的里程（big milestone）版本 &quot;1.0&quot;。FreeDOS 是一個 &quot;complete&quot;, &quot;free&quot;, &quot;100% MS-DOS compatible&quot; 的 operating system，今天心血來潮，把她裝起來玩了一下，其實還真有點懷念呢。 懷念的滋味：西冒號斜線大於。 DOOM！...</description>
         <link>http://www.jollen.org/blog/2006/11/_freedos_10.html</link>
         <guid>http://www.jollen.org/blog/2006/11/_freedos_10.html</guid>
         <category>其它</category>
         <pubDate>Wed, 01 Nov 2006 12:41:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>在 Red Hat Linux 9 下安裝 bitbake 1.6 的注意事項</title>
         <description>最近有朋友問到，在 Red Hat Linux 9 底下要如何安裝 bitbake 1.6。如果您是使用 Red Hat Linux 9（我們的課程學員），想要在 Red Hat Linux 9 底下安裝 bitbake 1.6 的話，需要注意以下事項（已實測成功）： 1. Python 要更新至 2.3（rh9 提供的是 2.2），至於其它更新版本的 Python 經測試，則是不能使用的。我們測試過 Python 2.5，結果是無法運作。我們實測可運作的版本是 Python 2.3.5 ；另外請務必使用以下的 configure 設定： # ./configure --enable-unicode=ucs4 --prefix=/usr 2....</description>
         <link>http://www.jollen.org/blog/2006/10/_red_hat_linux_9_bitbake_16.html</link>
         <guid>http://www.jollen.org/blog/2006/10/_red_hat_linux_9_bitbake_16.html</guid>
         <category>其它</category>
         <pubDate>Tue, 31 Oct 2006 23:43:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>PowerPC 的無硬碟刀峰伺服器</title>
         <description>一個有趣的應用。這是利用 IBM PowerPC 750GX 處理器，搭載 Tundra Tsi108 北橋，製作出無硬體的 server board，掛載（mount）在一個背板（backbone）後，就成為一台小型的分散式計算伺服器。以下是這台「diskless-blade server」的照片。 基本上這是一個 computation platform，因此需要軟體「分散式計算技術」的支援。不過不拿這個可怕的題目來討論，基本上 Linux 要有一個無硬碟的計算環境，最簡單的方法是「NFS」。 (一台機器可安插 4 片 diskless server board，可做為小型的伺服器或計算平臺。) NFS 果然是萬用解決方案，像是這種異質性平臺（host v.s. target、client v.s. server），利用 NFS 來掛載（mount）host（或server）端的 Linux distribution 到 target（或 client）端來做計算，是最簡單的方法。 唯一需要具備的能力是： 1. NFS 的設定：/etc/exports。 2....</description>
         <link>http://www.jollen.org/blog/2006/10/ibm_powerpc_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/ibm_powerpc_1.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 31 Oct 2006 13:29:28 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Kconfig 與 &quot;-mregparm=num&quot; 參數</title>
         <description>gcc 在 i386 / x86_64 的 machine dependent 參數 (-m) 中，有 1 個參數與參數的傳遞相關的：-mregparm=num，這個參數的用途與先前提到的 &quot;__attribute((regparm(?))__&quot; 作用相同*2。 -mregparm 用來指定有多少個 integer 的參數可以透過暫存器（register）來傳遞， 以下是 -mregparm 的 man（GCC(1))： Intel 386 and AMD x86-64 Options ... -mregparam Use a different function-calling convention where the first two...</description>
         <link>http://www.jollen.org/blog/2006/10/kconfig_mregparmnum.html</link>
         <guid>http://www.jollen.org/blog/2006/10/kconfig_mregparmnum.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Mon, 30 Oct 2006 15:27:43 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>關於 gcc 的 __attribute__ 用法</title>
         <description>gcc 提供一種「定義函數屬性（attribute）」的語法，也就是前一篇日記我們所提到的 __attribute__ 標籤。__attribute__ 用來讓我們定義函數的行為，以便告訴 gcc 在編譯時期對此函數做一些特殊的處理或檢查動作。 以 asmlinkage 的例子來說，asmlinkage 的定義是（/usr/include/linux/linkage.h）： #if defined __i386__ #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) #elif defined __ia64__ #define asmlinkage CPP_ASMLINKAGE __attribute__((syscall_linkage)) #else #define asmlinkage CPP_ASMLINKAGE #endif 由此可知，以 sys_nice() 的原型宣告來說，以下的二行程式碼是等價的： asmlinkage sys_nice(...); __attribute__((regparm(0))) sys_nice(); &quot;__attribute__&quot; 寫在函數宣告之前或之後都可以（左括號前或右括號後），並接著使用一對「雙括號」來註明此函數的屬性。語法： __attribute__((keywords))...</description>
         <link>http://www.jollen.org/blog/2006/10/_gcc___attribute.html</link>
         <guid>http://www.jollen.org/blog/2006/10/_gcc___attribute.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Fri, 27 Oct 2006 00:02:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>什麼是 &quot;asmlinkage&quot;？</title>
         <description>有網友來信問到，kernel 裡的 system call 實作函數中（C 函數），為什麼每一個函數原型宣告的前面都有一個 &quot;asmlinkage&quot; 的字串？例如： asmlinkage long sys_nice(int increment) &quot;asmlinkage&quot; 是在 i386 system call 實作中相當重要的一個 gcc 標籤（tag）。 當 system call handler 要呼叫相對應的 system call routine 時，便將一般用途暫存器的值 push 到 stack 裡，因此 system call routine 就要由 stack 來讀取 system...</description>
         <link>http://www.jollen.org/blog/2006/10/_asmlinkage.html</link>
         <guid>http://www.jollen.org/blog/2006/10/_asmlinkage.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 26 Oct 2006 16:15:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>kernel 2.6 的 battery class 驅動程式</title>
         <description>&quot;class driver&quot; 是 kernel 2.6 driver model 的新觀念，從系統管理面的角度來看，就是 /sysfs。現在 kernel 2.6 已經出現專門針對電池電源管理的驅動程式了：battery class。這是一個有別於以往對於電源管理的實作，雖然 &quot;battery class&quot; 仍只是一個初步實作的驅動程式，但未來 &quot;battery&quot; 與 &quot;AC powe&quot; 在 Linux 驅動程式新觀念底下，將會是一個獨立的 &quot;device&quot;。 新的 battery class 實作中，我們也看到了 OLPC（百元美金電腦）專用的電池驅動程式。程式碼目前可由 kernel 的 git 下載，並可追磫此討論串：http://forum.jollen.org/index.php?showtopic=6899...</description>
         <link>http://www.jollen.org/blog/2006/10/kernel_26_battery_class.html</link>
         <guid>http://www.jollen.org/blog/2006/10/kernel_26_battery_class.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 25 Oct 2006 10:35:36 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Linux 核心分享包,#2: 《講義1~5》</title>
         <description> 講義第1頁到第5頁的說明。 課前說明 作業系統（operating system）理論的教材書，與 process 和 scheduling（排程）相關的主題都是最先被討論的議題。因此，對於 Linux kernel 原始碼的研究，我們也從 process 與 scheduling 有關的部份開始講起。 Process 是執行中的程式，因此「程式如何被執行」是第一個重點，這個部份的觀念當然也包含「程式如何由儲存裝置載入」。緊接著的是，「程式載入記憶體後的佈局（layout）」，這是第二個要研究的重點。當程式被載到記憶體後，作業系統的 scheduler（排程器）便負責排程的工作與執行本文切換（context switch），這是第三個所要討論的重點。 因此，我們將會研究 Linux kernel 的 3 個「process and scheduling」議題： 1. Shell 如何載入執行檔（ELF executables）至記憶體。 2. Process 的 memory 資枓結構。 3. Linux scheduling 與...</description>
         <link>http://www.jollen.org/blog/2006/10/jollen_linux_1_15.html</link>
         <guid>http://www.jollen.org/blog/2006/10/jollen_linux_1_15.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 24 Oct 2006 22:33:10 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ReiserFS 日誌式檔案系統</title>
         <description>自 kernel 2.4.1 開始，Linux 已經支援一種稱為 ReiserFS 的日誌式檔案系統。日誌式檔案系統可以提供更安全的檔案保護機制，特別是可以運用在伺服器或是商業環境的應用上。 目前有 4 種較廣為人知的日誌式檔案系統： □ XFS □ JFS □ ext3 / ext4 □ ReiserFS 其中 JFS 是由 IBM 所發展，有興趣的讀者可以參考 IBM 的說明： http://www-128.ibm.com/developerworks/linux/library/l-jfs.html 另外 XFS 是由 SGI 所發展。我們選擇目前較受觀迎的 ReiserFS 來做介紹。 ReiserFS 的特點 ReiserFS 官方網站：http://www.namesys.com/。 日誌式檔案系統被認為相當適合應用在大型的商業伺服器環境中。在這類的環境裡，資料完整性相當的重要。...</description>
         <link>http://www.jollen.org/blog/2006/10/reiserfs_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/reiserfs_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Tue, 24 Oct 2006 11:22:48 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>GNU gv 設定與使用心得</title>
         <description>GNU gv 是用來讀取 PostScript 與 PDF 格式文件的利器，GNU gv 其實只是一個前端界面 (front-end)，實際上 GNU gv 是由 ghostview 1.5 衍生而來的，並且使用 ghostscript 來直譯文件。 GNU gv 的官方網站：http://www.gnu.org/software/gv/ gv 的使用 我們可以在 X Window System 底下直接下命令，例如： linux# gv Trans.PS.gz 這是利用 gv 觀看 Trans.PS.gz 文件的範例，特別的是，經由 gzip 壓縮過的 PostScript 或...</description>
         <link>http://www.jollen.org/blog/2006/10/gnu_gv.html</link>
         <guid>http://www.jollen.org/blog/2006/10/gnu_gv.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 23 Oct 2006 16:23:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>網路上的 ext4 filesystem benchmark</title>
         <description>網路上已經有人發表初步的 ext4 filesystem benchmark 數據了，該測試報告的作者將 ext4 的 &quot;extents&quot; 模式開啟，I/O scheduler 為 CFQ。CFQ 是 kernel 2.6.18 之後預設的 I/O 排程法。 由這篇測試報告來看，ext4 在「寫入」的效能表現上，大幅領先 ext3 與 raiser4；不過在其它測試項，ext4 則是與 ext3/raiser4 互有領先。但是整體來看，ext4 的整體效能表現確實比 ext3 來得優秀。 該測試報告也提到，由於 ext4 仍在開發測試階段，一切都要等穩定版出現後，再來做更進一步的評估了。測試報告原文： http://linux.inet.hr/first_benchmarks_of_the_ext4_file_system.html Linux-kernel mailing list 也有討論串： http://forum.jollen.org/index.php?showtopic=6705 Also See...</description>
         <link>http://www.jollen.org/blog/2006/10/_ext4_filesystem_benchmark_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/_ext4_filesystem_benchmark_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Mon, 23 Oct 2006 11:15:53 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Jollen 的 Linux 核心分享包,#1: 《開工篇》</title>
         <description>Jollen 計畫在自己的 Blog 陸續與大與分享一些 Linux kernel 的研究心得，我們的寫作方向是以重點式的心得整理為主，不過希望加入一些教學性的風格，希望對大家有幫助。到目前為止，我們與大家分享了 Linux system call service 的幾篇日記，接下來仍會再討論幾個系統服務。 故事是這樣開始的 「Linux System Calls&apos; Forum（LSCT）」旨在討論重要的系統服務（system service），以便將來我們能用最有效率的方式研究 kernel；「Jollen 的 Linux 核心分享包」則是在討論 Linux kernel 與作業系統有關的主題，方向是「討論 kernel 實作」。 Jollen 打算以「講義配合 Blog 開講」的方式跟大家一起玩核心！「一份講義」會以多篇日記方式跟大家討論，這裡的講義是從以前的筆記、演講、內訓課程或是討論會節錄並整理而成（需要時當然也會重新編製），Jollen 打算以講義的形式來整理，因此可能並不適合當做「教材」來使用；因此，在與朋友分享這份講義的同時，也要請大家一同分享 Jollen&apos;s Blog 網站。 第一份講義請由本文最後的網址下載，在開始看 kernel 前，以下的準備工作是很重要的： 1. 準備一份...</description>
         <link>http://www.jollen.org/blog/2006/10/jollen_linux_1_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/jollen_linux_1_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 22 Oct 2006 21:04:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #6：(第97號系統服務) sys_setpriority</title>
         <description>了解 sys_getpriority() 後，要看懂 sys_setpriority() 就不是問題了。 97 sys_setpriority linux/kernel/sys.c 類別：Systems 原型宣告：long sys_setpriority(int which, int who, int niceval); 用途說明：變更 process 的排程優先序（Priority）。 Kernel (2.6.11 or above) 實作： asmlinkage long sys_setpriority(int which, int who, int niceval) { struct task_struct *g, *p; struct user_struct *user;...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_697_s.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_697_s.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 20 Oct 2006 19:38:13 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>再探 sys_getpriority()</title>
         <description>getpriority() 若指定 which 是 PRIO_PGRP 的話，那麼便能取得 process group 裡的「最大 priority 值」。先節錄相關 kernel code 如下： asmlinkage long sys_getpriority(int which, int who) { ... case PRIO_PGRP: if (!who) who = process_group(current); do_each_task_pid(who, PIDTYPE_PGID, p) { niceval = 20 - task_nice(p); if (niceval...</description>
         <link>http://www.jollen.org/blog/2006/10/_sys_getpriority.html</link>
         <guid>http://www.jollen.org/blog/2006/10/_sys_getpriority.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 20 Oct 2006 16:13:25 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Kernel 2.6 的 KVM (Kernel Virtual Machine) 驅動程式來了</title>
         <description>在伺服器（server）技術的發展藍圖中（roadmap），虛擬伺服器（virtual server）是 Intel 近來所著墨的重點。由以往單一硬體對單一作業系統（operating system）的伺服器架構（1 physical server v.s. 1 OS），未來將會演進成為單一硬體對多個作業系統的架構（1 physical server v.s. multiple OS）。 Intel 的 Virtualization Technology 就是一個這樣的新技術。Intel 的 Virtualization Technology 可以讓處理器支援多個 OS，不過這其實是基於我們所熟悉的虛擬機器軟體（例如：VMware、QEMU、Xen等）才能達到的，所以這是一個由「processor + chipsets + BIOS + 虛擬機器軟體」互相運作所實現的技術。 Virtual Machine Monitor (VMM) 軟體實作的虛擬機器在此技術領域中被統稱為「VMM - Virtual Machine Monitor」，現在已經有支援...</description>
         <link>http://www.jollen.org/blog/2006/10/kernel_26_kvm_kernel_virtual_m.html</link>
         <guid>http://www.jollen.org/blog/2006/10/kernel_26_kvm_kernel_virtual_m.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 19 Oct 2006 23:27:51 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #5：(第96號系統服務) sys_getpriority</title>
         <description>nice() 是用來變更 process 優先序（priority）的 system call 也是最古老的一個，sys_getpriority() 與 sys_setpriority() 則是取代 sys_nice() 的新實作，今天我們先討論一下 &apos;sys_getpriority&apos;。 96 sys_getpriority linux/kernel/sys.c 類別：Systems 原型宣告：long sys_getpriority(int which, int who); 用途說明：取得 process 的排程優先序（Priority）。 Kernel (2.6.11 or above) 實作： /* * Ugh. To avoid negative return values, &quot;getpriority()&quot; will...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_596_s.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_596_s.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 19 Oct 2006 21:07:56 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>座談演講投影片下載</title>
         <description>跟學弟妹的座談演講，分享自己的工作經驗，並且簡單介紹該如何進入嵌入式 Linux 領域。請按我下載...</description>
         <link>http://www.jollen.org/blog/2006/10/post_3.html</link>
         <guid>http://www.jollen.org/blog/2006/10/post_3.html</guid>
         <category>其它</category>
         <pubDate>Thu, 19 Oct 2006 16:35:19 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>是蟲啦，不是警告。</title>
         <description>是蟲啦，不是警告。在 Linux kernel 的 mailing list 看到一則有意思的張貼，全文如下，Jollen 把重點用紅色標示出來： * Jeremy Fitzhardinge wrote: &gt; A warning is a warning, not a BUG. &gt; - printk(&quot;BUG: warning at %s:%d/%s()n&quot;, __FILE__, &gt; + printk(&quot;WARNING at %s:%d %s()n&quot;, __FILE__, i&apos;m not really happy about...</description>
         <link>http://www.jollen.org/blog/2006/10/post_2.html</link>
         <guid>http://www.jollen.org/blog/2006/10/post_2.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 18 Oct 2006 21:20:09 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>getpriority() 與 setpriority() 程式設計</title>
         <description><![CDATA[前幾天介紹到 Linux 的一個排程（Scheduling）系統服務叫做 sys_nice()，與 sys_nice() 相關的 system call service 是 sys_getpriority() 與 sys_setpriority()，不過在看 kernel code 前，我們應該先試著了解 getpriority() 與 setpriority() 二個 system call 的用法。 先來了解一下 getpriority() 的用途，GETPRIORITY(2)： SYNOPSIS #include &lt;sys/time.h> #include &lt;sys/resource.h> int getpriority(int which, int who); getpriority() 的 which 參數用來指定要取得...]]></description>
         <link>http://www.jollen.org/blog/2006/10/getpriority_setpriority.html</link>
         <guid>http://www.jollen.org/blog/2006/10/getpriority_setpriority.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Tue, 17 Oct 2006 22:40:20 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 的系統管理,#5: &apos;./configure&apos; 與 Software Stack</title>
         <description>&apos;./configure&apos; 的設定決定 root filesystem 的架構（architecture），即 software stack 的設計。以我們「Embedded Linux 的系統管理 (x86)」課程舉出的 Nano-X project 案例來說，我們可以規劃出 2 種架構： 1. 典型的 Desktop (PC) 使用的架構 - ffplay + SDL + x11。 2. 讓 ffplay 在 Nano-X 介面裡撥放影片 - ffplay + SDL + Nano-X。 其中第...</description>
         <link>http://www.jollen.org/blog/2006/10/embedded_linux_5_configure_sof.html</link>
         <guid>http://www.jollen.org/blog/2006/10/embedded_linux_5_configure_sof.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sun, 15 Oct 2006 12:01:46 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #4：(第34號系統服務) sys_nice</title>
         <description>nice() 是用來變更 process 優先序（priority）的 system call，nice() system call 叫用（invoke）的 system call 實作常式為 sys_nice。sys_nice 服務常式（service routine）是 Linux 排程（scheduling）相關的服務常式中最基本（也是最古老）的一個。 34 sys_nice linux/kernel/sched.c 類別：Scheduling 原型宣告：long sys_nice(int increment); 用途說明：變更 process 的優先序。 Kernel (2.6.11 or above) 實作： /* * sys_nice - change the priority of...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_434_s.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_434_s.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sun, 15 Oct 2006 00:55:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #3：(第64號系統服務) sys_getppid</title>
         <description>sys_getppid 是很有趣的一個實作常式。 當 process fork 新的 process 後，便成為該 process 的 parent process，當然，新的 process 便成為 child process。在 UNIX 的 multithreaded 程式設計的理論中，process 之間的關係是相當重要的，比如說，只有 related process (e.g. parent process v.s. child process) 可以透過 pipe 的機制來交換資料。 process 呼叫 fork() 函數（更正確的說法是 fork system call 的...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_364_s.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_364_s.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 14 Oct 2006 22:49:22 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>ext4 檔案系統現身了！</title>
         <description>新一代的檔案儲存 (storage) 檔案系統 (filesystem) - ext4 已經出現在Linux 2.16.19rc1-mm1 的核心原始碼裡了！ext4 是更先進的檔案系統，他前身就是知名的 ext3 檔案系統；ext3 是目前 Linux 普遍使用的知名檔案系統。 ext4 加入了 &quot;extent file writing&quot; 技術的支援，這是一個能減少 &quot;fragmentation&quot; 並增進效能的技術。有興趣的朋友可以閱讀 Linux-watch 上的官方新聞： http://www.linux-watch.com/news/NS3183866977.html &apos;-mm&apos; 系列的 2.6 kernel 是由 Andrew Morton 所釋出的 Linux 分支，主要性質以「實驗」與「新功能」為主；&apos;ext4&apos; 一睹為快，搶鮮下載 (mm patch 下載官網)：...</description>
         <link>http://www.jollen.org/blog/2006/10/ext4.html</link>
         <guid>http://www.jollen.org/blog/2006/10/ext4.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Fri, 13 Oct 2006 09:29:19 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #2：(第199,201,200,202,224號系統服務) sys_getuid, sys_geteuid, sys_getgid, sys_getegid, sys_gettid</title>
         <description><![CDATA[ 199 sys_getuid linux/kernel/timer.c 類別：Kernel Timer &amp; Process 原型宣告：long sys_getuid(void); 用途說明：取得目前 process 的 real user ID (UID)。 Kernel (2.6.11 or above) 實作： asmlinkage long sys_getuid(void) { /* Only we change this so SMP safe */ return current->uid; } 201 sys_geteuid...]]></description>
         <link>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_21992.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_21992.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Thu, 12 Oct 2006 12:57:37 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux System Calls&apos; Forum, #1：(第20號系統服務) sys_getpid</title>
         <description><![CDATA[對於 Linux system call 的研究，我們採取的策略是「依分類」來做討論，而不是依 system call 編號依序討論。透過 system call (kernel-space 端) 的研究，我們除了可以更深入了解作業系統外，更能一探 Linux kernel 的奧妙。 20 sys_getpid linux/kernel/timer.c 類別：Kernel Timer &amp; Process 原型宣告：long sys_getpid(void); 用途說明：取得目前 process 的 thread ID (process ID)。 Kernel (2.6.11 or above) 實作： /** * sys_getpid...]]></description>
         <link>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_120_s.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_system_calls_forum_120_s.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 11 Oct 2006 17:01:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6 的 System Call：12 大類</title>
         <description>把 Linux 提供的 sytsem call service 依分類做整理，並提供實作檔案。本表使用於 Jollen 的「2. GNU Toolchains 與 Embedded Linux Programming」課程中，在此提供給大家做參考。目前依據 Linux 2.6.11 原始碼製成，請搭配 2.6.11 以上的版本做研究。 no Syscall name Implementation file in Linux 2.6.11 (or above) 目前大致把 Linux 2.6.11 的 system call 分成以下幾個類別： Machine-dependent (i386) Filesystem...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_26_system_call12.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_26_system_call12.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Wed, 11 Oct 2006 14:58:32 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.6.11 System Calls Table (LSCT)</title>
         <description>以下是 Linux 2.6.11 的 system call 整理表格，提供給「Embedded Linux 嵌入式系統實作演練」的讀者您做參考。這是一張很方便的表格，可以取代 unistd.h 與 &quot;man&quot;。 這張工具表格可以幫助我們： 1. 最主要的目的：當然是研究作業系統，了解 Linux 提供的 sytsem call service。 2. Trace kernel. 3. Writing shellcode. 供您參考 :) Linux (kernel 2.6.11) System Call Table 1. sys_ni_syscall 為保留號碼 2. 更新日期: 2006/10/07...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_2611_system_calls_table.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_2611_system_calls_table.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 07 Oct 2006 23:41:39 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux 2.4.29 System Calls Table (LSCT)</title>
         <description>以下是 Linux 2.4.29 的 system call 整理表格，提供給「Embedded Linux 嵌入式系統實作演練」的讀者您做參考。這是一張很方便的表格，可以取代 unistd.h 與 &quot;man&quot;。 這張工具表格可以幫助我們： 1. 最主要的目的：當然是研究作業系統，了解 Linux 提供的 sytsem call service。 2. Trace kernel. 3. Writing shellcode. 供您參考 :) Linux (kernel 2.4.29) System Call Table 1. sys_ni_syscall 為保留號碼 2. 更新日期: 2006/10/07...</description>
         <link>http://www.jollen.org/blog/2006/10/linux_2429_system_calls_table_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/linux_2429_system_calls_table_1.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 07 Oct 2006 13:11:24 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Name Service Switch 程式設計：原理探討</title>
         <description>我們以一個 &apos;gethostbyname&apos; 的例子來說明 NSS 的運作原理 假設我們想要查詢網路上某台 host 的 IP 位址，那麼 GNU C Library 手冊告訴我們說，有一個 gethostbyname() 的函數可以使用。 不過，在真正寫 code 時，其實並不建議呼叫此函數，在說明原因前，有一句必名言是大家一定要銘記在心的： Multi-threaded safe code must be reentrant. 由於 gethostbyname() 並非 reentrant 的版本；所以，呼叫 gethostbyname() 並不是正確寫法，我們必須改成呼叫 reentrant 的版本：gethostbyname_r()。 NSS module 裡 non-reentrant 的函數，是不能使用在 multi-threaded...</description>
         <link>http://www.jollen.org/blog/2006/10/name_service_switch.html</link>
         <guid>http://www.jollen.org/blog/2006/10/name_service_switch.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 04 Oct 2006 14:30:21 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Name Service Switch 程式設計：基本觀念</title>
         <description>有些 C 函數的運作會依據 localhost 的設定而有不同行為，而這些設定的做法是透過「設定檔」(eg. /etc/services) 來實現。目前在 GNU/Linux 系統底下，可以看到許多這樣的設定檔，我們把這些設定檔稱為 system database，這些資料庫主要是以文字檔方式儲存重要的系統資訊，例如: /etc/passwd 存放使用者名稱、/etc/services 存放網路服務的通訊埠 (port) 設定等等。 GNU C library 實作的 &quot;Name Service Switch&quot; 函數群便是用來讀取所有 system database 內容的介面！ System Database NSS 支援 11 種資料庫名稱：aliases、ethers、group、hosts、netgroup、networks、protocols、passwd、rpc、services 與 shadow。分別說明如下。 aliases: Mail 別名 ethers: Ethernet...</description>
         <link>http://www.jollen.org/blog/2006/10/name_service_switch_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/name_service_switch_1.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Tue, 03 Oct 2006 22:21:14 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Library Dependency 的議題要點</title>
         <description>在建立 embedded Linux 系統 (root filesystem) 時，程式庫相依 (library dependencies) 的議題是相當重要的一個題目。 當 root filesystem 缺少必要的 library 時，程式當然是無法執行的，甚致系統也會無法順利啟動。依據 Jollen 在「Embedded Linux / ARM9 開發實戰」的課程所提的幾個觀念，我們可以了解到在建構 embedded Linux 系統時，應具備的正確觀念與基本能力。 我們把「如何找出所需的 library」方法整理出 3 項的基本要點，依照這 3 種基本款來加入 library 將能解決幾乎所有的 library dependency 問題，這 3 種項基本要點為： (1) 先利用...</description>
         <link>http://www.jollen.org/blog/2006/10/library_dependency_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/library_dependency_1.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 03 Oct 2006 17:57:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>嵌入式 Linux 應用: Mesh Networking 演講稿 (精簡版部份內容)</title>
         <description>#2: 今天 Jollen 要介紹的題目是 &quot;Mesh Router&quot;，實作平臺是 Kendin KS8695P 與 embedded Linux 系統。我們在 Kendin KS8695P (ARM9) 的平臺上嵌入 embedded Linux 系統，透過此平臺與 mesh wireless 的 embedded Linux 系統，將能實作出 mesh networking 的系統。 今天我們的重點 (Lecture 8) 是介紹 open source 解決方案與 mesh networking；同時我們也會做一個簡單的 demo。 簡報下載 #3:...</description>
         <link>http://www.jollen.org/blog/2006/10/post_1.html</link>
         <guid>http://www.jollen.org/blog/2006/10/post_1.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Mon, 02 Oct 2006 23:58:18 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>嵌入式OS的重要共通議題</title>
         <description>學習WinCE與Embedded Linux的重要課程是「系統程式」（system software）的觀念，不管是WinCE還是Embedded Linux，有幾個核心的系統程式或作業系統基礎，絕對是要用力研究的。 第一個是process的觀念，process是執行中的程式，如何控制process（生成與刪除）、非同步的signal處理等；第二個是process synchronization的觀念，process是concurrent（同步）在執行，所以會產生race condition（競賽問題）問題，解決race condition現象的方法、semaphore、monitor、mutual exclusive、locking等，是這個觀念主題的重點。 第二個是thread的程式設計方法與thread同步的方法，配合multi-threaded所實作的event-driven軟體架構，還有更進階的event manager的做法，是這個部份的重點。 因此，有志進入嵌入式系統領域的讀者，可以直接由WinCE或Embedded Linux技術切入，首先當然要以軟體層的學習為主，並且加強作業系統與系統程式這二門學科的能力，接著把最好的一道菜—驅動程式—徹底學通後，絕對能在嵌入式系統領域有所發揮。 -- 作者／陳俊宏 (jollen) 部份原文刊載於 Run! PC 雜誌 8 月號 歡迎任意轉貼引用．但請務必註明出處...</description>
         <link>http://www.jollen.org/blog/2006/09/os.html</link>
         <guid>http://www.jollen.org/blog/2006/09/os.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sat, 30 Sep 2006 13:39:23 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Linux smartphone 之路</title>
         <description>相較於Microsoft的Windows Mobile的成功，過去的Linux smart phone 之路顯然有點坎坷。雖然大敵在前，但是Linux開發社群對Linux手機的熱情絲毫未減。終於，去年（２００５）年，由11家Linux與處理器大家共同成立的Linux手機標準論壇（Linux Phone Standards Forum – LiPS）提出具體的Linux smart phone架構圖。 LiPS發起廠商共有11家大廠，分別是：ARM Ltd., Cellon, Esmertec, France Telecom/Orange, FSMLabs, Huawei, Jaluna, MIZI Research, MontaVista, Open Plug, and PalmSource。最近又加入了Texas Instruments、ZTE、Telecom三家大廠。 圖: LiPS　的工作範圍（kernel 部份是OSDL的任務） (Source: LinuxDevices.com / LiPS) LiPS的主要任務為「標準化（standardizing）Linux手機」，並提出可行的Linux手機OS架構。更明確來說，LiPS在標準化「Linux手機的middleware層」，middleware提供電話功能的API、GUI、裝置管理功能、相關的安全性管理、電話簿功能。今年下半年將可以看到LiPS釋出的第一版Linux手機規格！ 除了LiPS外，OSDL（Open Source Development...</description>
         <link>http://www.jollen.org/blog/2006/09/linux_smartphone.html</link>
         <guid>http://www.jollen.org/blog/2006/09/linux_smartphone.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sat, 30 Sep 2006 12:48:38 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>最精彩的一道菜：驅動程式</title>
         <description>軀動程式本身是屬於「軟體硬介面」的程式設計技術，不管是學習WinCE或是Embedded Linux，最精彩的部份絕對是驅動程式莫屬。由於嵌入式系統整體來看，除了軟體開發外，也包含硬體的客制化，因此驅動程式在嵌入式系統技術領域中，佔了舉足輕重的地位。 學習驅動程式需要確實瞭解硬體的規格與微處理器架構，並且工程師還要能分得清楚哪些東西是介面（interfacing）也就是與硬體無關的程式（machine-independent）；以及哪些是站在第一線做硬體控制的程式（machine-dependent）。各種軟體硬介面與滙流排也都要精通。 現在的嵌入式系統學習主軸 現今嵌入式系統的實作，幾乎都會加入嵌入式作業系統（embedded OS）的元素，有了作業系統，我們都可以為目標裝置「寫軟體」。總合來看，如果要學習所謂的嵌入式系統，從熱門的WinCE或Embedded Linux領域切入是相當不錯的選擇。 驅動程式是「寫軟體」與「做硬體」的 “connectivity”，因此現今資訊業界最熱門的嵌入式系統學習主軸為驅動程式的設計。 WinCE驅動程式 WinCE驅動程式的核心人物當然就是在WDM（Windows Driver Model）身上了。WDM是Windows 98/2000之後的驅動程式架構，WDM是一個嚴密的分層（layered）架構，架構層間以IRPs（I/O Request Packets）做通訊。 WDM驅動程式分為三種類型：bus driver、function driver與filter driver。Bus driver是device-independent的驅動程式，主要在驅動I/O bus，例如：PCI bus driver、USB bus driver；function driver是 “device” 的驅動程式，我們常講的「驅動程式設計」大部份都是講 function driver，function driver 主要在驅動各種裝置，因此大多是由裝置廠造商撰寫並提供給使用者安裝，function driver 的設計大多著墨在「讀/寫」外部裝置。Filter driver是非必要的驅動程式，主要在過瀘 I/O requests。 WDM驅動程式的設計是使用Windows DDK，學習資源豐富並且完整；相較於Linux驅動程式，WDM驅動程式的學習材料較系統化。...</description>
         <link>http://www.jollen.org/blog/2006/09/post.html</link>
         <guid>http://www.jollen.org/blog/2006/09/post.html</guid>
         <category>Linux Device Drivers &amp; Kernel</category>
         <pubDate>Sat, 30 Sep 2006 12:46:06 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>嵌入式系統開發導論 (刊載於 Run! PC 8 月份)</title>
         <description>超熱門美食：嵌入式系統 什麼是「嵌入式系統」？這個熱到不行的題目倒底是什麼東西！嵌入式系統已經是全球科技業的共通話題了，就讓我們來簡單說明什麼叫「嵌入式系統」（Embedded Systems）吧。 美國工程師協會所定義的．．．嗯！看到這句話大家大概又要傻眼了，怎麼每個人解釋嵌入式系統都要搬出美國工程師協會的定義來交差呢！這真的是落伍啦。嵌入式系統不過是廣義還是狹義的定義，肯定都是包山包海的又臭又長。 我們這裡所要講的嵌入式系統目標是鎖定在熱門的「嵌入式作業系統平臺技術」（Embedded OS），所以如果我們再繼續縮小主題的話，沒錯！題目就只剩下 WinCE、Symbian 與 Linux 了！ 如果以學習熱度來講的話，WinCE與 Embedded Linux 絕對是不「二」主題。所以我們要講的嵌入式系統就是Windows Mobile與Embedded Linux。本文將會明確鎖定幾個主題，並給予一個學習的方向，讓有志進入嵌入式系統領域的朋友能抓住主要的幾個主題。 功能導向的系統 言歸正傳，所謂的嵌入式系統簡而言之是一種「執行部份特定功能」的系統，實作上並不限定技術範疇，只要能將特定的功能（function）「嵌入」到目標裝置（target device）裡，包含這些功能的整體系統（或平臺）即是「嵌入式系統」。 一部目標裝置裡頭，可能會有數十個甚致數百、數千個嵌入式系統，每個「系統」均負責執行一項專責的功能。 由於目前的目標裝置都必須嵌入甚為複雜的功能，所以「嵌入式作業系統」成為嵌入式系統不可或缺的要素。例如，一支完全沒有生命力的「手機硬體」，在嵌入Windows Mobile與application後，就變成可以聽MP3、跟女朋友聊天、看MTV與使用各種功能的活力裝置了！有了完整的嵌入式系統技術，任何目標裝置都會因為嵌入式系統的注入，而產生生命，充滿活力！ 目標裝置導向的系統 由於嵌入式系統是功能導向的系統，因此必須設計、選擇或購買正確（或適合）的目標裝置，才能開始實作並嵌入「嵌入式系統」。因此，嵌入式系統的技術是以功能與目標裝置為分類的一種技術。 例如，與PDA相關的目標裝置（即硬體）、與MP3撥放器相關的目標裝置、與3G手機相關的目標裝置等等；使用這些目標裝置所開發的特定功能系統，便是PDA的嵌入式系統、MP3音樂撥放的嵌入式系統、3G手機的嵌入式系統。 附帶值得一提的是，由於嵌入式系統的目標裝置，在硬體規格或架構上往往重疊性很大，所以很多SOC的廠商都會推出所謂的「公板」或「參考設計」（Reference Design），下游的開發者往往只要把公板做部份修改或小量的客製化，即可滿足自己的需求。 使用嵌入式作業系統 因為以功能為導向，因此當要嵌入的功能很複雜或非常多樣化時，使用嵌入式作業系統才能解決許多技術面的問題。有了嵌入式作業系統，「功能的實作」往往只是在「寫程式」，所以最終可以把嵌入式系統變成軟體開發的工作。 目標裝置 (Target Device) 的特性 嵌入式系統大多數都不使用標準的IBM PC硬體，而且有些嵌入式系統的目標裝置都是很特殊的。不過，我們可以將嵌入式系統目標裝置（target device）的主要硬體差異做一個說明。 我們透過與IBM PC的差異比較來做解釋。 嵌入式系統使用SOC（System-on-Chip）的處理器，這些SOC都是專為嵌入式系統或是手持行動裝置設計的，因此具備低功率、低耗電與面積小的特色。 在RAM方面，嵌入式系統的RAM大多在2MB到128MB之間，並且都是屬是SRAM/SDRAM的技術。很少使用IBM...</description>
         <link>http://www.jollen.org/blog/2006/09/_run_pc_8.html</link>
         <guid>http://www.jollen.org/blog/2006/09/_run_pc_8.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sat, 30 Sep 2006 12:00:55 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 是程式？是一台裝置？還是什麼？</title>
         <description>Embedded Linux 倒底是什麼東西啊？最早 Jollen 的書曾經節錄國外專欄的解釋，企圖以最簡單的方式來定義「Embedded Linux」：Embedded Linux is a software platform for embedded system。因此，Embedded Linux 是一種「特殊的應用方法」，並不是一個程式。 今天在 LinuxDevices.com 的 forum 看到一則 post，原始發問者顯然誤解了 Embedded Linux 的意思，不過有位好心人很邁力地解釋 &quot;regular Linux&quot; 與 &quot;embedded Linux&quot; 的觀念，他的開場白寫的真的很不錯： &apos;Embedded Linux&apos; is not an application program, it is...</description>
         <link>http://www.jollen.org/blog/2006/09/embedded_linux_2.html</link>
         <guid>http://www.jollen.org/blog/2006/09/embedded_linux_2.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Sat, 30 Sep 2006 11:29:09 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>QEMU 虛擬機器</title>
         <description>QEMU 是一個可以模擬 x86、x86_64、ARM、、SPARC、SPARC64、PowerPC、PowerPC64、MIPS、m68k 與 SH-4 處理器的 open source 軟體。簡單說，QEMU 就是一套虛擬機器 (virtual machine) 的軟體。 QEMU 提供二種模擬模式：(1) Full system emulation；(2) User mode emulation。Full system emulation 模擬完整的系統，即處理器與週邊；user mode emulation 則是能在不同的處理器平臺上執行其它處理器平臺的程式。 以下是引用自 QEMU 官方的介紹： QEMU is a generic and open source processor emulator which...</description>
         <link>http://www.jollen.org/blog/2006/09/qemu.html</link>
         <guid>http://www.jollen.org/blog/2006/09/qemu.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Thu, 28 Sep 2006 23:38:31 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>libiconv: 字元集碼編轉換</title>
         <description>實作 Linux 系統程式時，常需要做「Unicode 與 Big5」間的字元編碼轉換；嵌入式 Linux 的應用也經常會遇到這樣的需求，例如我們原則上會將文件存成 Unicode，當程式執行時，再決定要輸出成 Unicode 或 Big5 (or GBxxxx)，這時就要使用到 GNU 的 libiconv 專案。 GNU libiconv 用來做字元間的編碼轉換，已經廣泛被使用在 GNU/Linux 系統中，例如 PHP 的 iconv 系統即是使用 GNU libiconv。libiconv 要移植到 ARM9 平臺上也是非常容易的。GNU libiconv 的官方首頁是: http://www.gnu.org/software/libiconv/ 把 libiconv 套件解開並編譯後，可以在 src/ 目錄下找到 iconv...</description>
         <link>http://www.jollen.org/blog/2006/09/libiconv_1.html</link>
         <guid>http://www.jollen.org/blog/2006/09/libiconv_1.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 27 Sep 2006 23:10:52 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>RISC 嵌入式平臺 (PowerPC) 的 VGA 解決方案</title>
         <description>從事系統程式工作的朋友大都聽過 Open Firmware 的標準，因為工作上的需要，允許 Jollen 可以花一點時間整理 Open Firmware 的資源。至於為什麼要來讀 Open Firmware，就要由 x86 的 VGA 說起了。 從以前我們做過的 PowerPC + x86 VGA 專案，以至於對 LinuxBIOS 玩票性質的研究，都能推導到一個未來 (也是現在) 值得投資的主題，那就是 Open Firmware。Jollen 最近發現在 OpenBIOS 的專案網站中，出現了一個 FCode Suite 的套件，這是 IBM 的 David Paktor 老兄在八月份 (2006) 丟到...</description>
         <link>http://www.jollen.org/blog/2006/09/vga_video_graphics_array.html</link>
         <guid>http://www.jollen.org/blog/2006/09/vga_video_graphics_array.html</guid>
         <category>U-Boot , ARM9 and Pre-OS 相關</category>
         <pubDate>Mon, 25 Sep 2006 23:21:15 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>Embedded Linux 系統性的教學看法</title>
         <description>依照建立 &quot;root filesystem&quot; 的方法，我們可以區分以下 4 大類型 (Jollen 個人看法，僅供參考)： 1. Embedded Linux Distribution. 2. Hand-made. 3. Build system. 4. Metadata build system. Embedded Linux Distribution 比如像是 Debian for ARM 這類型的 pre-built Linux distribution for embedded Linux 其實是不太實用的，除了 large-scale 的應用或是教學用途 (eg. PeeWeeLinux)...</description>
         <link>http://www.jollen.org/blog/2006/09/embedded_linux.html</link>
         <guid>http://www.jollen.org/blog/2006/09/embedded_linux.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Fri, 22 Sep 2006 22:59:17 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>利用 Monotone 與朋友客戶協同發展與測試</title>
         <description>Monotone 是一個版本控管系統，但是他跟 SVN/CVS 並無衝突，我們由 monotone 首頁節錄官方的摘要說明如下： monotone is a free distributed version control system. it provides a simple, single-file transactional version store, with fully disconnected operation and an efficient peer-to-peer synchronization protocol. SVN 是廣為使用的版本控管系統，並將取代 CVS。然而 SVN/CVS 的操作與管理的學習成本是挺高的，我們無法「勸導」客戶積極地配合我們的 CVS 模式來跟我們的程式碼同步，還好 monotone...</description>
         <link>http://www.jollen.org/blog/2006/09/_monotone.html</link>
         <guid>http://www.jollen.org/blog/2006/09/_monotone.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Thu, 21 Sep 2006 22:57:50 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>一篇有關 Reentrant Code Program (可重覆進入程式碼) 的文章</title>
         <description>&quot;Reentrant Code&quot; 是 embedded system 相關教科書很重要的一個主題，學習 Linux 驅動程式的學員也一定了解到這個主題的重要性。 由於 Linux 驅動程式裡的每一個 &quot;operation&quot; (eg. fops-&gt;read) 是 &quot;共用&quot; 的，例如 major number 相同的 device file (minor number 不同) 是共用同一塊 code，所以必須考量程式碼的「可重覆進入」寫法 (thinking about filp-&gt;private data)。 這也是為什麼在 Jollen 的 Linux 驅動程式課程裡，我們如此這般在強調 Reentrant Code (Reentrant Function)...</description>
         <link>http://www.jollen.org/blog/2006/09/_reentrant_code_program.html</link>
         <guid>http://www.jollen.org/blog/2006/09/_reentrant_code_program.html</guid>
         <category>GNU Toolchains &amp; Linux Systems Programming</category>
         <pubDate>Wed, 20 Sep 2006 22:12:11 +0800</pubDate>
         <author>jollen</author>
      </item>
            <item>
         <title>嵌入式Linux的Web Application Framework</title>
         <description>今天在survey與初步build所謂的&quot;a web application framework in an embedded Linux system&quot;，這是8月份在LinuxDevices.com的一篇文章介紹的題目。Web-application或者是&quot;Application Web化&quot;是近幾年來非常明顯的一個趨勢，思考 Embedded System 的 Web Application (Embedded Web Applications ?) 是一個頗為有趣的主題，也有許多的 paper 在討論這個題目。 目前嵌入式Linux上的web application與desktop (PC) 的web application並無太大差異，許多文件也是只以&quot;embedded web server&quot;做為核心的出發點，這篇在linuxdevices.com上看到的文章也是。不過這篇文章倒值得對這個題目有興趣的朋友一讀。 作者開場白就點出了這個題目的主軸: As devices are increasingly more networked, an embedded web server...</description>
         <link>http://www.jollen.org/blog/2006/09/linuxweb_application_framework_1.html</link>
         <guid>http://www.jollen.org/blog/2006/09/linuxweb_application_framework_1.html</guid>
         <category>Embedded Linux: Platforms and Applications</category>
         <pubDate>Tue, 19 Sep 2006 21:37:37 +0800</pubDate>
         <author>jollen</author>
      </item>
      
   </channel>
</rss>