-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Linux設備驅動開發

( 簡體 字)
作者:[美]約翰·馬德奧 著 李強 譯類別:1. -> 作業系統 -> Linux
   2. -> 程式設計 -> 驅動程式
譯者:
出版社:清華大學出版社Linux設備驅動開發 3dWoo書號: 56196
詢問書籍請說出此書號!

有庫存
NT售價: 745

出版日:12/1/2022
頁數:520
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787302619024
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

Linux是世界上發展最快的操作系統之一,在過去的幾年里,Linux內核得到了顯著的發展,可以支持各種嵌入式設備,其子系統也得到了改進,并增加了許多新功能。
本書提供了有關Linux內核主題的較為全面的討論(例如,市面圖書中通常較少涉及的視頻和音頻框架,本書也有專門章節進行介紹)。我們將深入研究一些最復雜和最具影響力的Linux內核框架,如PCI、用于SoC的ALSA和Video4Linux2(V4L2),并在此過程中提供了一些專業技巧提示和最佳實踐。
除此之外,本書還將討論如何利用NVMEM和Watchdog(看門狗)等框架,以及如何處理特殊設備類型,如多功能設備(multi-function device,MFD)等。
通讀本書之后,相信你能夠編寫非常實用可靠的設備驅動程序,并將它們與一些最復雜的Linux內核框架集成,包括V4L2和ALSA SoC。
本書讀者
本書主要面向嵌入式愛好者和開發人員、Linux系統管理員和內核黑客。無論你是軟件開發人員、系統架構師還是制造商(電子愛好者),只要你希望深入了解Linux驅動程序開發,那么本書就適合你。
內容介紹
本書共分為3篇14章,具體內容如下。
第1篇為“用于嵌入式設備驅動程序開發的內核核心框架”,包括第1∼4章。
第1章為“嵌入式開發人員需要掌握的Linux內核概念”,詳細介紹了內核鎖API,Linux內核中的等待、感知和阻塞,工作延遲機制和Linux內核中斷管理等。
第2章為“regmap API應用”,簡要介紹了regmap及其數據結構、regmap和IRQ管理、鏈接IRQ、regmap IRQ API和數據結構等,并演示了如何利用regmap API來簡化中斷管理和抽象寄存器訪問。
第3章為“深入研究MFD子系統和syscon API”,重點介紹了Linux內核中的MFD驅動程序及其API和結構,并討論了syscon和simple-mfd輔助函數。
第4章為“通用時鐘框架”,詳細解釋了Linux內核時鐘框架,并探討了生產者和使用者設備驅動程序,以及它們的設備樹綁定。
第2篇為“嵌入式Linux系統中的多媒體和節能”,包括第5∼10章。
第5章為“ALSA SoC框架—利用編解碼器和平臺類驅動程序”,討論了編解碼器和平臺設備的ALSA驅動程序開發,并介紹了kcontrol和數字音頻電源管理(digital audio power management,DAPM)等概念。
第6章為“ALSA SoC框架—深入了解機器類驅動程序”,深入研究了 ALSA機器類驅動程序開發,并展示了如何將編解碼器和平臺綁定在一起以及如何定義音頻路由。
第7章為“V4L2和視頻采集設備驅動程序揭秘”,描述了V4L2的關鍵概念。本章側重于橋接視頻設備,介紹了子設備的概念,并涵蓋了它們各自的設備驅動程序。
第8章為“集成V4L2異步和媒體控制器框架”,詳細介紹了異步探測的概念,這樣你就不必關心橋接設備和子設備探測順序。此外,本章還介紹了媒體控制器框架,以提供自定義的視頻路由和視頻管道。
第9章為“從用戶空間利用V4L2 API”,逐一枚舉和介紹了用戶空間V4L2 API。本章首先討論了如何編寫C語言代碼,以便從視頻設備中打開、配置和獲取數據,然后演示了如何通過用戶空間視頻相關工具(如v4l2-ctl和media-ctl)來編寫盡可能少的代碼。
第10章為“Linux內核電源管理”,討論了基于Linux系統的電源管理,并介紹了如何編寫具有功耗意識的設備驅動程序。
第3篇為“與其他Linux內核子系統保持同步”,包括第11∼14章。
第11章為“編寫PCI設備驅動程序”,詳細闡釋了PCI子系統并介紹了其Linux內核的實現。本章還演示了如何編寫PCI設備驅動程序。
第12章為“利用NVMEM框架”,描述了Linux非易失性內存(Non-Volatile Memory,NVEM)子系統。本章闡釋了如何編寫提供者和使用者驅動程序以及它們的設備樹綁定,并展示了如何從用戶空間利用此類設備。
第13章為“看門狗設備驅動程序”,提供了對Linux內核看門狗子系統的準確描述。本章首先介紹了看門狗設備驅動程序,然后逐步闡釋了子系統的核心,討論了一些關鍵概念(如預超時和調控器)。最后,還介紹了如何從用戶空間管理子系統。
第14章為“Linux內核調試技巧和最佳實踐”,重點介紹了使用Linux內核嵌入式工具(如 Ftrace和oops消息分析)最常用的Linux內核調試和跟蹤技術。
充分利用本書
為了充分利用本書,你需要一些C語言和系統編程知識。此外,本書內容組織基于假設你熟悉Linux系統及其大部分基本命令。
本書軟硬件和操作系統需求如表P-1所示。
表P-1 本書操作系統需求
本書涵蓋的軟硬件 操作系統需求
一臺具有良好網絡帶寬和足夠磁盤空間和內存的計算機,可下載和構建Linux內核 最好是任何基于Debian的發行版
市場上的任何Cortex-A嵌入式板(如Udoo、Raspberry Pi和BeagleBone) Yocto/Buildroot或任何特定于供應商的操作系統
表P-1中未列出的任何必要軟件包將在具體章節中介紹。
下載彩色圖像
我們還提供了一個PDF文件,其中包含本書中使用的屏幕截圖/圖表的彩色圖像。
本書約定
本書中使用了許多文本約定。
(1)Code In Text:表示文本中的代碼字、數據庫表名、文件夾名、文件名、文件擴展名、路徑名、虛擬URL、用戶輸入和Twitter句柄等。以下段落就是一個示例:

(2)有關代碼塊的設置如下所示:

static int fake_probe( struct i2c_client *client,
const struct i2c_device_id *id)
{
[...]
mutex_init(&data->mutex);
[...]
}

(3)當我們希望讓你注意代碼塊的特定部分時,相關行或項目以粗體字給出:

static int __init my_init(void)
{
pr_info(Wait queue example\n);
INIT_WORK(&wrk, work_handler);
schedule_work(&wrk);
pr_info(Going to sleep %s\n, __FUNCTION__);
wait_event_interruptible(my_wq, condition != 0);
pr_info(woken up by the work job\n);
return 0;
}

(4)任何命令行輸入或輸出都采用如下所示的粗體代碼形式:

# echo 1 >/sys/module/printk/parameters/time
# cat /sys/module/printk/parameters/time

(5)術語或重要單詞采用中英文對照形式,在括號內保留其英文原文。示例如下:
隨著時間的推移,媒體支持已成為系統級芯片(System on Chip,SoC)的必需品和銷售賣點,它變得越來越復雜。這些媒體IP核心的復雜性使得獲取傳感器數據需要由軟件設置整個管道(由多個子設備組成)。基于設備樹的系統的異步特性意味著這些子設備的設置和探測并不簡單,異步框架(Async Framework)由此應運而生。

(6)本書還使用了以下兩個圖標。
表示警告或重要的注意事項。
表示提示或小技巧。
內容簡介:

《Linux設備驅動開發》本書詳細闡述了與Linux設備驅動開發相關的基本解決方案,主要包括Linux內核概念、regmap API應用、MFD子系統和syscon API、通用時鐘框架、ALSA SoC框架、V4L2和視頻采集、集成V4L2異步和媒體控制器框架、V4L2 API、Linux內核電源管理、PCI設備驅動、NVMEM框架、看門狗設備驅動、Linux內核調試技巧和**實踐等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。
本書詳細闡述了與Linux設備驅動開發相關的基本解決方案,主要包括Linux內核概念、regmap API應用、MFD子系統和syscon API、通用時鐘框架、ALSA SoC框架、V4L2和視頻采集、集成V4L2異步和媒體控制器框架、V4L2 API、Linux內核電源管理、PCI設備驅動、NVMEM框架、看門狗設備驅動、Linux內核調試技巧和**實踐等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。
目錄:

第1篇用于嵌入式設備驅動程序開發的內核核心框架
第1章嵌入式開發人員需要掌握的Linux內核概念 3
1.1技術要求 3
1.2內核鎖API和共享對象 3
1.2.1自旋鎖 4
1.2.2禁用中斷與僅禁用搶占 8
1.2.3互斥鎖 8
1.2.4try-lock方法 11
1.3Linux內核中的等待、感知和阻塞 13
1.3.1等待活動完成或狀態改變 13
1.3.2Linux內核等待隊列 15
1.4工作延遲機制 19
1.4.1softIRQ 20
1.4.2關于ksoftirqd 24
1.4.3tasklet 25
1.4.4工作隊列 28
1.4.5內核共享隊列 31
1.4.6新的工作隊列 32
1.4.7并發管理的工作隊列 33
1.5Linux內核中斷管理 37
1.5.1中斷的狀態 37
1.5.2中斷處理流程 38
1.5.3設計中斷處理程序 40
1.5.4中斷的標志 42
1.5.5中斷的返回值 44
1.5.6關于中斷的一些注意事項 45
1.5.7上半部和下半部的概念 46
1.5.8線程中斷處理程序 48
1.5.9請求一個上下文中斷 53
1.5.10使用工作隊列延遲下半部 55
1.5.11從中斷處理程序中鎖定 58
1.6小結 61
第2章regmapAPI應用 63
2.1技術要求 63
2.2regmap及其數據結構 64
2.2.1structregmap_config結構體中的字段 65
2.2.2訪問設備寄存器 69
2.2.3一次讀/寫多個寄存器 71
2.2.4更新寄存器中的位 72
2.3regmap和IRQ管理 73
2.3.1Linux內核IRQ管理的結構 73
2.3.2創建映射 74
2.3.3structirq_domain_ops 76
2.3.4irq_domain_ops.map() 77
2.3.5irq_domain_ops.xlate() 77
2.4鏈接IRQ 78
2.4.1鏈式中斷 78
2.4.2嵌套中斷 83
2.4.3irqchip和gpiolibAPI—新一代 85
2.4.4基于gpiochip的鏈式IRQ芯片 87
2.4.5基于gpiochip的嵌套IRQ芯片 89
2.5regmapIRQAPI和數據結構 91
2.5.1regmapIRQ數據結構 91
2.5.2regmapIRQAPI 95
2.5.3regmapIRQAPI示例 98
2.6小結 102
第3章深入研究MFD子系統和sysconAPI 103
3.1技術要求 103
3.2MFD子系統和sysconAPI 104
3.2.1da9055設備驅動程序示例 104
3.2.2max8925設備驅動程序示例 113
3.3MFD設備的設備樹綁定 116
3.4了解syscon和simple-mfd 119
3.4.1sysconAPI 119
3.4.2simple-mfd 123
3.5小結 125
第4章通用時鐘框架 127
4.1技術要求 128
4.2CCF數據結構和接口 128
4.2.1了解structclk_hw及其依賴項 129
4.2.2注冊/取消注冊時鐘提供者 131
4.2.3將時鐘公開給使用者 135
4.2.4時鐘提供者設備樹節點及其相關機制 136
4.2.5了解of_parse_phandle_with_args()API 138
4.2.6了解__of_clk_get_from_provider()API 140
4.2.7時鐘解碼回調 141
4.3編寫時鐘提供者驅動程序 145
4.3.1有關時鐘提供者驅動程序的基礎知識 145
4.3.2提供時鐘操作 149
4.3.3clk_hw.init.flags中的時鐘標志 152
4.3.4固定頻率時鐘案例研究及其操作 154
4.3.5通用簡化注意事項 156
4.3.6固定頻率時鐘設備綁定 158
4.3.7PWM時鐘 159
4.3.8固定倍頻時鐘驅動程序及其操作 160
4.3.9固定倍頻時鐘的設備樹綁定 162
4.3.10門控時鐘及其操作 162
4.3.11基于I2C/SPI的門控時鐘 164
4.3.12GPIO門控時鐘 165
4.3.13多選一時鐘及其操作 165
4.3.14基于I2C/SPI的多選一時鐘 170
4.3.15GPIO多選一時鐘 170
4.3.16分頻器時鐘及其操作 172
4.3.17復合時鐘及其操作 176
4.3.18綜合概述 177
4.4時鐘使用者API 179
4.4.1獲取和釋放時鐘 180
4.4.2準備/取消準備時鐘 180
4.4.3啟用/禁用 181
4.4.4頻率函數 181
4.4.5父函數 182
4.4.6綜合概述 182
4.5小結 182
第2篇嵌入式Linux系統中的多媒體和節能
第5章ALSASoC框架—利用編解碼器和平臺類驅動程序 185
5.1技術要求 186
5.2ASoC簡介 186
5.2.1ASoC數字音頻接口 187
5.2.2ASoC子元素 187
5.3編寫編解碼器類驅動程序 189
5.3.1編解碼器驅動程序的實例結構 190
5.3.2編解碼器DAI和PCM配置 192
5.3.3DAI操作 193
5.3.4采集和回放硬件配置 196
5.3.5控件的概念 197
5.3.6控件命名約定 199
5.3.7控制元數據 200
5.3.8定義kcontrol 200
5.3.9設置一個簡單開關 202
5.3.10設置帶有音量級別的開關 203
5.3.11立體聲控件 203
5.3.12 帶音量級別的立體聲控件 203
5.3.13混音器控件 204
5.3.14定義有多個輸入的控件 204
5.4DAPM概念 205
5.4.1關于widget 205
5.4.2定義widget 207
5.4.3編解碼域定義 207
5.4.4定義平臺域widget 208
5.4.5定義音頻路徑域widget 209
5.4.6定義音頻流域 211
5.4.7路徑的概念—widget之間的連接器 213
5.4.8路由的概念—widget互連 214
5.4.9定義DAPMkcontrol 215
5.4.10創建widget和路由 217
5.5編解碼器組件注冊 222
5.6編寫平臺類驅動程序 224
5.6.1CPUDAI驅動程序 225
5.6.2平臺DMA驅動程序 226
5.6.3音頻DMA接口 227
5.6.4PCM硬件配置 230
5.7小結 233
第6章ALSASoC框架—深入了解機器類驅動程序 235
6.1技術要求 235
6.2機器類驅動程序介紹 236
6.2.1機器類驅動程序的開發流程 236
6.2.2DAI鏈接 237
6.2.3獲取CPU和編解碼器節點 239
6.3機器路由 241
6.3.1編解碼器引腳 241
6.3.2板卡接口 242
6.3.3機器路由 243
6.3.4設備樹路由 243
6.3.5靜態路由 244
6.4時鐘和格式注意事項 245
6.4.1時鐘和格式設置輔助函數 245
6.4.2格式 246
6.4.3時鐘源 247
6.4.4時鐘分頻器 247
6.4.5時鐘和格式設置的典型實現 247
6.5聲卡注冊 249
6.6利用simple-card機器驅動程序 252
6.6.1simple-audio機器驅動程序 252
6.6.2無編解碼器聲卡 253
6.7小結 254
第7章V4L2和視頻采集設備驅動程序揭秘 255
7.1技術要求 255
7.2框架架構和主要數據結構 255
7.2.1V4L2架構簡介 256
7.2.2初始化和注冊V4L2設備 257
7.3橋接視頻設備驅動程序 258
7.3.1structvideo_device結構體 259
7.3.2初始化和注冊視頻設備 262
7.3.3視頻設備文件操作 264
7.3.4V4L2ioctl處理 267
7.3.5videobuf2接口和API 269
7.3.6緩沖區的概念 269
7.3.7平面的概念 271
7.3.8隊列的概念 272
7.3.9與特定驅動程序相關的流傳輸回調函數 274
7.3.10初始化和釋放vb2隊列 277
7.4關于子設備 278
7.4.1子設備數據結構體 279
7.4.2子設備初始化 282
7.4.3子設備操作 284
7.4.4核心操作結構 285
7.4.5視頻操作結構 286
7.4.6傳感器操作結構 287
7.4.7調用子設備操作 288
7.4.8子設備的注冊和注銷方式 289
7.5V4L2控件基礎結構 290
7.5.1標準控件對象 290
7.5.2控件處理程序 292
7.5.3攝像頭傳感器驅動程序示例 294
7.5.4關于控件繼承 297
7.6小結 297
第8章集成V4L2異步和媒體控制器框架 299
8.1技術要求 299
8.2V4L2異步接口和圖綁定的概念 299
8.2.1圖綁定 300
8.2.2端口和端點表示 300
8.2.3端點鏈接 301
8.2.4V4L2異步和面向圖的API 302
8.2.5從設備樹API到通用fwnode圖API 302
8.2.6V4L2固件節點API 309
8.2.7V4L2fwnode或媒體總線類型 311
8.2.8BT656和并行總線 312
8.2.9MIPICSI-2總線 313
8.2.10CPP2和MIPICSI-1總線 314
8.2.11總線猜測 315
8.2.12V4L2異步模式 315
8.2.13異步模式工作原理 318
8.2.14異步橋接和子設備探測示例 321
8.3Linux媒體控制器框架 325
8.3.1媒體控制器抽象模型 325
8.3.2V4L2設備抽象 327
8.3.3媒體控制器數據結構 328
8.3.4在驅動程序中集成媒體控制器支持 333
8.3.5初始化并注冊接口和實體 334
8.3.6媒體實體操作 335
8.3.7媒體總線的概念 335
8.3.8注冊媒體設備 340
8.3.9來自用戶空間的媒體控制器 341
8.3.10使用media-ctl 341
8.3.11帶有OV2680的WaRP7示例 344
8.4小結 351
第9章從用戶空間利用V4L2API 353
9.1技術要求 353
9.2從用戶空間看V4L2 353
9.2.1V4L2用戶空間API 353
9.2.2常用ioctl命令 354
9.2.3在用戶空間中使用V4L2API的示例 356
9.3視頻設備打開和屬性管理 357
9.3.1打開和關閉設備 357
9.3.2查詢設備功能 357
9.4緩沖區管理 359
9.4.1圖像(緩沖區)格式 360
9.4.2請求緩沖區 364
9.4.3請求用戶指針緩沖區 364
9.4.4請求內存可映射緩沖區 366
9.4.5請求DMABUF緩沖區 367
9.4.6請求讀/寫I/O內存 369
9.4.7將緩沖區加入隊列并啟用流傳輸 369
9.4.8主緩沖區的概念 370
9.4.9將用戶指針緩沖區加入隊列 370
9.4.10將內存可映射緩沖區加入隊列 371
9.4.11將DMABUF緩沖區加入隊列 371
9.4.12啟用流傳輸 372
9.4.13將緩沖區移出隊列 373
9.4.14將內存映射緩沖區移出隊列 373
9.4.15將用戶指針緩沖區移出隊列 375
9.4.16讀/寫I/O 376
9.5V4L2用戶空間工具 376
9.5.1關于v4l2-ctl 376
9.5.2列出視頻設備及其功能 377
9.5.3更改設備屬性 377
9.5.4設置像素格式、分辨率和幀速率 379
9.5.5采集幀和流傳輸 380
9.6在用戶空間中調試V4L2 382
9.6.1啟用框架調試 382
9.6.2V4L2合規性驅動程序測試 384
9.7小結 385
第10章Linux內核電源管理 387
10.1技術要求 387
10.2基于Linux系統的電源管理概念 388
10.2.1運行時電源管理 389
10.2.2動態電源管理接口 389
10.3主要電源管理框架詳解 389
10.3.1CPUIdle框架 389
10.3.2CPUFreq框架 392
10.3.3Thermal框架 394
10.4系統電源管理休眠狀態 395
10.4.1掛起到空閑 395
10.4.2通電待機 396
10.4.3掛起到內存 396
10.4.4掛起到磁盤 397
10.5為設備驅動程序添加電源管理功能 399
10.5.1設備和電源管理操作數據結構 399
10.5.2實現運行時電源管理功能 401
10.5.3驅動程序中的運行時電源管理 402
10.5.4運行時電源管理的同步和異步操作 404
10.5.5自動掛起 404
10.6綜合應用 405
10.6.1probe函數中的電源管理機制 405
10.6.2讀取函數中的電源管理調用 407
10.6.3卸載模塊時的電源管理方法 409
10.6.4運行時電源管理回調函數執行的一般規則 410
10.6.5電源域的概念 410
10.7系統掛起和恢復順序 411
10.7.1掛起階段 411
10.7.2恢復階段 412
10.7.3實現系統休眠功能 412
10.8系統喚醒源 415
10.8.1喚醒源的數據結構 415
10.8.2使設備成為喚醒源 417
10.8.3喚醒功能激活實例 418
10.8.4IRQ處理程序 419
10.8.5喚醒源和sysfs 421
10.8.6關于IRQF_NO_SUSPEND標志 422
10.9小結 422
第3篇與其他Linux內核子系統保持同步
第11章編寫PCI設備驅動程序 425
11.1技術要求 425
11.2PCI總線和接口介紹 426
11.2.1術語 427
11.2.2PCI總線枚舉、設備配置和尋址 428
11.2.3設備識別 428
11.2.4總線枚舉 428
11.3PCI地址空間 432
11.3.1PCI配置空間 432
11.3.2PCII/O地址空間 433
11.3.3PCI內存地址空間 433
11.4BAR的概念 433
11.5中斷分配 434
11.5.1PCI傳統INT-X中斷 434
11.5.2基于消息的中斷類型 435
11.5.3MSI機制 436
11.5.4MSI-X機制 437
11.5.5傳統INTx模擬 437
11.6LinuxKernelPCI子系統 438
11.7PCI數據結構 439
11.7.1實例化PCI設備的結構體 439
11.7.2用于識別PCI設備的結構體 441
11.7.3實例化PCI設備驅動程序的結構體 443
11.7.4注冊PCI驅動程序 444
11.8PCI驅動程序結構體概述 445
11.8.1啟用設備 445
11.8.2總線控制能力 446
11.8.3訪問配置寄存器 447
11.8.4訪問內存映射I/O資源 448
11.8.5訪問I/O端口資源 451
11.8.6處理中斷 453
11.8.7傳統INTxIRQ分配 455
11.8.8模擬INTxIRQ調和 457
11.8.9關于鎖定的注意事項 457
11.8.10關于傳統API的簡要說明 457
11.9PCI和直接內存訪問 458
11.9.1關于DMA緩沖區 459
11.9.2PCI一致DMA映射 460
11.9.3流式DMA映射 462
11.9.4單緩沖區映射 462
11.9.5分散/聚集映射 464
11.10小結 466
第12章利用NVMEM框架 467
12.1技術要求 467
12.2NVMEM數據結構和API 468
12.2.1NVMEM硬件抽象數據結構 468
12.2.2NVMEM設備的運行時配置數據結構 468
12.2.3NVMEM數據單元的數據結構 470
12.3編寫NVMEM提供者驅動程序 472
12.3.1NVMEM設備的注冊和注銷 472
12.3.2實時時鐘設備中的NVMEM存儲器 473
12.3.3DS1307實時時鐘驅動程序示例 474
12.3.4實現NVMEM讀/寫回調函數 475
12.3.5NVMEM提供者的設備樹綁定 476
12.4NVMEM使用者驅動程序API 477
12.4.1NVMEM使用者API 477
12.4.2用戶空間中的NVMEM 478
12.5小結 480
第13章看門狗設備驅動程序 481
13.1技術要求 481
13.2看門狗數據結構和API 481
13.2.1表示看門狗設備的結構體 482
13.2.2表示看門狗信息的結構體 483
13.2.3表示看門狗操作的結構體 485
13.2.4注冊/注銷看門狗設備 486
13.2.5處理預超時和調控器 488
13.2.6基于GPIO的看門狗 489
13.3看門狗用戶空間接口 491
13.3.1啟動和停止看門狗 491
13.3.2發送保持活動的ping 492
13.3.3獲取看門狗的功能和ID 493
13.3.4設置和獲取超時和預超時 493
13.3.5獲取剩余的時間 494
13.3.6獲取(啟動/重啟)狀態 494
13.3.7看門狗sysfs接口 496
13.3.8處理預超時事件 497
13.4小結 497
第14章Linux內核調試技巧和最佳實踐 499
14.1技術要求 499
14.2了解Linux內核發布流程 499
14.3Linux內核開發技巧 501
14.3.1消息打印 502
14.3.2內核日志級別 502
14.3.3內核日志緩沖區 504
14.3.4添加計時信息 505
14.4Linux內核跟蹤和性能分析 506
14.4.1使用Ftrace檢測代碼 506
14.4.2可用的tracer 508
14.4.3functiontracer 509
14.4.4function_graphtracer 510
14.4.5函數過濾器 512
14.4.6跟蹤事件 513
14.4.7使用Ftrace接口跟蹤特定進程 515
14.5Linux內核調試技巧 516
14.5.1oops和恐慌分析 516
14.5.2轉儲oops跟蹤消息 519
14.5.3使用objdump識別內核模塊中的錯誤代碼行 520
14.6小結 521
序: