1. 程式人生 > >Linux裝置驅動開發詳解 第3版 (即 Linux裝置驅動開發詳解 基於最新的Linux 4 0核心 )進展同步更

Linux裝置驅動開發詳解 第3版 (即 Linux裝置驅動開發詳解 基於最新的Linux 4 0核心 )進展同步更

               

本博實時更新《Linux裝置驅動開發詳解(第3版)》的最新進展。 目前已經完成稿件。

2015年8月9日,china-pub開始上線預售:

http://product.china-pub.com/4733972


2015年8月20日,各路朋友報喜說已經拿到了書。


本書已經rebase到開發中的Linux 4.0核心,案例多數基於多核CORTEX-A9平臺

本書微信公眾號二維碼



[F]是修正或升級;[N]是新增知識點;[D]是刪除的內容


第1章 《Linux裝置驅動概述及開發環境構建》
[D]刪除關於LDD6410開發板的介紹
[F]更新新的Ubuntu虛擬機器
[N]新增關於QEMU模擬vexpress板的描述


第2章 《驅動設計的硬體基礎》

[N]增加關於SoC的介紹;
[N]增加關於eFuse的內容;
[D]刪除ISA匯流排的內容了;
[N]增加關於SPI匯流排的介紹;
[N]增加USB 3.0的介紹;
[F]修正USB同步傳輸方式英文名;
[D]刪除關於cPCI介紹;
[N]增加關於PCI Express介紹;
[N]增加關於Xilinx ZYNQ的介紹;
[N]增加SD/SDIO/eMMC的章節;


[D]刪除“原理圖分析的內容”一節;
[N]增加通過邏輯分析儀看I2C匯流排的例子;


第3章 《Linux核心及核心程式設計》

[N]新增關於3.X核心版本和2015年2月23日 Linux 4.0-rc1
[N]新增關於核心版本升級流程以及Linux社群開發模式講解
[N]新增關於Linux核心排程時間的圖式講解
[N]新增關於Linux 3.0後ARM架構的變更的講解
[N]新增關於TASK_KILLABLE狀態的簡介
[N]新增Linux記憶體管理圖式講解

[F]修正Kconfig和Makefile中的一些表述
[D]刪除關於x86啟動過程講解
[N]新增ARM Linux啟動過程講解
[N]新增關於likely()和unlikely()講解


[N]新增toolchain的講解,以及toolchain的幾種浮點模式


第4章 《Linux核心模組》
[F]改正關於模組使用非GPL license的問題;
[F]修正關於__exit修飾函式的記憶體管理

第5章 《Linux檔案系統與裝置檔案》
[F]修正關於檔案系統與塊裝置驅動關係圖;
[N]增加應用到驅動的file操作呼叫圖;
[N]增加通過netlink接受核心uevent的範例;
[N]增加遍歷sysfs的範例;

[N]增加為kingston U盤編寫udev規則的範例;
[F]更新udev規則,以符合新版本;
[N]增加udevadm的講解;
[N]高亮Android vold
 
第6章 《字元裝置驅動》
[F]更新file_operations的定義,升級ioctl()原型;
[N]增加關於Linux access_ok()的講解以及Linux核心安全漏洞的說明;
[F]修正globalmem的編碼風格;
[F]在globalmem支援2個以上例項的時候,從直接2個例項,升級為支援N個例項;

第7章 《Linux裝置驅動中的併發控制》
[N]繪圖深入講解單核和多核下的各種競態;
[N]增加關於編譯亂序,執行亂序,編譯屏障和記憶體屏障的講解;
[N]增加關於ARM LDREX/STREX指令的講解;
[N]對spin_lock單核和多核的使用場景進行深入分析;

[F]重新整理RCU的講解方法和例項;
[F]明確指明訊號量已過時;
[F]將globalmem中使用的訊號量換為mutex。


第8章 《Linux裝置驅動中的阻塞與非阻塞I/O》
[N]新增阻塞和非組塞的時序圖
[F]修正關於等待佇列頭部、等待佇列元素的一些中文說法
[N]新增等待佇列的圖形描述
[F]修正globalfifo的編碼風格
[F]修正globalfifo可讀可寫的if判斷為while判斷
[N]新增select的時序圖
[N]新增EPOLL的章節


第9章 《Linux裝置驅動中的非同步通知與非同步I/O》
[F]修正關於glibc AIO支援
[F]修正關於核心AIO支援
[F]修正驅動AIO介面
[D]刪除關於驅動AIO支援的錯誤例項
[N]高亮C10問題

第10章 《中斷與時鐘》
[N]增加關於ARM GIC的講解
[N]增加關於irq_set_affinity() API的講解
[N]增加關於devm_request_irq() API的講解
[N]增加關於request_any_context_irq() API的講解

[F]修正interrupt handler原型
[F]修正work queue原型
[N]新增關於Concurrency-managed workqueues講解
[N]增加關於ksoftirqd講解
[N]增加關於request_threaded_irq()講解
[D]刪除s3c6410 rtc驅動中斷例項
[N]新增GPIO按鍵驅動中斷例項
[N]新增hrtimer講解和例項
[F]修正second裝置編碼風格

第11章 《記憶體與I/O訪問》
[F]修正關於頁表級數的描述,新增PUD
[F]修正page table walk的案例,使用ARM Linux pin_page_for_write
[N]新增關於ARM Linux核心空間虛擬地址分佈
[F]修正關於核心空間與使用者空間界限
[N]新增關於DMA、NORMAL和HIGHMEM ZONE的幾種可能分佈
[N]新增關於buddy的介紹
[F]修正關於使用者空間malloc的講解
[N]增加mallopt()的案例
[N]增加關於devm_ioremap、devm_request_region()和devm_request_mem_region()的講解
[N]增加關於readl()與readl_relaxed()的區別,writel()與writel_relaxed()的區別

[F]更新vm_area_struct的定義
[F]修正nopage() callback為fault() callback
[N]增加io_remap_pfn_range()、vm_iomap_memory()講解
[F]強調iotable_init()靜態對映目前已不太推薦
[N]增加關於coherent_dma_mask的講解
[N]講解dma_alloc_coherent()與DMA ZONE關係
[N]提及了一致性DMA緩衝區與CMA的關係
[N]增加關於dmaengine驅動和API的講解


第12章 《工程中的Linux裝置驅動》
[F]更名為《Linux裝置驅動的軟體架構思想》;
[N]本章新增多幅圖片講解Linux裝置驅動模型;
[N]新增內容詳細剖析為什麼要進行裝置與驅動的分離,platform的意義;
[N]新增內容詳細剖析為什麼Linux裝置驅動要分層,列舉多個分層例項;
[N]新增內容詳細剖析Linux驅動框架如何解耦,為什麼主機側驅動要和外設側驅動分離;
[N]DM9000例項新增關於在dts中填充平臺資訊的內容;
[N]新增內容講解驅動核心層的3大功能;
[N]新增內容以面向物件類泛化對比Linux驅動;
[N]SPI案例部分新增通過dts填充外設資訊;

[F]從tty, LCD章節移出架構部分到本章


第13章 《Linux塊裝置驅動》
[N]介紹關於block_device_operations的check_events成員函式
[N]新增關於磁碟檔案系統,I/O排程關係的圖形
[F]更新關於request_queue、request、bio、segment關係的圖形
[F]淘汰elv_next_request
[F]淘汰blkdev_dequeue_request
[N]新增關於blk_start_request描述
[F]淘汰Anticipatory I/O scheduler
[N]新增關於ZRAM塊裝置驅動例項
[F]更新針對核心4.0-rc1的vmem_disk
[N]新增關於vmem_disk處理I/O過程的圖形
[N]增加關於Linux MMC子系統的描述


第14章 《Linux終端裝置驅動》
[D]整章全部刪除,部分架構內容前移到第12章作為驅動分層例項


第15章 《Linux I2C核心、匯流排與裝置驅動》

[F]修正i2c_adpater驅動的案例
[N]增加關於在device tree中增加i2c裝置的方法的描述


第16章 《Linux網路裝置驅動》

[F]本章順序從第16章前移到第14章
[N]澄清sk_buff head、data、tail、end指標關係
[F]更新sk_buff定義
[F]澄清skb_put、skb_push、skb_reserve
[N]增加netdev_priv的講解,加入例項
[N]增加關於get_stats()可以從硬體讀統計資訊的描述

[F]修正關於net_device_stats結構體的定義位置
[F]修正關於統計資訊的更新方法

第17章 《Linux音訊裝置驅動》

[D] 本章直接刪除


第18章 《LCD裝置驅動》

[D] 本章直接刪除,部分架構內容前移到第12章


第19章 《Flash裝置驅動》

[D] 本章直接刪除


第20章 《USB主機與裝置驅動》
[F]前移到第16章;
[F]更名為《USB主機、裝置與Gadget驅動》;
[N]增加關於xHCI的介紹;
[F]修正usb gadget驅動為function驅動;
[D]刪除OHCI例項;
[N]新增EHCI講解和Chipidea EHCI例項;
[F]修正iso傳輸例項;
[F]修正usb devices資訊到/sys/kernel/debug/usb/devices
[N]介紹module_usb_driver;
[N]介紹usb_function;
[N]介紹usb_ep_autoconfig;
[N]介紹usb_otg;

[D]刪除otg_transceiver;


第21章 《PCI裝置驅動》
[D]整章刪除


第22章 《Linux裝置驅動的除錯》

[F]變為第21章;

[D]把實驗室環境建設相關的節移到第3章;

[F]修正關於gdb的set step-mode的含義講解;

[F]增加關於gdb的set命令的講解;

[F]增加gdb call命令的案例

[D/N]刪除手動編譯工具鏈的程式碼,使用crosstool-ng;
[N]更新toolchain的下載地址(codesourcery -> memtor),加入linaro下載地址;
[N]增加pr_fmt的講解;
[N]增加關於ignore_loglevel bootargs的講解;
[N]增加EARLY_PRINTK和DEBUG_LL的講解;

[F]調整proc的範例,建立/proc/test_dir/test_rw;
[N]修正關於3.10後核心proc實現框架和API的變更;
[N]增加關於BUG_ON和WARN_ON的講解
[F]不再以BDI-2000為例,改為ARM DS-5;
[N]增加關於ARM streamline效能分析器的介紹;
[N]增加使用qemu除錯linux核心的案例;
[F]調整Oops的例子,使用globalmem,平臺改為ARM;
[F]更新LTT為LTTng。


第23章 《Linux裝置驅動的移植》
[D]整章刪除


全新的章節


第17章  《I2C、SPI、USB架構類比》

本章導讀

本章類比I2C、SPI、USB的結構,從而更進一步幫助讀者理解本書第12章的內容,也進一步實證Linux驅動萬變不離其宗的道理。


第18章  《Linux裝置樹(Device Tree)》

本章導讀

本章將介紹Linux裝置樹(Device Tree)的起源、結構和因為裝置樹而引起的驅動和BSP變更。

18.1節闡明瞭ARM Linux為什麼要採用裝置樹。

18.2節詳細剖析了裝置樹的結構、結點和屬性,裝置樹的編譯方法以及如何用裝置樹來描述板上的裝置、裝置的地址、裝置的中斷號、時鐘等資訊。

18.3節講解了採用裝置樹後,驅動和BSP的程式碼需要怎麼改,哪些地方變了。

18.4節補充了一些裝置樹相關的API定義以及用法。

本章是相對《Linux裝置驅動開發詳解(第2版)》全新的一章內容,也是步入核心3.x時代後,嵌入式Linux工程師必備的知識體系。


第19章  《Linux的電源管理》

本章導讀

Linux在消費電子領域的應用已經鋪天蓋地,而對於消費電子產品而言,省電是一個重要的議題。

本章將介紹Linux裝置樹(Device Tree)的起源、結構和因為裝置樹而引起的驅動和BSP變更。

19.1節闡述了Linux電源管理的總體架構。

19.2~19.8節分別論述了CPUFreq、CPUIdle、CPU熱插拔以及底層的基礎設施Regulator、OPP以及電源管理的除錯工具PowerTop。

19.9節講解了系統Suspend to RAM的過程以及裝置驅動如何提供對Suspend to RAM的支援。

19.10節講解了裝置驅動的Runtimesuspend。

本章是相對《Linux裝置驅動開發詳解(第2版)》全新的一章內容,也是Linux裝置驅動工程師必備的知識體系。



第20章 《Linux晶片級移植與底層驅動》

本章導讀

本章主要講解,在一個新的ARM SoC上,如何移植Linux。當然,本章的內容也適合MIPS、PowerPC等其他的體系架構。

第20.1節先總體上介紹了Linux 3.x之後的核心在底層BSP上進行了哪些優化。

第20.2節講解了如何提供作業系統的執行節拍。

第20.3節講解了中斷控制器驅動,以及它是如何為驅動提供標準介面的。

第20.4節講解多核SMP晶片的啟動。

第20.6~20.9節分別講解了作為Linux執行底層基礎設施的GPIO、pinctrl、clock和dmaengine驅動。

本章相對《Linux裝置驅動開發詳解(第2版)》幾乎是全新的一章內容,有助於工程師理解驅動呼叫的底層API的來源,以及直接有助於進行Linux的平臺移植。


           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!http://www.captainbed.net

這裡寫圖片描述