Embedded Linux Primer 2nd Edition – Christopher Hallinan

在PC上安裝Linux很簡單,上網下載個今期最新最流行的distribution,然後跟著畫面步驟照做就可以,基本上與安裝Windows同樣方便快捷。在embedded system上安裝Linux,就沒有這樣簡單了,embedded system規格千萬化,就算是使用同一塊晶片做CPU,不同的開發板也有不同設備。若果是熱門多人用的開發板(如Raspberry Pi, BeagleBoard等)還好,用家社群可以找到不同package的Linux系統,有些冷門的開發板就只有廠家提供的package,若果不適合或廠家不再更新,就要自已落手落腳去compile合用的Linux。

這本書2011年出版,當年Linux kernel版本還是2.6,現在已經去到4.14。在科技日新月異的電腦界,三四年已經面目全非,看這本六年前出版的「舊書」,內容會不會過時?其實作業系統的轉變非常緩慢,雖然每個版本的Linux也有新功能,但始終都是建立在UNIX架構基礎上,所有接近CPU硬件的低階知識都是累進的,畢竟CPU架構十多年來也沒有大變化呀。說到要從source code開始去compile Linux,網上料資一是太零碎一是太深,除非付費報名上堂去學,否則要靠這本書當指路明燈。不過這本書並非入門書,對讀者程度有頗高的要求,一是要對Linux作業環境有一定認識,二是要有寫程式和搞硬件的經驗,除非是工作需要或電腦科的學生,應該沒有人會自己compile Linux。

這本書的內容比之前看那本How Linux Works更低階,首兩章講什麼是embedded system,其實會看這本書又怎會不知道,不過開場白總不能避免。第三章正式進入戲肉,講解kernel的source code的架構,粗略介紹如何config。這本不是講kernel的專題書,大部份compile Linux的人都不會改動個kernel,所以不用講太深入。之後兩章分別講kernel init同user space init,平時開機見kernel印一大堆message出來,終於知道那些message是什麼。這本書解釋root file system十分好,之前看其他地方了幾次解釋都看不明白,今次終於睇得明。另一章是教寫device driver亦是本書重點,用一個dummy drive做例子,可以跟著書照做自己試下寫。

之後的章節很有系統介紹整個embedded Linux需要用到的各種工具,從compiler到debugger到build system,讓讀者知道有什麼東西可供使用,然後可以自己google更進一步的資料,如何連名稱也不知道,想google也無從查起。原本我打算用Yocto去compile,不過經這本書提醒,再看看網上的比較資料,初學者還是用Buildroot較容易上手。

之前只是跑其他人寫落的script去compile kernel,感覺很不實在,完全不知道自己在做什麼,如果有什麼事唔work,只能叫人幫手整,自己完全幫不上忙。睇完這本書,我才覺得有足夠的知識,去應付工作上可能遇到問題。我有自知之明,我還未夠料親自落手落腳去fix問題,不過至少填寫bug report時,不用好白癡咁乜都只係識話唔work,至少識話俾人邊度唔work有乜野要fix。