MOTO大大,小弟承受不起"高手"這個稱呼啊,真正的高手應該是像 jserv兄這號人物吧!小弟只是恰巧在這行混口飯吃而已.....
看到那麼多人對 Embedded Linux 有興趣,小弟妄自菲薄想給大家一點意見,
大家聽聽就算了,這只是我的個人意見,可以的話,最好再聽聽別人的意見。
其實如果想玩 Embedded Linux,不一定真的要去買一些 RISC 架構的版子或設備來玩,
因為這要看你玩 Embedded Linux 的心態。
如果你只是單純想要 DIY 讓你的 Linux可以在 PC 以外的機器上跑,比如說 PS2、IPAQ....。那麼你可以去拍賣網站買一些舊貨,然後參考MOTO大大推薦的那本書,或者參考一些相關網站(比如
http://www.handhelds.org ),找一些人家已經準備好的 package,閱讀相關文件或查詢mailing list的相關問題照著做就可以了。
上面的情形,是相當適合初入門或只是想把你的Linux PDA炫耀給女朋友看的玩家(雖然她通常搞不清那有多偉大)。但是如果你野心比較大,比如說,你也想在 embedded system 這行混飯吃或是你想效法 Linus 試試自己的能耐,那麼這邊給你幾個建議(尤其是那些非資工、電機相關背景的朋友)....。
1. 如果你是學生,不妨去修修 computer architecture 和 OS 的課。如果你沒修過,又不是學生,這邊推薦你兩本書(小弟不太喜歡白算盤和恐龍)
[computer organization]
http://www.tenlong.com.tw/BookSearch/Se ... 4&sid=9899
[Design of the UNIX Operating System]
http://www.tenlong.com.tw/BookSearch/Se ... &sid=18285
2. 把 C 和 shell script 學好
不要老是只會 Hello World,試著在 Linux 下用 C 去寫一個自己的簡單 cd player,或是利用 shell script 去寫一個可以方便控制 cdrdao 或 cdrecord 的燒錄小程式。
當然,這邊也推薦你幾本書。
Advanced Linux Programming
http://www.advancedlinuxprogramming.com/downloads.html
(你高興的話,也可以看 Stevens 寫的 APUE,資策會有翻中譯本)
Advanced bash scripting guide
http://www.tldp.org/LDP/abs/html/
3. 學著寫 Linux Device Driver
Alessandro寫的聖經級手冊 - Linux Device Driver,你是不是興高采烈的在天瓏買到手,欣賞完封面的脫韁野馬版畫並且讀完序言和第一章之後就放到離你書桌最遠的櫃子上呢?
如果你想真正的學 Embedded Linux,我想這本書才是你真正應該花苦心去閱讀並且反覆思考其中道理的一本書。特別是裡面的sample code,都非常適合你好好的去閱讀並嘗試做修改和測試。
也許有人會問,這本書不是在講x86系統的書嗎?我想許多人認為非得要拿RISC或甚麼特殊裝置來玩才稱得上是在學習 Embedded Linux,但是我個人認為只要你使用 Linux嘗試去控制各種硬體裝置就都算是在學習 Embedded Linux了。許多人捨近求遠想去買一些昂貴的實驗版或裝置,卻不看看你身邊是否有一些現成便宜的裝置可供使用。好比說為什麼不買塊199元的 DLINK530 VIA晶片組的網卡來研究網卡驅動程式( VIA 的網站尚提供 datasheet 下載)和 PCI 裝置。
我個人覺得定期聚會的讀書會是沒有意義的,你只有看書然後發表心得,這對你的技術提昇沒有幫助,你一定要去實做,然後再討論。而且,定期性的聚會,是不是每個人都有熱忱和耐性持續的參加,也是有問題的。倒不如,約些三五好友就某個主題,最好是大家身邊唾手可得的硬體裝置在家自行研究,等研究有些心得了再於這邊發表文章討論或交換 source code,這樣比較有實質的意義而且也可增加摩托學園精華文章的數量。
如果看到這邊,你還是熱血沸騰,滿腔幹勁,那麼小弟給兩個提議,有興趣的朋友不妨試試:
1. 本站的脫線兄,目前服務於國小教職,對於在國民教育推廣 Linux 有極大的熱忱,可是他最近好像對 KNOPPIX 蠻傷腦筋的,因為他希望能把 KNOPPIX 修改成適合他的學生使用。大家不妨試著幫忙他,一方面可鍛鍊鍛鍊自己的技術,而且搞不好還可弄個摩托學園版的 KNOPPIX。
2. 之前小弟的公司有與某大學進行建教合作,小弟當時負責教育訓練,當時給工讀生的家庭作業如下,有興趣的朋友不妨試試,其實不會很難,但是有助於你瞭解一些基本觀念。
[習題]請參考 Linux Device Driver 一書第八章的parallel接腳圖,將GPIO PIN接上LED(LED燈一個大約五至十元,像parallel port 有8個GPIO,所以你可以接8支LED,另外你大概會需要買一個母對母的轉接頭以方便插上LED)。寫一個 device driver 去實做這排LED燈各種不同的閃爍模式,再寫一個user space 的 application 利用這個 device driver 所提供的 system call 來控制LED燈的開啟、關閉、選擇不同的閃爍模式和loop的次數。(提示:利用ioctl())
以上只是小弟個人的一些建議,供大家參考,謝謝各位