開源工具現狀

許多開發者都有介入中大型專案的經驗,常必須試圖理解原始程式的設計,或多或少都有在程式碼迷宮中找路的經驗。有些專案,程式碼結構嚴謹,軟體設計應用 Design Patterns. 見名稱、參數即可推斷程式結構,閱讀如沐春風。

但若碰到未經重構的成年老專案,程式邏輯因為年久失修,塞滿各個開發階段的臨時解決方案,常常已經複雜到難以一眼望穿理解。若是像記憶力虛弱如我,常常追了後面幾千行、跳了三個檔,就忘了前面幾個檔案的函式名稱。於是常常輔助紙本畫流程圖,但是手繪圖往往不敵跳來繞去的程式碼邏輯。還是得靠程式碼解析視覺化工具來協助理解。

繪製 Call Graph 的工具非常多,一般可以分作 Dynamic analysisStatic analysis 兩種做法。在臺灣,最知名的商業版本工具,大概是 Source Insight。不過我不用 Windows,對於缺乏原始碼的開發工具興趣也不大。

開源的 Dynamic analysis 有像是 Jserv 介紹過CodeViz 或是 ncc。不過這類工具需要 patch gcc,不特別適合嵌入式系統專案。因爲原始碼常常只支援特定平臺,或是無法取得編譯工具原始碼,此外不同版本的 compiler 偶爾會造成不同的問題,造成使用上的困難。

一種比較乾淨的做法是像 KCachegrind 利用 valgrind 來收集資料,或 Gprof2Dot 利用 gprof 的輸出資料。再者是利用 gcc 的除錯功能,把 internal representation (RTL) 倒出來,再用egyptPython-RTL 來判讀或繪圖。

至於 Static analysisFred Chien 介紹過cflow 或是 Doxygen 也有類似的繪圖功能。也有工具是配合 cscopeglobal,例如有人幫 CScope 刻過圖形界面,Vim 有個 CCTree 可用。

CallGraphviz

以上這些工具各有優缺點。

最常見的問題是許多工具無法處理 function pointer / dynamic dispatch,最終還是要人力介入。另外一個使用上的困擾是,這些程式會一口氣畫出整個程式碼的結構圖。

太多資訊其實妨礙理解,因爲用途常常只是追一個臭蟲,程式開發者只想畫出特定路徑來釐清問題。而context-sensitive 的 call graph 測試工具又耗費資源。

若用 CodeLite, Code Blocks , Eclipse CDT 等開發工具,工具已經內建或整合 cscope /global,提供 symbol lookup 功能,於是開發者很容易用滑鼠查閱函式定義或實做,或也可以搭配 LXR 來瀏覽程式碼。已經不需要像是 cbrowser 專屬的程式碼瀏覽工具

所以需要的是可以手動的將目前程式情境視覺化的工具,網路上已經有其他開發者做了 Bash: C Call Trees and Graphs 或是 Global-calltree。或是像 ypwang方法,記錄函式進出點,再手動繪圖。

這些工具大多是整合 shell scripts,操作上有點不便。另外我也不喜歡 Call Tree 的圖式,因爲樹狀圖無法表現遞迴或交互關係。

於是查找一下,決定拿 cscope 加上 GraphvizDOT 語法來用,改了一個 CallGraphviz。它的功能是一個 Graphviz 前端,後端還是使用 cscope 查 symbols,為了可以即時瀏覽就拿了 xdot 當作界面。xdot 是以 PyGtk 開發,非常容易更改,不到三百行就加入我需要的功能。
 

使用方法

  • python visualizer.py
  • 按下 “New”, 選擇要分析 C/C++ 專案目錄。
  • 於 “Search symbol” 鍵入要追蹤的函式名稱。
  • 每次鍵入新名稱,他會自動對應圖中已輸入函式是否爲 caller or callee,並自動畫圖。

CallGraphviz 可以將繪圖結果存成 dot 格式檔案,然後再利用 dot 指令轉換格式。不過它只是把曾經查過的名稱記錄起來,開啟時重新查 cscope 而已,若圖大時,每次開啟可能會十分緩慢。

原始碼可於 github 下載,授權採用 GNU Lesser General Public License.

延伸閱讀
Python Call Graph

Firefox 4.0 出來之後,一直沒有抽時間出來更新 CertAlert,不過最近看到 AT&T 上的 Facebook 流量莫名被轉到中國南韓去,似乎有某種暗黑勢力蠢蠢欲動。

頗擔心 CNNIC 有惡意作為,稍微更新了 CertAlert,讓它支援 Gecko 2.0 XPCOM API,可以裝在 Firefox 4.0 上。新版安裝檔可以於 github 下載。

Mozilla 官方 AMO 因爲疏於更新,暫時被拿下來了,將重新上傳等官方審閱後即可再次下載。

2011-03-29 01:30

官方 AMO 已經重新開放安裝,仍於申請審閱程序中。

癮科技中文版發了一篇漫畫 婊科技:什麼叫做 “唯恐天下不亂”,諷刺人心、媒體與網路等人禍比天災更來的可怕。

不過,不只臺灣媒體喜歡聲色效果,其他國家的媒體在這次日本天災中也有相當多的惡行。對於這些惡搞的批評,最經典的莫過於英國記者 Charlie Brooker賤嘴幽默評析 –

當然,還有更多媒體作了危言聳聽、誇大其詞、濫情造作,甚至冒犯受難災民的報導。關於更多惡質報導,請見 JPquake國際媒體羞恥牆

不知道國內是否有節目會回顧這段時間國內新聞所作的過份報導呢 ?

人,他們從生下來就被綁在洞穴裡,不見天日,
手、腳、身體,甚至脖子都被固定在椅子上,
他們身後有面牆,牆上有許多貓、狗、馬、人偶等各種事物,
事物之後又有一束火把,將總總事物的影子投射到這群人眼前的牆上,
於是這群人終其一生,眼睛所看到的東西,都是這些倒影而已,
而他們深深的相信,深深的相信這就是他們真實的人生。

讀完日媒失真 救災怠惰 災民癡等日本媒體才該和台灣學習 這兩篇文章後,我想起柏拉圖《理想國》的地穴寓言 (Allegory of the Cave)。

這兩位新聞媒體工作者如此相信以下幻覺…

  • 如此相信媒體可以擔任批評監督的角色…
  • 如此相信媒體可以作為拯救危機的力量…
  • 如此相信媒體衝撞封鎖是值得稱讚的作為…
  • 如此相信媒體傳聞可以有效統合救災資源…
  • 如此相信媒體的言論就代表民意…
  • 如此相信媒體有權力逼迫政府做事…
  • 如此相信媒體灑狗血、搞激情可以解決事情…
  • 如此相信媒體爆走可以救人命…

就像 Robbin Huang記者失真 新聞失格一文所說,古代的人還以為敲鑼打鼓就可以趕走日蝕呢! 如果純靠新聞媒體落後原始的嘶喊惡搞就可以治國,臺灣早就是世界強國了吧。

不知道這些新聞工作者住在洞穴望著倒影中多久,以至於無法察覺自身所言有多麼荒謬無知。

旁觀者清,我們或可試著從外國人的眼中來觀察這羣穴居人。

Los Angeles Times 的記者 Mark Magnier 曾以 Sir Elton John 來臺時的怒罵記者事件,在 2005 年寫了一篇針對臺灣媒體的深入報導 –They Can’t Handle the Truth (譯: 他們無法應付現實, 他們無能處理事實)說的是臺灣媒體亂象以及改革計劃,節錄部分文字如下

台灣媒體用盡一切辦法製造新聞,即使事件根本不存在。媒體改革者對如此肆無忌憚的媒體文化也毫無辦法。
….
姑且不論大明星的裝腔作勢,但台灣媒體確實是全亞洲最具攻擊性的。在台灣這個地方,文字和電子媒體時常為特定政商勢力搖旗吶喊,而人們對毫無節制的新聞自由看法也呈兩極化:或譽為對執政者大無畏的監督,或視之為亂源。

媒體內外的改革者們早已對媒體的放蕩不羈,以及對他人名譽和生命的破壞力量憂心忡忡,也努力抵抗媒體內部蔚然成風的羶色腥、黨同伐異和腐敗墮落。有些人則辯稱,媒體只是台灣社會的寫照,反映這個亞洲最自由開放社會的現狀。
….
台灣媒體的性格部分反映了它的演進過程,有人把這樣的轉變說成是哈巴狗變成瘋狗。在1988年之前,主流的報紙和電視台都是國民黨政權的傳聲筒,協助他們維持數十年的鐵腕統治。

政府控制的減弱帶來了私有化,但幾家重要的電視台仍由政黨經營,媒體的公正客觀最多只能說是時好時壞。此外,政治在這個兩極對立的社會裡是血腥的格鬥,例如立院諸公的鬥毆直到近幾年才聲勢稍歇。

陳水扁總統領導的民進黨政府,自有一套操縱媒體的手段,或說是操弄真相的手段。「台灣媒體的行徑實在很可恥。」華府戰略暨國際研究中心的葛萊儀(Bonnie Glaser)說:「但政府也經常干預媒體,雙方都肆無忌憚。」
….
世上的政治人物是極少被質疑的,然而台灣記者對政治人物的攻擊性,就像對演藝人員一樣強悍。資訊自由流通,其中一部分是事實。…

事隔六年,Mark Magnier 所說的現象不只沒有改善,反而變本加厲。

自從解嚴後,由於政黨政治的需要,以新聞媒體作為輿論表象工具,這種兩極對立需求,使記者得以遊走在新聞媒體與政治兩種場域之間。而後的政論節目更使得場域結構改變,以至於臺灣培養出角色錯亂的職業 – 記者都想不靠選舉變成代表民意的政客,而政客天天想的上節目發表獨家新聞

但是可怕的不只是角色錯亂,而是權力錯亂。皮耶布迪厄 (Pierre Bourdieu) 在《布赫迪厄論電視》(On Television) 一書中這麼說

「電視的日常使用所必然帶有的政治危險,取決於影像具有的特殊性質,它可以生產所有文學批評稱之為實在的效果的事實,它可使觀眾了解和相信所有它展示的 ‧‧‧‧‧因此,逐漸地,假裝是一個記錄工具的電視,變成了事實的創造工具。」

你分辨不清,到底記者想讓你看見的片斷真相是,他們一面扮演言辭人角色,一面又扮演新聞報導的角色,取得了兼具身份的優勢,取得了特權。久而習慣於這種特權,他們甚至完全信任自己的鏡頭纔是真相,自己的角度才是民眾觀點。

當記者得以自由施展他們想像創作的特權,記錄事實早已不是他們所感興趣的,因為他們已是新的統治階層…宰制的,就是看不清這些支配力的臺灣人民。

如果人們不了解權力而陷入迷蕩,那麼有權的人就正好能夠得利。Andrew Marr

前言

這篇文章目的是分享一些網路資訊傳播的數據觀察。歡迎讀者閱讀筆者其他關於大眾媒體的評論

為免去讀者花費時間解讀數據,論點摘要如下

  • 資訊分享再散佈比率不同等資訊消費比率。
  • 噗浪的資訊再散佈次數偏低。
  • 腥羶新聞仍受點擊偏好。
  • 統計分析波多野結衣之三人成虎資訊傳播效應。

結論 – 終止腦殘媒體行為,先從你我做起,歡迎開始練習媒體識讀

社交網路訊息感染力

Plurktop 的開發者 Mr. Friday 在日本地震發生後幾天,觀察網友的反應,分析 Plurker 對於資訊分享的偏好,推論臺灣網友對於渲染的文章是免疫的,臺灣人不見得看聳動文章,這點我相當悲觀的感到存疑。

根據 Innovation Media Consulting Juan SenorChris o’Brien 在 The Community Newsroom 中描述,我們可以將網友分成四大類

  • 被動讀者 (Passive consumers) 只接受新聞與訊息的人。
  • 評論者 (Commenters) 對新聞故事發表意見、評論或以某種形式反應。
  • 意見領袖 (Networkers) 積極與網站其他讀者互動、聚集內容的人。
  • 創作人 (Creators) 製作高品質內容,像是製作部落格、影音、照片。

而 Plurktop 反應的只是 Commenters 與 Networkers 的數據,Plurktop 的數據價值在於呈現網友節錄重大資訊,或將網友的情報重新發表 (retweeting, RT, replurk, ReP, 轉噗)。過濾出的是社交網路中能產生感染力的內容,而無法反應出一般網友或民眾對於吸收/消費資訊的偏好。

一般網友使用社交網站多半是休閒行為,網友常因為朋友圈關係的公關形象問題,而選取較不嚴肅的話題,也因此產生感染力的往往都是獵奇或趣味性的內容,這點可以同時從 Plurk 正在嘗試的新首頁功能看出。

Plurk 的首頁新聞排行算是與 Twitter 的 reweeting 做出區隔,改以類似 Digg 的投票及時間代謝機制。這種排行比較能夠區分出收視率的偏好差異,此外,在社交網路的資訊再散佈是具名行為,也因此人們可能會閱讀聳動新聞,但為了個人形象而停止再散佈行為。

我們可以觀察最下流聳動且缺乏公信力今日新聞網,這家媒體公司相當擅於引用 Ptt 鄉民文章,跟關心熱門網路議題,你可以注意他們首頁的晚間重點一項比一項腥羶。

今日新聞在成功的 SEO 策略後,目前是臺灣排行第 31 名,甚至比幾家相對嚴肅新聞媒體還受歡迎。 顯然連結與標題的設定都針對讀者偏好調整國。

今日新聞雖然是網路導向的新媒體,且已被 Yahoo!奇摩 移除,但仍可於 MSN 新聞Google News 上見到,我們暫且將他視為大眾媒體之一。

現階段而言在大眾媒體上歐普拉麥可貝到底誰能勝出,這還很難說。

 

資訊消費與再散佈

另外一個可觀察的是資訊的消費與再散佈的形式。我想像的資訊消費者可以分為兩種 – Surfers 與 Drillers

Surfers 總是被動的吸取資訊,他們會看完整份報紙,或固定看一些新聞網站,是主流媒體的忠實觀眾,總是不經思考的單方面的接受各種主流媒體所傳達的資訊。他們單方面的依賴媒體所提供的消息,對媒體有一定的信任感。

而 Drillers 則是主動出擊,報紙常常只看感興趣的版面,網站則會利用合適的 aggregator 彙整相關資訊,而且會利用搜尋引擎尋找特定資料,相對比較具備查證與反思的能力。在網路新聞媒體的選擇上會比較偏好自己的客製化入口網站,或是利用 Google News 這樣的平臺,容易進行彙集與比對不同立場的新聞。

Drillers 會注意非主流網站,例如環保愛好者會注意綠黨的消息,Thinkpad 愛好者會關心 TP非官方情報站等等,日本成人影片愛好者會常看 avno1 等。這些小眾網站會有自己的次文化及語言,他們會有足夠的知識分辨消息的正確性,也會養成資訊蒐集與彙整的技能。

這兩種資訊消費者都會透過社交網路分享資訊,社交網路的朋友圈會是會是最容易產生個人化新聞入口的 aggregator,社交網路會逐漸替代主流新聞入口網站的流量,也因此非主流的資訊可以擴散到被動讀者。

這個現象比較難在 Plurk 上觀察出來。因爲在 Plurk 上進行轉噗需要跨越技術門檻,你得安裝瀏覽器 (FirefoxChrome) 的外掛程式,才能簡便的重新複製別人的訊息與網址,否則只能手動的轉貼。這對許多人而言是一種挑戰,相對侷限訊息的再傳播。

Plurk 相對於其他社交網站像 Facebook, Twitter, 新浪微博 的散佈力道就弱很多。最近有一個明顯的案例,「天空之城」利用 Facebook 的「讚」功能,迅速的佔領 Alexa 台灣百大網站。相較於 Plurk 上吸引人點閱的廣告機器人,點閱數很明顯的可以比較出社交網路的簡便性對於資訊散佈的影響力。

依據 Mr. Friday 的觀察,噗浪上第一時間已經有原生新聞,這是積極的 Drillers 扮演 Prosumer 的角色,讓重大的消息將可以迅速散佈。不過 Plurktop 上的新聞屬性很接近日常電子郵件轉寄的訊息類型,往往是多媒體圖像或感人的故事情節,腥羶的消息會被壓抑,也可以觀察出網路消息的脈絡依然依附者大眾媒體。但 Mr. Friday 的觀察只能看到願意再次散佈連結的網友,而觀察不到默默消費資訊的 Passive consumers。

簡單講,就是口嫌體正直的那些人一直在潛水,躲在雷達下。我們或許可以從「波多野結衣」效應來觀察資訊流動。我認為值得觀察是這類的消息是否因爲正確性可議,而被習慣再次查證的 Drillers 澄清,或者民眾只是引起疑慮並進行討論。

波多野結衣效應

第三個可以觀察的現象是網路謠言如何透過大眾媒體迅速的傳播散佈。

這次日本地震,中國時報與中天新聞率先發出波多野結衣罹難消息。由於波多野外型與氣質接近林志玲,在華人地區有相當高的知名度。但由於波多野小姐在日本並不知名,無法聯絡到本人,也無法證實她的安全狀況。

這個八卦消息令人聯想到 2009 年,同樣也是中國時報記者的葉宜欣所造成的風波,葉宜欣當年也是未經查證 twitter 消息,就發出傳言酒井法子的遺體在北海道摩周湖被發現,標題直接下「酒井法子失聯 網友傳發現遺體」,也製作成電視新聞。以至於未經證實的謠言逆輸出回日本媒體

這次波多野結衣八卦更誇張,中國時報斷言波多野結衣已罹難,而且是在日本媒體或相關論壇找不到任何報導的情況下,迅速變成一則都市傳說 (Urban legend),甚至有人言之鑿鑿的說已經在日本街頭看到經紀人證實,各種改編傳聞很快的亂傳。即便隔天內中國時報與中天新聞就再次澄清,但到 20 日為止仍有許多人相信這則消息。

以下稍微整理可觀察的數據資料,資訊的傳遞大概如下圖,因為缺乏可以量化的數據,因此無法正確的視覺化,只能參考示意,傳遞的路徑是依據時間所判定的假設。

  • 2011-03-12 下午,中國新浪微博傳出波多野結衣於外景拍照時罹難。此消息一出受到數千次轉發,而且隨後有人加油添醋的說已從東京電視臺與經紀人證實。(原始謠言)
  • 2011-3-12 20:55 一劍浣春秋 發表評論。指稱三點可疑理由一,波多野結衣的 Blog 並非是 5 天沒更新,而是從2008年年底就沒更新了。理由二,波多野結衣的經紀人並非是什麼狗屁蒼子,是個男生。理由三,「波多野結衣」並非本名。
  • 2011-03-12 23:19 北京新浪娛樂 JZB 說真實性有待確認
  • 2011-03-12 23:56 2ch avideo2 AV 女優版開始討論中國謠言,均無明確消息。
  • 2011-03-13 02:56 中國時報 翁新涵、劉育良直接引用新浪微博傳聞,兩位記者未經考證就發布新聞「證實」傳聞官網新聞已遭刪除。截止 2011-03-20 為止,依然可於 Yahoo 新聞查到翁新涵、劉育良的錯誤新聞 ()。
  • 2011-03-13 10:18 NOWnews 張力天報導網路消息說真實性仍有待確認 ()。新聞指出可能是誤傳紐西蘭基督城地震死亡名單中的波多祐三子 ()
  • 2011-03-13 11:13 聯合新聞網報導此傳聞
    • 提供幾點網路線索說應是誤傳 1. 藝名不可能出現在死亡名單上 2. 波多野結衣的經紀人不叫「蒼子」3. 確認被海嘯吞沒的攝影師是一名美國人,來自加州,處於失蹤狀態,但不是波多野結衣的攝影師。
  • 2011-03-13 中天新聞上午與中午直接拍攝中國時報,引述此消息(中天新聞報導 – 波多野結衣葬身海嘯 約七萬點閱,  中天新聞- 海邊拍片AV女優波多野結衣葬身海嘯 約八萬點閱。兩則原始官方影音均遭到刪除)
  • 2011-03-13 東森等其他電子媒體跟進報導。(無影音資料,待補充)
  • 2011-03-13 晚間中天新聞澄清報導傳聞。(AV女優波多野結衣 傳罹難!疑烏龍死訊 約一萬九點閱)
  • 2011-03-13 22:08 新浪微博傳出人人網消息 2ch 上有波多野消息 (未經證實)
    • 『波多野結衣現在福島救濟中心。。在2ch上已經得到證實。。廣大宅男歡呼吧… 』
  • 2011-03-14 03:04 中國時報王懿雯發布 「AV女優波多野結衣 生死成謎」() 內容雷同聯合新聞報導。

首先,一開始的消息比較像是給我報報台灣幹得好新聞社哪種戲謔式的玩笑,不過訊息很快的流傳出去,原本刻意弄錯的電視臺名字也被修正,變成一個看似經過證實的傳說。

不過整個故事依然是一個容易戳破的謊言,第一時間北京新浪網或專家一劍浣春秋一下就看穿,一劍浣春秋甚至懶的查證,因為只是一個錯誤百出缺乏真實性的謠言

雖然立刻有好事的人馬上更新 Wikipedia 條目,不過在缺乏證據的狀況下,謠言很快就被更正跟鎖定

但是中時翁新涵、劉育良在沒有查證的狀況下,就把罹難消息發出,這則新聞成為當天中時電子報網站熱門新聞第二名。且中天新聞當天跟著以翻拍中時報紙的方式跟著報導,接著當日東森等其他電子媒體跟進報導後,三人成虎就變成無可否定的「事實」了。這則消息也當然回傳日本與 blog, 論壇 。甚至有中國人為製作了記念歌曲

抓出中時電子報在 YouTube 上從 3/1 到 3/20 總共 1375 筆影音資料,平均每則點閱數約一千上下。其中最熱門的是 319「超級月亮」最接近地球 恐引發天災總共 31 萬次閱覽,剩下最高的大約是 3 萬左右 美基督教團體預言 世界末日就在今年521動物界傳霸凌 成都小熊貓打群架離譜婚禮! 伴娘遭男方親友團性侵秋元優里疑似轉播笑場 日網友痛罵, 然後纔是AV女優波多野結衣 傳罹難!疑烏龍死訊

兩則被備份的片段則各高達七、八萬觀看次數,遠遠超出中時電子報一般的新聞影片觀閱率。

試著用 Plurk 的搜尋功能查看公開發文,3/12-3/20 發言提到「波多野結衣」總共 1215 名網友,發出 1303 筆文章,共 9514 回應。相較於新浪微博大約被提到了六萬次,實在非常少。

波多野結衣的 Google Trends 搜尋索引也出現了一波高峰。

另外一個值得觀察的指標是 BitTorrent Network, 由於法令關係,日本成人影片無法在華人地區公開販售,許多人是透過網路下載取得成人影片。以波多野結衣演出的 75 筆電影編號在公開網路收集到 143 個 種子,會發現 3/12 到 3/20 間,網友製作了 29 筆新 Torrent File 包含波多野結衣演出的影片。以華人論壇每日發表超過兩百多筆新種子,這個比例不算太高。

不過許多網友把舊片重新上傳分享,像是 4F1D17 是去年十月發布的種子,很短時間內就飆升超過三千人上下載。另外像是 E3A673 在發表後 24 小時內即飆升超過 3500 人,算是相當突出的案例。這兩個種子都是 S2M – Encore Volume 7。

另外像是愛唯偵察發出的 C4D05F8115A1,可能是因爲論壇協助散佈,也是相當快速的有許多人下載。一般的種子大概需要兩到三天纔會養成足夠的 Seeders,讓上下載人次飆高。

若計算 3/1 後 143 個種子,估計超過四萬次下載。

揭露: 因收集方式無法辨識國別,以上數據無法鑑別使用者為中國或臺灣網友。以上數據僅供參考使用。

2010-03-23 22:30

依照網友小歪建議,統計相關新聞網站分享次數, 2010-03-23 統計加總超過三萬一千次分享。

「利益揭露: 本文英文書籍連接使用 Amazon Associates Program.」

我相信絕大部分 Linux 開發者都會告訴你,Driver 的開發比 Linux Application 容易許多,即便寫驅動程式聽起來莫名偉大,其實也不過是一段 C/assembly 的組合程式碼。有別於桌面應用程式,Linux kernel API 較少因爲不同的新軟硬體規格,而進行大幅度 API 更動 (參數的簡化倒是十分常見),且由傑出的軟體開發者撰寫的核心架構,穩定性已經十分可靠。

相較與 userland 高度複雜的設定機制,Linux Kernel 暴露的界面十分簡單,在硬體穩定的前提之下,你也難得碰到 API 反應與預期不符合的處境。一般開發者對於核心驅動程式上手的時間,應該不會比開發桌面軟體來的更久。花費時間較多應該是研讀硬體手冊,以及不嚴謹的開發習慣造成臭蟲而所需的除錯時間。

對於深具經驗的開發者,在學習開發 Linux kernel driver 時,最快的方法莫過於直接解開 Kernel tarball, 切進欲開發的 subsystem 目錄,拿出 global, vim, LXR 直接把現成程式碼當作範例學習,很快就可以理解程式結構。不過,偶爾還是需要參考書來驗證對於架構得理解是否正確,另外接觸新的 subsystem 時先閱讀入門文章也可以減少無謂的撞牆期。

所幸,幾位 Linux kernel hacker 也是傑出的文件作者。在 Linux kernel sourc tree 中已有一些各子系統的架構、操作參考文件,涵蓋了基本的 coding style、設計哲學等。另外,像是 Robert Love, Greg Kroah-Hartman (PCI, USB maintainer) 等開發者也出版了完整的書籍,很值得參考。

不過市面上針對 Linux kernel 開發的書籍也不少,那一本是適合你的呢?這類的技術書籍,通常設定不同的讀者羣來設定內容,有的偏重知識,有的偏重操作實務。且出版版次也會影響所介紹的 API 差異,造成無法編譯其範例,但並非舊書,所談之理論就不正確。

以下分享不才對於市面上 2005 年之後出版的核心開發書籍的評論,希望對於想擴充團隊圖書館的朋友提供些參考。

Linux Kernel in a Nutshell 是 2006 年年底發行,作者是 GregKH,使用核心為 2.6.18,部分操作方式或指令已經略有更改。GregKH 基於讓更多新手參與開發行列,針對的讀者是從未編譯過 Linux kernel,想瞭解下載、設定、編譯需求等等細節,適合剛從其他平臺進入 Linux 核心開發的朋友,可以較快熟悉核心編譯的操作程序。書內主要介紹通用性知識,因此未提各 distro 間安裝 kernel 的細節 (如 initrd 建制方式)。

LKN 已採 CC BY-SA 2.5 授權。電子書可於 GregKH 的網頁下載

Understanding the Linux Kernel, Third Edition 這本由兩位博士 Daniel P. Bovet 與 Marco Cesati 所撰寫,從 2000 年底出版之後,到 2005 已經是第三版,介紹的核心是 2.6.11。有中譯版

此書結構以流水帳方式帶過各個子系統,但稍嫌膚淺的僅僅介紹表面的細節,未能給予概觀性的理論說明,也未能直指程式核心。篇幅常用於註記資料結構或函式用途,適合想尋著麵包屑理解 Linux kernel 運作的探險家使用。

Professional Linux Kernel Architecture 在2008 年出版,作者是 Wolfgang Mauerer,作者的背景是量子物理學家。在沒有社群內知名開發者的背書與協助下,他完成了一本巨大的書籍,篇幅高達 1368 頁。

有別於 UTLK,也許是為了非科班出生的讀者,作者試著詳盡的敘述作業系統的基本概念,另外一方面也以程式碼告訴讀者 Linux 的運作模式。

如果你讀不下純粹理論導向的作業系統教科書,而想透過 Linux理解一個作業系統的設計原理,這是適合你的書。本書基於 Linux kernel 2.6.24.

身為知名的 kernal hacker, Robert LoveLinux Kernel Development (3rd Edition) 一書中為讀者拆解 Linux kernel source tree, 直接從設計理念切入,酌以程式碼輔助,讀者需要有作業系統理論素養以及 Linux 開發經驗,才能消化理解筆者的解剖。最新第三版發表於 2010 年初版,更新到 2.6.34.

簡體中譯版 Linux 内核设计与实现 翻譯自 Linux Kernel Development 第二版。正體中文版有維科圖書有限公司出版沈中庸, 沈彥男翻譯的 Linux 核心開發指南, 2/e

Linux Network Internals 的作者是 Christian Benvenuti,發表於 2005 年。少數專談 Linux Network stacks 的書籍,作者循序的從設定工具、核心啟動開始,逐一介紹 封包傳送接受、Bridging、IPv4、Neighboring Subsystem 與 Routing。本書基於 2.6.12.

書中涵蓋了 Layer 2, Layer 3 等協定, 可惜遺漏了 IPv6, IGMP, PIM, Traffic Control, Netfilter, Virtual devices (802.1Q, bonding, IPIP, GRE) 等等重要原件。讀者需要基本開發能力與網路協定常識。此書有中譯版

The Linux TCP/IP Stack: Networking for Embedded Systems 第一版發表與 2004 年,最新第二版 2006 年,針對的版本是 2.6.16,作者是 Thomas F. Herbert。此書對於讀者的定位不明。雖然意圖以一個章節討論嵌入式系統中的 TCP/IP Stack,但除了說明一般嵌入式系統需求外,缺乏實際有用資訊。

書籍想涵蓋各種 TCP/IP Stack 所涵蓋的項目,但章節設計雜亂,從基本的 Network Stack 開始介紹,對於 API 部分又缺乏系統性描述。既無法瞭解網路協定,或撰寫網路程式或作業系統核心架構。

書中時常夾雜敘述與程式碼,令讀者難以連貫消化,讀者需要開啟原始程式碼才能領會作者的。這是一本關於網路協定的原始碼註記,適合已具核心開發經驗的開發者參考使用,考量其版本日期,書籍的功能可能比自行追蹤程式碼的效用還差。另外,若你想瞭解嵌入式系統,這也不是你該買的書。

Linux Device Drivers, 3rd Edition 的作者是 Jonathan Corbet (LWN創辦人)、Alessandro RubiniGreg Kroah-Hartman。即便 LDD3 已經出版許久,還是所有想寫 Linux kernel driver 的第一優先入門參考書阿。此書有中譯版

LDD3 務實的從實做範例開始,帶領讀者理解各種 subsystem,含括了入門操作與基本觀念,對於初次開發 lkm 的開發者提供了燈塔般的指引。

LDD3 授權採 CC BY-SA 2.0,線上版可於此下載 http://lwn.net/Kernel/LDD3/。但由於書籍年代較久,針對的核心版本為 2.6.10,書中範例需要一點調整才能正常運作。已有同好改了幾份擺在  github (jesstess, martinezjavier).

Essential Linux Device Drivers 的作者是長期在 IBM 工作的 Sreekrishnan Venkateswaran,參與 Linux Watch, PDA, Nurse Call Systems, Merlin Patient Care System 等等開發專案。有正體中譯版 Linux驅動程式開發實戰 以及簡體中譯版 精通Linux驅動程序開發

這本書是作者的實務工程筆記,出版於 2008 年,針對核心為 2.6.23/2.6.24,透過此書新手可以從中漫遊一個深具經驗的開發者,如何從原始碼迷霧之中理解 Linux device  driver,老手或可從雜亂的描述中再次驗證自己的理解。

雖然篇幅高達 744 頁,卻被引用程式碼佔了許多頁面。這本書不足以提供開發者撰寫驅動程式的基本觀念,也無法協助理解作業系統概觀。

作者另有一小冊 Debugging Linux Systems 電子書短短九十頁,帶過幾個常見的核心除錯工具與技巧,很有實務參考價值。

《The Linux(R) Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》 出版於 2005 年,作者是 Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski。有中文版,但評價頗差

書名讓人非常期待總算有一本核心介紹書籍 x86 外的硬體平臺,畢竟 RISC vs CISC 架構的不同, endianness, alignment, calling convention 等,應當有許多寫核心驅動程式應該注意得事項。但是整本書只在 2.2 節稍微說一下寫 Assembly 時,PowerPC, x86 的指令差異,剩下的細節根本沒提!

整本書還是著重在一般核心的結構介紹。

而書中除了少量的插圖之外,根本沒有沒有多少邏輯上的說明跟描述。通篇拆解程式碼,對資料結構作註解。這些資訊任何有點基礎的工程師都可自行閱讀程式碼及程式碼註解。新入門工程師還可能因爲書中解釋而疑惑。

除非你想寫沒有價值的書評,否則不建議購買。

Linux(R) Debugging and Performance Tuning: Tips and Techniques 出版於 2005, 作者是 Steve Best。此書少見的從除了應用程式之外,還從核心切入的除錯、效能測試書籍,因爲這方面的技術資訊總是一下就超過保鮮期。

作者試著含括基本的 Profiling 實務開始,介紹 gdb, 應用程式記憶體管理,再講核心的各種資訊界面。很可惜,以一本專講除錯與效能測試的書來說,範例與介紹過於粗淺,以第十二章 Dynamic Probes 為例,其介紹深度可能還比不上 Documents/kprobes.txt 中的概念介紹與 IBM developerWorks 的範例介紹

適合剛切換到 Linux 的開發者,可概略學得各種基本開發工具者的入門資訊。

2011-03-17 18:00 更新

增列相關中譯版本連接,感謝 ansoncat 告知資訊。

2011-05-15 18:00 更新

修正 UTLK 版本為 2.6.11, 補充 ULNI 版本為 2.6.12. 感謝讀者 Wayling 指出錯誤。