官术网_书友最值得收藏!

前言(序)

2007年8月,我從上家公司辭職出來,放棄了剛上市公司骨干中層干部的職位,放棄了豐厚的待遇。

自1996年畢業以來,我一直從事嵌入式系統和Linux內核一線技術開發工作,我所承擔的任務和項目基本都是由自己獨立完成,即使擔任了硬件部主管或技術總監職務,我對自己專長的工作仍是親歷親為的。一方面,自己熱愛這項工作,每攻克一個難題都能體驗到莫大的成就感(相信技術工程師都有過這種體會);另一方面,目前國內做嵌入式系統和Linux內核開發的工程師供不應求,水平高的更是奇缺,相關職位的待遇相對其他職位的偏高,少招一個新員工就為公司節省一筆開支,減輕一份負擔,所以對于比較簡單和事務性的工作我會安排給其他員工,而難度大的工作我幾乎都親自上陣。我習慣加班,來了興致甚至通宵達旦,憑著這股干勁,經過多年實踐積累,自己常能在短時間內解決很多人長時間沒有解決的問題。在我工作中接觸到Linux之初,為了更好更深入地學習嵌入式系統和Linux內核開發技能,我在業余時間自己花錢設計制作了MC68VZ328和S3C4510兩種開發板以及簡易JTAG下載、燒寫線纜,并成功移植、固化μClinux到這兩個開發板上——到目前為止,我已經在當今流行的各種嵌入式硬件平臺(包括單片機、MC68K、PowerPC、ARM、MIPS、DSP)和嵌入式操作系統(包括VRTX、VxWorks、PSOS、Linux)上都做過實際開發工作,編寫、移植或者調試過UART、Ethernet、I2C、HDLC+E1、LCD、Keyboard、VFD、SCSI、SATA、IDE、CVBS、VGA、PCI、USB等接口和設備的驅動程序。

在與Linux打交道的這么多年里,我一心想把這個開放源碼的優秀操作系統吃透,并理所當然地覺得,隨著時間的推移和所做項目的增多,自己一定會逐漸認識Linux內核的真實面目;可是一直以來,每當我想在腦海中對Linux內核各組件及其原理進行全面系統概括描述時卻總是如鯁在喉,不得其解,這讓我心里一直潛藏著一絲隱憂和茫然:由于不了解Linux內核原理,盡管自己能憑借10多年的工作經驗通過適當方法很快把任務完成、把難題解決,但卻不能在碰到難題一開始就從原理上把握應該從哪兒下手,怎樣做、做什么,缺乏全局預見性和高瞻遠矚的能力,這種心中“沒底”的感覺驅使我去更深入鉆研、發掘,去力爭做到心中“有底”;這也讓我意識到,雖然經過10多年的勤奮工作,自己已經積累了足夠的工作經驗,不過由于平時很少閱讀理論書籍和Linux內核源代碼,Linux內核原理知識并沒有像我原來想象的那樣自然而然地裝進自己的大腦,所以自己的理論水平仍然很欠缺,要想提高就必須經過一個艱苦的沉淀過程;由于平時工作忙、任務緊,我很少有時間來做系統的總結和歸納,在這種情況下,出于對公司和自己負責任考慮,我決定辭去工作,在家專心、系統研讀Linux內核源代碼,同時也對自己10多年的工作進行一次全面概括和總結。

我花了半年多時間閱讀針對ARM處理器平臺的Linux 2.6.10內核源代碼,記了2000多頁的源代碼閱讀筆記和心得。2008年4月,我在家坐不住想去找工作——辭職前,我常開車去兜風或帶家人郊游,辭職后不久,為了節省支出,我把車賣了,這半年多時間里,我除了早晨出去鍛煉外,一天難得出門,沒有娛樂,沒有朋友交流,沒有旅游,這對于一個身處物欲橫流的繁華都市鬧市區的人來說會是一種怎樣的生活體驗呢?更何況對于英俊瀟灑、才華橫溢、熱情好動的本人呢(?)——于是我在腦海中總結半年多來的學習成果和收獲,雖然感覺眼前比以前亮堂了許多,但仍是朦朦朧朧,似是而非,不得已只好強迫自己繼續坐下去。我把以前的工作筆記、工作總結、自制的開發板全部找出來,又買了幾本介紹Linux內核原理、驅動程序編寫方面的理論書籍,把所有這些與半年多來閱讀Linux 2.6內核源代碼的筆記和心得進行交叉學習,相互印證,加深理解,同時對這些資料再次進行總結、歸納、記筆記、寫心得;到2008年6月,當我再次回頭清理頭緒,翻看新的筆記時,頓然感覺Linux 2.6內核的輪廓漸漸清晰起來,我很興奮并突發想象:何不將新的筆記、心得整理完善一下,那樣不就可以編輯成一本介紹嵌入式系統硬件原理及軟硬件設計流程與方法、嵌入式Linux內核原理及開發方法與技能、常見設備工作原理及其驅動程序的編寫方法的完整的書了?聯想到現在越來越多的年輕人開始熱衷于嵌入式系統Linux內核開發這項高科技、高薪工作,卻苦于找不到一本從實戰出發全面深入介紹這方面技術的指導書,他們有的不惜花重金去參加培訓,可是當這些培訓后的部分人到我那面試時,我卻發現他們所學甚淺,不懂原理,只知道操作流程,有的甚至連基本的流程都不熟悉;加上以前在一些嵌入式系統和Linux論壇中看到很多網友呼吁有經驗的開發人員把自己的工作經驗總結一下寫出來供大家參考,這更讓我有了寫這本書的沖動。于是我又耐心坐了3個多月,繼續總結、歸納、提煉、整理、完善,到了2008年9月,原來的筆記和心得就濃縮成了《嵌入式系統Linux內核開發實戰指南(ARM平臺)》,我也實現了一次自我超越,從“摸著石頭過河”的尷尬與無奈走向了“不管風吹浪打,勝似閑庭信步”的瀟灑與從容!

《嵌入式系統Linux內核開發實戰指南(ARM平臺)》包含了我11年的工作筆記、經驗總結,一年多來對ARM處理器平臺Linux 2.6內核源代碼的閱讀心得和體會以及對幾本理論參考書的閱讀筆記和心得,這本書是從這些內容中提煉出來的,是我對自己12年工作和學習的概括與總結。

《嵌入式系統Linux內核開發實戰指南(ARM平臺)》以嵌入式系統Linux內核開發的整個過程為線索,按照先硬件后軟件、先易后難的順序編寫。書中內容覆蓋了嵌入式系統Linux內核開發的各個方面,全書由“嵌入式系統硬件開發(共10章)”、“Linux內核開發初步(共6章)”、“Linux 2.6內核原理(共9章)”、“Linux內核開發高級指南(共7章)”四部分組成,共32章。其中“嵌入式系統硬件開發”部分主要以ARM處理器為例介紹了嵌入式處理器的特點、內部原理以及硬件開發調試流程和方法,還介紹了如何制作簡易JTAG線纜和編寫燒寫程序;“Linux內核開發初步”部分主要介紹各種bootloader、Linux開發環境的創建、Linux內核的配置和編譯以及根文件系統的制作,還簡單介紹了μClinux;“Linux 2.6內核原理”部分是本書的核心,該部分以Linux 2.6.10內核源代碼為基礎深入剖析了Linux 2.6內核的各個組成部分及其實現原理,包括Linux啟動過程、內存管理、進程調度、文件系統、模塊設計、異常中斷處理、軟中斷和工作隊列、并發和競態、設備驅動程序等,是以源代碼閱讀心得和體會+參考書閱讀筆記和心得+源代碼詳細注釋方式編寫的,因為Linux源代碼是Linux操作系統理論的實踐成果,講解Linux內核理論的同時加上必要的源代碼注釋就會非常直觀,否則恐怕又會是乏味的天書;“Linux內核開發高級指南”部分則介紹了一些比較高級的技能和開發人員平時很少關注的方面,這部分包括Linux系統參數設置、內核調試、內核移植、內核優化、定時器、雜項以及編譯鏈接文件說明等。

《嵌入式系統Linux內核開發實戰指南(ARM平臺)》適合已經或者志愿從事嵌入式系統Linux內核開發各階段、各層次的人員閱讀。初級開發人員包括在校大學生可以從中找到努力的方向;中級開發人員可以從中找到更深層細致的內容和有效的方法;高級開發人員可以從中發現不少解決難題的點睛之筆——總之我希望并相信這本書能對愛好或從事嵌入式系統和Linux內核開發的讀者有一定幫助,使他們在技術開發的道路上少走一些彎路!

當然,一本書不可能包括全部細節,Linux 2.6內核源代碼本身就遠不是一本1000多頁的書所能容納的。事實上,隨著寫作的深入,我發現要寫和想寫的東西越來越多,這或許就是知識的擴張效應吧:當我們了解的東西很少的時候,未知領域和已知領域的分界線只是一個很小的圈,隨著我們知識的增加和積累,這個圈慢慢向外伸展,越來越大,于是我們就感覺到不懂的東西越來越多而不是越來越少。正是這種感覺激發了人們的求知欲,有多少科學家特別是我們中國的科學家,把自己的一生都默默奉獻給了國家的科學發展事業,成就了中國世界科技大國的地位!他們從不奢望也不屑獲得所謂的“諾貝爾”!——但是無論如何,這本書只能就此告一段落,如果有可能,我會把更多內容和細節寫入下一本書中。

由于書中內容太多,其中難免出現一些錯別字或文筆不通的現象,也可能會有錯誤,如果讀者碰到這種情況,請在廣泛查閱相關資料并親自實驗的基礎上得出并堅持正確的結論,不要迷信書本和權威,要敢于懷疑,勤于思考和驗證,這樣才能更快地進步,這才是科學態度。我誠摯期望讀者能向我指出書中的錯誤和不足,這樣我就能與讀者共同進步和提高!

最后我要特別提到,在學習和寫作的整個過程中,我常看《恰同學少年》——想到那么多平凡而壯麗的人生,自己一年多來吃的這點“苦”又算得了什么呢?呵呵,毛毛雨而已!

2008年12月26日

作者創建了網站http://www.931226.com作為與讀者交流的平臺,分享心得,共同進步!為什么這個網站域名為“931226”呢?希望聰明的讀者找到答案。

主站蜘蛛池模板: 股票| 镇远县| 榕江县| 鲜城| 新平| 松江区| 鱼台县| 平江县| 平舆县| 报价| 罗平县| 什邡市| 贺州市| 荣成市| 东辽县| 双牌县| 象山县| 中西区| 视频| 永福县| 绩溪县| 镇雄县| 寿阳县| 沁阳市| 镇沅| 徐州市| 潞西市| 栾川县| 新平| 那坡县| 肥西县| 神农架林区| 武强县| 天门市| 策勒县| 平凉市| 旬阳县| 伊通| 深州市| 江安县| 江都市|