深入Linux設(shè)備驅(qū)動程序內(nèi)核機制

出版時間:2012-1  出版社:電子工業(yè)出版社  作者:陳學(xué)松  頁數(shù):540  
Tag標(biāo)簽:無  

內(nèi)容概要

  這是一本系統(tǒng)闡述Linux設(shè)備驅(qū)動程序技術(shù)內(nèi)幕的專業(yè)書籍,它的側(cè)重點不是討論如何在Linux系統(tǒng)下編寫設(shè)備驅(qū)動程序,而是要告訴讀者隱藏在這些設(shè)備驅(qū)動程序背后的那些內(nèi)核機制及原理。作者通過對Linux內(nèi)核源碼抽絲剝繭般的解讀,再輔之以精心設(shè)計的大量圖片,使讀者在閱讀完本書后對驅(qū)動程序前臺所展現(xiàn)出來的那些行為特點變得豁然開朗。
本書涵蓋了編寫設(shè)備驅(qū)動程序所需要的幾乎所有的內(nèi)核設(shè)施,比如內(nèi)核模塊、中斷處理、互斥與同步、內(nèi)存分配、延遲操作、時間管理,以及新設(shè)備驅(qū)動模型等內(nèi)容。為了避免讀者迷失在某一技術(shù)細(xì)節(jié)的討論當(dāng)中,本書在一個比較高的層面上進行展開,以一種先框架再細(xì)節(jié)的結(jié)構(gòu)安排極大地簡化了讀者的閱讀與學(xué)習(xí)。
本書不僅適合那些在Linux系統(tǒng)下從事設(shè)備驅(qū)動程序開發(fā)的專業(yè)技術(shù)人員閱讀,也同樣適合有志于從事Linux設(shè)備驅(qū)動程序開發(fā)或?qū)inux設(shè)備驅(qū)動程序及Linux內(nèi)核感興趣的在校學(xué)生等閱讀。對于沒有任何Linux設(shè)備驅(qū)動程序開發(fā)經(jīng)驗的初學(xué)者,建議先閱讀那些討論“如何”在Linux系統(tǒng)下編寫設(shè)備驅(qū)動程序的入門書籍,然后再閱讀本書來理解“為什么”要以這樣或者那樣的方式來編寫設(shè)備驅(qū)動程序。

作者簡介

  陳學(xué)松,曾任職于Intel,Marvell等半導(dǎo)體公司,9年以上Linux內(nèi)核、設(shè)備驅(qū)動程序、嵌入式Linux
BSP等領(lǐng)域的開發(fā)經(jīng)驗。專注于Linux系統(tǒng)內(nèi)核、BIOS、文件系統(tǒng)及軟件虛擬化等技術(shù),曾模仿Linux內(nèi)核編寫過微型操作系統(tǒng)。工作之余喜歡以文章的形式將自己的學(xué)習(xí)心得進行總結(jié),善于運用圖形等元素將復(fù)雜概念具體化,梳理脈絡(luò)而不拘于細(xì)節(jié)。05年在IBM
Linux開發(fā)者論壇所發(fā)表的《解析Linux中的VFS文件系統(tǒng)機制》則堪稱作者這一寫作特色的代表之作,該文發(fā)表后曾被多家技術(shù)網(wǎng)站、論壇及個人博客所轉(zhuǎn)載。
  喜歡游泳,四肢發(fā)達,胸?zé)o城府。古文功底頗深,少時涉獵甚廣,現(xiàn)在則主要閱讀一些歷史題材類的書籍,熟讀《三國志》。目前任職于AMD上海研發(fā)中心,主要從事Linux顯卡驅(qū)動等領(lǐng)域的研發(fā)工作。

書籍目錄

第1章 內(nèi)核模塊
 1.1 內(nèi)核模塊的文件格式
 1.2 EXPORT_SYMBOL的內(nèi)核實現(xiàn)
 1.3 模塊的加載過程
 1.3.1 sys_init_module(第一部分)
 1.3.2 struct module
 1.3.3 load_module
 1.3.4 sys_init_module(第二部分)
 1.3.5 模塊的卸載
 1.4 本章小結(jié)
第2章 字符設(shè)備驅(qū)動程序
 2.1 應(yīng)用程序與設(shè)備驅(qū)動程序互動實例
 2.2 struct file_operations
 2.3 字符設(shè)備的內(nèi)核抽象
 2.4 設(shè)備號的構(gòu)成與分配
 2.4.1 設(shè)備號的構(gòu)成
 2.4.2 設(shè)備號的分配與管理
 2.5 字符設(shè)備的注冊
 2.6 設(shè)備文件節(jié)點的生成
 2.7 字符設(shè)備文件的打開操作
 2.8 本章小結(jié)
第3章 分配內(nèi)存
 3.1 物理內(nèi)存的管理
 3.1.1 內(nèi)存節(jié)點node
 3.1.2 內(nèi)存區(qū)域zone
 3.1.3 內(nèi)存頁
 3.2 頁面分配器(page allocator)
 3.2.1 gfp_mask
 3.2.2 alloc_pages
 3.2.3 __get_free_pages
 3.2.4 get_zeroed_page
 3.2.5 __get_dma_pages
 3.3 slab分配器(slab allocator)
 3.3.1 管理slab的數(shù)據(jù)結(jié)構(gòu)
 3.3.2 kmalloc與kzalloc
 3.3.3 kmem_cache_create與kmem_cache_alloc
 3.4 內(nèi)存池(mempool)
 3.5 虛擬內(nèi)存的管理
 3.5.1 內(nèi)核虛擬地址空間構(gòu)成
 3.5.2 vmalloc與vfree
 3.5.3 ioremap
 3.6 per-CPU變量
 3.6.1 靜態(tài)per-CPU變量的聲明與定義
 3.6.2 靜態(tài)per-CPU變量的鏈接腳本
 3.6.3 setup_per_cpu_areas函數(shù)
 3.6.4 使用per-CPU變量
 3.7 本章小結(jié)
第4章 互斥與同步
 4.1 并發(fā)的來源
 4.2 local_irq_enable與local_irq_disable
 4.3 自旋鎖
 4.3.1 spin_lock
 4.3.2 spin_lock的變體
 4.3.3 單處理器上的spin_lock函數(shù)
 4.3.4 讀取者與寫入者自旋鎖rwlock
 4.4 信號量(semaphore)
 4.4.1 信號量的定義與初始化
 4.4.2 DOWN操作
 4.4.3 UP操作
 4.4.4 讀取者與寫入者信號量rwsem
 4.5 互斥鎖mutex
 4.5.1 互斥鎖的定義與初始化
 4.5.2 互斥鎖的DOWN操作
 4.5.3 互斥鎖的UP操作
 4.6 順序鎖seqlock
 4.7 RCU
 4.7.1 讀取者的RCU臨界區(qū)
 4.7.2 寫入者的RCU操作
 4.7.3 RCU使用的特點
 4.8 原子變量與位操作
 4.9 等待隊列
 4.9.1 等待隊列頭wait_queue_head_t
 4.9.2 等待隊列的節(jié)點
 4.9.3 等待隊列的應(yīng)用
 4.10 完成接口completion
 4.11 本章小結(jié)
第5章 中斷處理
 5.1 中斷的硬件框架
 5.2 PIC與軟件中斷號
 5.3 通用的中斷處理函數(shù)
 5.4 do_IRQ函數(shù)
 5.5 struct irq_chip
 5.6 struct irqaction
 5.7 irq_set_handler
 5.8 handle_irq_event
 5.9 request_irq
 5.10 中斷處理的irq_thread機制
 5.11 free_irq
 5.12 SOFTIRQ
 5.13 irq的自動探測
 5.14 中斷處理例程
 5.15 中斷共享
 5.16 本章小結(jié)
第6章 延遲操作
 6.1 tasklet
 6.1.1 tasklet機制初始化
 6.1.2 提交一個tasklet
 6.1.3 tasklet_action
 6.1.4 tasklet的其他操作
 6.2 工作隊列work queue
 6.2.1 數(shù)據(jù)結(jié)構(gòu)
 6.2.2 create_singlethread_workqueue和create_workqueue
 6.2.3 工人線程worker_thread
 6.2.4 destroy_workqueue
 6.2.5 提交工作節(jié)點queue_work
 6.2.6 內(nèi)核創(chuàng)建的工作隊列
 6.3 本章小結(jié)
第7章 設(shè)備文件的高級操作
 7.1 ioctl文件操作
 7.1.1 ioctl的系統(tǒng)調(diào)用
 7.1.2 ioctl的命令編碼
 7.1.3 copy_from_user和copy_to_user
 7.2 字符設(shè)備的I/O模型
 7.3 同步阻塞型I/O
 7.3.1 wait_event_interruptible
 7.3.2 wake_up_interruptible
 7.4 同步非阻塞型I/O
 7.5 異步阻塞型I/O
 7.6 異步非阻塞型I/O
 7.7 驅(qū)動程序的fsync例程
 7.8 fasync例程
 7.9 llseek例程
 7.10 訪問權(quán)能
 7.11 本章小結(jié)
第8章 時間管理
 8.1 jiffies
 8.1.1 時間比較
 8.1.2 時間轉(zhuǎn)換
 8.2 延時操作
 8.2.1 長延時
 8.2.2 短延時
 8.3 內(nèi)核定時器
 8.3.1 init_timer
 8.3.2 add_timer
 8.3.3 del_timer和del_timer_sync
 8.4 本章小結(jié)
第9章 Linux設(shè)備驅(qū)動模型
 9.1 sysfs文件系統(tǒng)
 9.2 kobject和kset
 9.2.1 kobject
 9.2.2 kobject的類型屬性
 9.2.3 kset
 9.2.4 熱插拔中的uevent和call_usermodehelper
 9.2.5 實例源碼
 9.3 總線、設(shè)備與驅(qū)動
 9.3.1 總線及其注冊
 9.3.2 總線的屬性
 9.3.3 設(shè)備與驅(qū)動的綁定
 9.3.4 設(shè)備
 9.3.5 驅(qū)動
 9.4 class
 9.5 本章小結(jié)
第10章 內(nèi)存映射與DMA
 10.1 設(shè)備緩存與設(shè)備內(nèi)存
 10.2 mmap
 10.2.1 struct vm_area_struct
 10.2.2 用戶空間虛擬地址布局
 10.2.3 mmap系統(tǒng)調(diào)用過程
 10.2.4 驅(qū)動程序中mmap方法的實現(xiàn)
 10.2.5 mmap使用范例
 10.2.6 munmap
 10.3 DMA
 10.3.1 內(nèi)核中的DMA層
 10.3.2 物理地址與總線地址
 10.3.3 dma_set_mask
 10.3.4 DMA映射
 10.3.5 回彈緩沖區(qū)(bounce buffer)
 10.3.6 DMA池
 10.4 本章小結(jié)
第11章 塊設(shè)備驅(qū)動程序
 11.1 塊子系統(tǒng)初始化
 11.2 ramdisk源碼實例
 11.2.1 make_request版本的RAM DISK源碼
 11.2.2 request版本的RAM DISK源碼
 11.2.3 ramdisk的使用
 11.3 塊設(shè)備號的注冊與管理
 11.4 block_device
 11.5 struct gendisk
 11.6 struct hd_struct
 11.7 用alloc_disk分配gendisk對象
 11.8 向系統(tǒng)添加一個塊設(shè)備add_disk
 11.9 block_device_operations
 11.10 塊設(shè)備文件的打開
 11.11 blk_init_queue
 11.12 blk_queue_make_request
 11.13 向隊列提交請求
 11.14 塊設(shè)備的請求處理函數(shù)
 11.15 bio結(jié)構(gòu)
 11.16 本章小結(jié)
  

章節(jié)摘錄

版權(quán)頁:插圖:模塊最大的好處是可以動態(tài)擴展應(yīng)用程序的功能而無須重新編譯鏈接生成一個新的應(yīng)用程序映像,這種廣義上的模塊概念其實并非Linux系統(tǒng)所特有,在微軟的Windows系統(tǒng)上動態(tài)鏈接庫DLL(Dynamic Link Library)便是模塊概念的一個典型應(yīng)用場景,對應(yīng)到Linux系統(tǒng)上這種模塊以所謂的共享庫so(shared object)文件的形式存在。本章要討論的主題-Linux內(nèi)核模塊,在概念及原理方面與上面提到的DLL和so模塊類似,但又有其獨特的一面,內(nèi)核模塊可以在系統(tǒng)運行期間動態(tài)擴展系統(tǒng)功能而無須重新肩動系統(tǒng)2,更無須為這些新增的功能重新編譯一個新的系統(tǒng)內(nèi)核映像。內(nèi)核模塊的這個特性為內(nèi)核開發(fā)者開發(fā)驗證新的功能提供了極大的便利,因為像Linux這么龐大的系統(tǒng),編譯一個新內(nèi)核并重新啟動將浪費開發(fā)者大量的時間。雖然設(shè)備驅(qū)動程序并不一定要以內(nèi)核模塊的形式存在,并且內(nèi)核模塊也不一定就代表著一個設(shè)備驅(qū)動程序,但是內(nèi)核模塊的這種特性似乎注定是為設(shè)備驅(qū)動程序而生。Linux系統(tǒng)下的設(shè)備驅(qū)動程序員在開發(fā)一個新的設(shè)備驅(qū)動的過程中,使用的最多的工具之一是insmod,這就是一個簡單的向系統(tǒng)動態(tài)加載內(nèi)核模塊的命令。很難想象,如果沒有insmod這樣的機制,在Linux底下調(diào)試一個設(shè)備驅(qū)動會是怎樣的一件讓人痛苦抓狂的事情!筆者相信,任何一個在Linux上面有過實際的驅(qū)動程序開發(fā)經(jīng)歷的人都會有類似的感受。Linux系統(tǒng)雖然為內(nèi)核模塊機制提供了完善的支持,使得其下的內(nèi)核模塊是如此強大,然而現(xiàn)實中事情往往并非如預(yù)想的那樣一帆風(fēng)順,如果對其幕后的機制不甚了解,在實際的開發(fā)過程之中,除了驅(qū)動程序自身要實現(xiàn)的功能可能會遇到麻煩以外,在利用Linux中的內(nèi)核模塊機制時,也會遇到各種各樣的問題,比如在用insmod命令加載一個模塊時,就很可能會碰到類似下面的錯誤信息。

編輯推薦

《深入Linux設(shè)備驅(qū)動程序內(nèi)核機制》編輯推薦:穿針引線,將Linux設(shè)備驅(qū)動程序從臺前到幕后融會貫通,條分縷析,剖析Linux設(shè)備驅(qū)動程序使用到的每一個重要的內(nèi)核設(shè)施,高屋建瓴,多層次立體化揭示Linux設(shè)備驅(qū)動程序的框架結(jié)構(gòu),化繁為簡,簡單的示例源碼具體驗證內(nèi)核背后的運作機制。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    深入Linux設(shè)備驅(qū)動程序內(nèi)核機制 PDF格式下載


用戶評論 (總計70條)

 
 

  •   深入Linux設(shè)備驅(qū)動程序內(nèi)核機制--作者在用心把自己了解的展現(xiàn)出來,如題,是深入機制,從開始的模塊的加載過程,就給人一種用心研究深入的感覺.
  •   這本書對于驅(qū)動開發(fā)的直接幫助不大,涉及的硬件接口并不多。如作者所說適合有一定經(jīng)驗的驅(qū)動開發(fā)人員更深一層理解內(nèi)核驅(qū)動結(jié)構(gòu)機制。中文原創(chuàng),非常感謝作者的分享。
  •   很有深度,披著驅(qū)動外殼進行內(nèi)核分析,不僅僅停留在驅(qū)動程序?qū)用?,而是深入到相?yīng)的內(nèi)核實現(xiàn)~~~~
  •   很好的一本內(nèi)核與驅(qū)動都涉及的書,有點無語的是書本首頁的紙張竟然有一道深深的皺痕,幸虧不影響閱讀
  •   就寫驅(qū)動內(nèi)核而言,這本書是最強的一本
  •   這本書適合初入門的驅(qū)動開發(fā),非常推薦
  •   寫的挺不錯的,讓你知道驅(qū)動中每一行的意義。就是貴了一點。
  •   里面的講解和描述非常不錯,喜歡內(nèi)核的朋友可以看看
  •   至少紙張很好,內(nèi)容感覺不錯,有豐富圖表幫助理解,對全面理解內(nèi)核很有幫助!
  •   真的很不錯的一本書
    內(nèi)核結(jié)構(gòu)介紹比較好
  •   拿到書,迫不及待的看了幾頁,感覺作者真的是用心在寫這本書,很想把自己所知道的東西都在書里講出來,講的也很細(xì)致。
    另外瀏覽了下,插圖不錯,推薦?。?br /> 看了不少書了,感覺能有這本書作者般用心的不多,很多只是為了寫書而寫書,但這本書的作者是用心在總結(jié)傳授自己所學(xué)和自己的理解感悟。
  •   算是比較深入的書,如果是初學(xué)者,不太推薦,比較適合深入學(xué)習(xí),或者有一定經(jīng)驗的人。
  •   一直想買這本書來著,具體細(xì)節(jié)方面還有待于進一步發(fā)掘研究
  •   不同于一般的源碼情景分析,深入層次把握的很好。
  •   很喜歡這本書,作者講解細(xì)致入微,深入淺出,看后受益匪淺!
  •   很不錯的一本書,感覺作者很用心的在寫,而不是簡單的內(nèi)容堆砌。
  •   適合初學(xué)者和中級讀者
  •   數(shù)目編寫的非常清楚,可以按照函數(shù)搜索內(nèi)容這點很滿意,不錯
  •   閱讀了一部分,以前一些沒有懂的問題搞懂了
  •   這本書真的非常非常好.我很喜歡.越看越喜歡
  •   剛開始看,很不錯的一本書。正好適合我這樣的水平。
  •   快遞很給力,書的質(zhì)量很好,
  •   對于同行而言,這本書還真的是一本好書。
  •   這個不建議初學(xué)者買啊 哎
  •   入門必備的數(shù)據(jù),值得擁有
  •   剛開始感覺挺晦澀,但是現(xiàn)在越看越喜歡,超級有用
  •   沒有基礎(chǔ)的朋友建議不要買,買了都是收藏。
  •   網(wǎng)上看過章節(jié)的確需要手頭一本
  •   好評橫好經(jīng)典
  •   還可以吧,這次是幫朋友買的,他說不錯,,,
  •   還沒讀呢 感覺很不錯
  •   剛看了這邊書的前面兩章,感覺挺好的。本書強調(diào)了一種思想--“知其然,知其所以然”。作為linux驅(qū)動開發(fā)者若明白了內(nèi)核設(shè)施的機制原理,用起來那應(yīng)該是相當(dāng)順手了。
  •   如果不滿足只是簡單修改、調(diào)用現(xiàn)有的函數(shù),通過此書可以更快的理解驅(qū)動內(nèi)核原理
  •   不錯,講解的很深入,不過可惜的是既然作者是專門搞顯卡驅(qū)動這部分的,為什么不順帶講解一下LCD驅(qū)動和視頻驅(qū)動這方面的知識。
  •   內(nèi)容不錯,比大多數(shù)驅(qū)動的書講得較好,就是排版不怎么好,所以只打4星了
  •   希望能夠在Can驅(qū)動添加的內(nèi)容
  •   正在等待中,希望書的內(nèi)容和作者的前言一樣引人入勝
  •   書的中間有折頁,不影響閱讀,尚未細(xì)讀,希望對自己有很大幫助
  •   比想象中的厚些,內(nèi)容豐富深入,相對偏貴了些。
  •   剛拿到手,稍微翻了翻,正是我想看的的內(nèi)容。五一長假有事干了,慢慢看。。。
    呵呵書有些薄,原價要98.00元,感覺在搶錢。好在打完折就是那個價了。
  •   書還不錯,內(nèi)容也還行
  •   書沒收到,但卻顯示交易成功,更蹊蹺的是居然還可以些評論。真是無奇不有。呵呵呵!
  •   其實內(nèi)容還不錯,就是排版,算了,其實就沒排版。
  •   紙張有一點一點不好。。。。。。
  •   簡單的典型源碼分析,感覺就像是按照這各個功能特點,挑選出源碼講解了一下,涉及到內(nèi)核機制的分析幾乎沒多少吧,這東西還是得自己慢慢從linux內(nèi)核學(xué)習(xí)起~
  •   一直做LINUX這塊,但是有的原理不太了解,學(xué)習(xí)下原理的東西
  •   不是很深入,很多地方一筆帶過,感覺是使用Word排版,行間距有點大,相對而言,實在是太貴了。給個中評。
  •   書還沒看,不過紙張確實讓人失望,一直在當(dāng)當(dāng)買書,感覺書的紙張質(zhì)量一次不如一次,確實要改進拉!不過送貨速度還是挺快的!
  •   書剛到,紙張顏色很黃,看著像盜版。本次網(wǎng)購不怎么滿意。
  •   比較枯燥。。比較枯燥。。比較枯燥。。
  •   1。整本書沒有一個主線,東一榔頭,西一棒槌。每一章,也沒見到什么深入的論述。作者的本身的能力不知如何,但可以肯定的是其寫作能力可以說極差,廢話一大堆,也沒見說到正點上,俺是越看越生氣。2。排版極差。段間距很大,每段連個縮進也沒有,真不知編輯是干什么吃的。對源代碼的解釋,本來源代碼中就有一些解釋,只要將在源代碼后的英文換成中文就可以了,但作者卻在后面每個每個的解釋,每個解釋就是一、二句話的一小段,由于超大的段間距,結(jié)果占用了大量篇幅。3。裝訂質(zhì)量差。書還沒看完,但書就出現(xiàn)了脫膠,后面的幾頁就要掉了。
  •   沒有打滿分原因有二,1. 后面章節(jié)不如前面精心,有錯別字出現(xiàn)2. 例子有點少,如果能以動手例子啟發(fā)理解就完美了,現(xiàn)在還是陳述式灌輸
  •   這本書最令我滿意的地方就是:字符驅(qū)動那一章,比linux device driver那本書詳細(xì)。
  •   對驅(qū)動開發(fā)中涉及到的許多內(nèi)核底層的機制進行比較好的闡述,看了該書,許多困擾已久的問題都得到很好的解答,該書適合一定內(nèi)核與操作系統(tǒng)基礎(chǔ)的朋友閱讀。
  •   整體感覺還不錯,挺好的
  •   以前就看過,買這本書為了珍藏,怕以后 又找不到了
  •   看了,明白了些驅(qū)動的內(nèi)核機制,對我還是有些幫助
  •   我喜歡深入Linux設(shè)備驅(qū)動程序內(nèi)核機制
  •   這是一本很好的書,對內(nèi)核講的很透徹,
  •   當(dāng)我看到這本書的目錄時的第一反應(yīng)是:“莫非這本書是翻譯的Linux Device Drivers?”而看到“陳學(xué)松著”幾個字之后的第二反應(yīng)是:“莫非這本書涉嫌抄襲!”首先聲明我沒讀這本書的內(nèi)容,但我發(fā)現(xiàn)這本書的目錄跟O'Reilly 2005年出版的Linux Device... 閱讀更多
  •   寫的思路很清晰,少有的國人寫的好書。頂一個,,,
  •   國人就喜歡分析個源碼什么的,這個說是沒弄太多源碼,其實也不少----這本書其實更像ULK和PLKA,只不過是專講驅(qū)動部分,范圍上大概和情景分析的第二本差不多,只不過內(nèi)核版本更新就是了---感覺上要從入門學(xué)linux驅(qū)動的話,還是LDD3吧
  •   拿來擴展學(xué)習(xí)挺好的,看作者自述在amd進行圖形驅(qū)動的開發(fā)。不知道以后會不會成為linux桌面系統(tǒng)普及的一個 催化劑?
  •   這本書挺好的,希望作者能繼續(xù)出書
  •   設(shè)備驅(qū)動程序技術(shù)內(nèi)幕
  •   學(xué)習(xí)驅(qū)動買的,感覺還不錯
  •   對于LInux驅(qū)動講解很深入
  •   瑕不掩瑜,大作
  •   買來還沒看,據(jù)說不錯
  •   國內(nèi)少有的技術(shù)書籍
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7