Linux設備驅動開發詳解(基於最新4.0內核)

Linux從未停歇腳步。Linus Torvalds,世界上最偉大的程序員之一,Linux內核的創始人,Git的締造者,仍然在沒日沒夜的合併補丁,升級內核。做技術,從來沒有終南捷徑,拼的就是坐冷板凳的傻勁。

         這是一個連閱讀都被碎片化的時代,在這樣一個時代,人們趨向於激進、浮躁。內心的不安寧使我們極難靜下心來研究什麼。我見過許許多多的Linux工程師,他們的簡歷書寫着“精通”Linux內核,有多年的工作經驗,而他們的“精通”卻只是把某個寄存器從0改成1,從1改成0的不斷重複;我見過許許多多的Linux工程師,他們終日埋頭苦幹,敲打着自己的機器和電路板,卻從未冷靜下來思考,並不斷重構和昇華自己的知識體系。

         這是要把牢底坐穿的程序員。這樣“忙忙碌碌”的程序員,從來都不是什麼好程序員。

優秀的程序員,最優秀的品質是能夠內心寧靜地學習與思考問題,透析代碼背後的架構、原理和設計思想。沒有思想的代碼是垃圾代碼,沒有思想的程序員,只是在完成低水平重複建設的體力活。很多程序員,連自己寫的代碼最後在機器裏面怎麼跑都從不過問,很多事情莫名其妙地發生了,很多bug莫名其妙地消失了……永遠都是得過且過。

         由此,衍生出《Linux設備驅動開發詳解》新版的第一個出發點,那就是帶給讀者更多關於Linux開發背後思想的講解,奠定根基。《Linux設備驅動開發詳解(基於4.0內核)》呈現給讀者的,更多的是一種思考,而不是知識點的簡單羅列。

         這次更新更進一步加強了對驅動編程所涉及Linux內核最底層機理的講解,並對前2版的基礎理論部分進行了大篇幅地重寫,實例代碼也被大面積重構。大幅度修改的內容包括中斷、定時器、進程生命週期、uevent、併發、編譯亂序、執行亂序、等待隊列、I/O模型、內存管理等。這些知識點是如此重要,是真正證明程序員對Linux理解的部分,只有打好根基,才能遊刃有餘。

         新版刪除了《Linux設備驅動開發詳解》第一版、第二版大量描述各種具體具體驅動類型的章節比如Sound、PCI、MTD、TTY等,而將更多焦點轉移到了驅動編程背後的內核原理, 並試圖從Linux內核上百個驅動子系統中尋找出內部的規律,以培養讀者舉一反三的能力。

         Linux內核有上百個驅動子系統,這一點從內核的drivers子目錄就可以看出來:



         好吧,傻子纔會一個目錄一個目錄地去看,一個目錄一個目錄地從頭學起。我們勢必要尋找各種驅動子系統的共性,摸索規律。本次更新,我們將更多看到各驅動子系統的類比,以及驅動子系統的層次化設計。

         技術工作,從來都不是一勞永逸。這世界變化太快,當前技術革新的速度數倍於我們父輩祖輩祖祖輩經過的任何時代。證明你是真球迷還是僞球迷的時候到了。這是僞程序員的地獄,也是真程序員痛苦中的狂歡。

         從浩如煙海的知識體系中、不斷更新的軟件版本中終生學習,不斷攻克一個個挑戰,獲取新的養分,尋找新的靈感,這實在是黑暗碼農生涯中不斷閃現的璀璨光芒。

自本書第一版、第二版發佈後,內核版本不斷刷新,3.0、3.1、3.2…3.19、4.0、4.1,變化的是軟件的架構,不變的是Linus的熱情。

這無疑是本次升級的第二個出發點,更新Linux驅動編程的知識體系以符合最新的時代。所以,本次更新大量新增了關於Device Tree、ARM Linux移植、Linux電源管理、GPIO、clock、timer、pinmux、DMA等的內容。我們的操作平臺,也轉移到了QEMU模擬的4核Cortex-A9電路板,書中的實例,基本都轉移到了市面流行的新芯片。

         最近兩三年,老是聽到許多程序員抱怨,缺乏講新內核的資料、缺乏從頭到尾講Device Tree的資料,但是我想說,這實在不是什麼難點。難點仍然是本書第一個出發點要解決的問題,如果有好的基礎,以優秀程序員極強的學習能力,應該很快就可以掌握這些新知識。機制沒有變,變化的是隻是策略。

         所以學習能力,也是優秀程序員的又一品質。沒有人生下來就是天才,良好學習能力的培訓,本身也是通過不斷學習來獲取的。可以說,學的越多的人,學新東西一定越快,學習能力也變得越強。因爲,知識的共通性實在太多。

         讀者閱讀本書的思路,不應該是企圖把它當成一本工具書、查API的書,而是一本梳理完整理論體系、開發思想、軟件架構的書。唯如此,我們才能適應未來新的變化。

         不知不覺中,離本書的第一次出版已經過去了七個年頭。而自本次更新開始實施至今,也經過了一輪寒暑更替。歲月如歌,七載而下,我已非當年的意氣青年。本書一版,二版,再版,這實非當初的預料。回首過去,我們驚奇地發現,這七年,正好是Linux由弱而盛,節節勝利的七年。也是許多如我一般的碼農成家立業、結婚生子的七年。未來七年的Linux會是什麼樣子,我們無從預料。本書是否會有更進一步的新版,我們也無法預知,一如Linux沒有路線圖。社區和生態就是最好的Roadmap,萬事隨緣,而唯一不變的只是激情。

         時代的滾滾車輪,推動着Linux內核的版本不斷向前,也推動着每個人的人生。紅塵滾滾,

         我不去想是否能夠成功,

         既然選擇了遠方,

         便只顧風雨兼程。

         

         最後,本書能得以出版,要感謝帶領我向前的人生導師和我的衆多小夥伴,他們或者在我人生的關鍵時刻改變了我,或者帶給了我黑暗程序生涯中無盡的快樂和動力。我的小夥伴,他們力挺我,鼓勵我,也辱罵我,奚落我,這些,就是真摯的友情。

         謹以此書,致以對楊平先生、何昭然、方毅偉、李華毅、宋志武、杜向龍、葉祥振、劉昊、王榕、何曄、王立賽、曾過、劉永生、段丙華、章君義、王文琪、盧鵬、劉濤、徐西寧、吳赫、任橋偉、秦龍廷、胡良兵、張家旺、王雷、Bryan Wu、Eric Miao、Qipan Li、Guoying Zhang、陳健鬆、Haoyu Zhong、劉洪濤、季久峯、邴傑、孫志忠、吳國舉、Bob Liu、趙小吾、賀亞鋒、劉仕傑、Hao Yin等老師和小夥伴的深深感激;謹以此書,致以對我的父母大人、老婆大人、兄長和姐姐、偉大丈母孃的深深感激,本書新版的寫作時間超過一年,其過程是一種巨大的肉體和精神折磨,沒有他們的默默支持和不斷鞭策,是不可能完成的;謹以此書,致以對爲本書做出巨大貢獻的編輯、策劃老師們,尤其是張國強老師深深的感激!

         由於篇幅的關係,我沒有辦法一一列舉所有我要感激的人入感謝名單。但是,我這些年從你們那裏獲得的,遠遠大於我付出的。所以,內心深處,唯有懷着對小夥伴深深的感恩,不斷前行。歲月如歌,吾歌狂行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章