深入理解 FreeBSD 設備驅動程序開發 深入理解FreeBSD设备驱动程序开发

約瑟夫 (Joseph K.)

  • 出版商: 機械工業
  • 出版日期: 2013-02-01
  • 定價: $414
  • 售價: 8.5$352
  • 語言: 簡體中文
  • 頁數: 315
  • 裝訂: 平裝
  • ISBN: 7111411579
  • ISBN-13: 9787111411574
  • 相關分類: BSD
  • 無法訂購

買這商品的人也買了...

商品描述

<內容簡介>

《深入理解FreeBSD設備驅動程序開發》編著者約瑟夫。
    《深入理解FreeBSD設備驅動程序開發》內容提要:本書共17章:第l章介紹了設備驅動程序的類型、可加載內核模塊的編譯與加載:第2章介紹了內核的分配與管理;第3章講解了在用戶空間下如何控制設備驅動程序並與之通信;第4章討論了與多線程編程和併發執行有關的問題和解決方案;第5章解析了延遲代碼執行和異步代碼執行等機制並解釋了這些機制的深層原因;第6章介紹了虛擬空調制解調器的實際應用;第7章講解了FreeBSD用作管理系統中硬件設備的底層基本結構:第8章討論FreeBSD的中斷處理;第9章全面講解了井口打印機的驅動程序:第lO章講解了埠映射和內存映射的輸入輸出:第11章分析了智能平臺管理接口驅動程序:第12章講解瞭如何在FreeBSD中使用直接內存訪問機制;第13章介紹瞭如何管理存儲設備,其中包括磁盤驅動器、快閃內存等:第14章概述通用存取方法;第15章講解瞭如何管理USB設備:第16章描述了網絡驅動程序所使用的數據結構,以及對消息驅動中斷機制的介紹;第17章詳細介紹了em(4)的包接收與傳輸組件。

<目錄>

 譯者序
  序言
  前言
  致謝
第1章 構建並運行模塊1
  1.1  設備驅動程序的類型1
  1.2  可加載內核模塊2
  1.2.1  模塊事件處理程序2
  1.2.2  DECLARE_MO-DULE宏3
  1.3  Hello, world!5
  1.4  編譯與加載6
  1.5  字符設備驅動程序7
  1.5.1  d_foo函數8
  1.5.2  字符設備開關表8
  1.5.3  make_dev函數和des-troy_dev函數9
  1.6  實例:內存字符設備驅動程序10
  1.6.1  echo_write函數13
  1.6.2  echo_read函數14
  1.6.3  echo_modevent函數14
  1.6.4  DEV_MODULE宏15
  1.6.5  試運行16
  1.7  塊設備驅動程序消失了16
  1.8  本章小結17
第2章 分配內存18
  2.1  內存管理例程18
  2.2  malloc_type結構19
  2.2.1  MALLOC_DE-FINE宏20
  2.2.2  MALLOC_DE-CLARE宏20
  2.3  讓一切配合起來21
  2.4  連續物理內存管理例程23
  2.5  一個簡單的例子24
  2.6  本章小結26
第3章 設備通信與控制27
  3.1  ioctl接口27
  3.2  定義ioctl命令29
  3.3  實現ioctl30
  3.3.1  echo_write函數34
  3.3.2  echo_set_buffer_size函數35
  3.3.3  echo_ioctl函數36
  3.3.4  echo_modevent函數37
  3.3.5  試運行38
  3.4  調用ioctl38
  3.5  sysctl41
  3.6  實現sysctl(第1部分)41
  3.7  sysctl上下文管理例程45
  3.8  創建動態的sysctl45
  3.8.1  SYSCTL_STATIC_CHILDREN宏48
  3.8.2  SYSCTL_CHILDREN宏48
  3.9  實現sysctl(第2部分)48
  3.9.1  sysctl_set_buffer_size函數52
  3.9.2  試運行53
  3.10  本章小結53
第4章 線程同步54
  4.1  一個簡單的同步問題54
  4.2  一個更複雜的同步問題55
  4.2.1  race_new函數59
  4.2.2  race_find函數59
  4.2.3  race_destroy函數60
  4.2.4  race_ioctl函數60
  4.2.5  race_modevent函數61
  4.2.6  問題的根源62
  4.3  防止競態條件66
  4.4  互斥鎖67
  4.4.1  自旋互斥鎖67
  4.4.2  休眠互斥鎖67
  4.5  互斥鎖管理例程68
  4.6  實現互斥鎖70
  4.6.1  race_modevent函數73
  4.6.2  試運行74
  4.7  共享/獨佔鎖75
  4.8  共享/獨佔鎖管理例程75
  4.9  實現共享/獨佔鎖77
  4.10  讀者/寫者鎖81
  4.11  讀者/寫者鎖管理例程81
  4.12  條件變量83
  4.13  條件變量管理例程83
  4.14  一般性原則85
  4.14.1  避免在獨佔鎖上遞歸85
  4.14.2  避免長時間佔用獨佔鎖85
  4.15  本章小結85
第5章 延遲執行86
  5.1  主動上下文切換/休眠86
  5.2  實現休眠與條件變量88
  5.2.1  sleep_modevent函數92
  5.2.2  load函數92
  5.2.3  sleep_thread函數93
  5.2.4  sysctl_debug_sleep_test函數94
  5.2.5  unload函數95
  5.2.6  試運行96
  5.3  內核事件處理器96
  5.4  callout98
  5.5  callout和競態條件100
  5.6  任務隊列101
  5.6.1  全局任務隊列101
  5.6.2  任務隊列管理例程102
  5.7  本章小結103
第6章 案例研究:虛擬空調制解調器104
  6.1  前期基礎104
  6.2  代碼分析105
  6.2.1  nmdm_modevent函數107
  6.2.2  nmdm_clone函數108
  6.2.3  nmdm_alloc函數110
  6.2.4  nmdm_outwakeup函數111
  6.2.5  nmdm_task_tty函數112
  6.2.6  nmdm_inwakeup函數113
  6.2.7  nmdm_modem函數114
  6.2.8  nmdm_param函數115
  6.2.9  nmdm_timeout函數116
  6.2.10  bits_per_char函數117
  6.2.11  試運行118
  6.3  本章小結118
第7章 Newbus和資源分配119
  7.1  自動配置與Newbus驅動程序119
  7.1.1  device_foo函數119
  7.1.2  設備方法表121
  7.1.3  DRIVER_MO-DULE宏121
  7.2  驅動程序示例122
  7.2.1  foo_pci_probe函數125
  7.2.2  foo_pci_attach函數126
  7.2.3  d_foo函數127
  7.2.4  foo_pci_detach函數127
  7.2.5  試運行128
  7.3  硬件資源管理128
  7.4  本章小結130
第8章 中斷處理131
  8.1  註冊中斷處理程序131
  8.2  FreeBSD中的中斷處理程序132
  8.3  實現中斷處理程序133
  8.3.1  pint_identify函數138
  8.3.2  pint_probe函數138
  8.3.3  pint_attach函數139
  8.3.4  pint_detach函數140
  8.3.5  pint_open函數140
  8.3.6  pint_close函數142
  8.3.7  pint_write函數142
  8.3.8  pint_read函數143
  8.3.9  pint_intr函數144
  8.3.10  試運行144
  8.4  生成並口中斷145
  8.5  本章小結146
第9章 案例研究:並口打印機驅動程序147
  9.1  代碼分析147
  9.1.1  lpt_identify函數152
  9.1.2  lpt_probe函數152
  9.1.3  lpt_detect函數152
  9.1.4  lpt_port_test函數153
  9.1.5  lpt_attach函數154
  9.1.6  lpt_detach函數156
  9.1.7  lpt_open函數157
  9.1.8  lpt_read函數159
  9.1.9  lpt_write函數161
  9.1.10  lpt_intr函數163
  9.1.11  lpt_timeout函數164
  9.1.12  lpt_push_bytes函數165
  9.1.13  lpt_close函數166
  9.1.14  lpt_ioctl函數167
  9.1.15  lpt_request_ppbus函數169
  9.1.16  lpt_release_ppbus函數169
  9.2  本章小結170
第10章 管理與使用資源171
  10.1  輸入輸出埠與輸入輸出內存171
  10.1.1  從輸入輸出埠和輸入輸出內存讀取數據171
  10.1.2  向輸入輸出埠和輸入輸出內存寫入數據173
  10.1.3  流操作175
  10.2  內存柵欄178
  10.3  讓一切配合起來179
  10.3.1  led_identify函數183
  10.3.2  led_probe函數184
  10.3.3  led_attach函數184
  10.3.4  led_detach函數185
  10.3.5  led_open函數186
  10.3.6  led_close函數186
  10.3.7  led_read函數187
  10.3.8  led_write函數188
  10.4  本章小結188
第11章 案例研究:智能平臺管理接口驅動189
  11.1  代碼分析189
  11.1.1  ipmi_pci_probe函數191
  11.1.2  ipmi_pci_match函數192
  11.1.3  ipmi_pci_attach函數192
  11.1.4  ipmi2_pci_probe函數195
  11.1.5  ipmi2_pci_attach函數195
  11.2  本章小結197
第12章 直接內存訪問198
  12.1  實現DMA198
  12.1.1  初始化DMA數據傳輸200
  12.1.2  取消DMA201
  12.2  創建DMA標籤201
  12.3  銷毀DMA標籤203
  12.4  DMA映射管理例程(第1部分)204
  12.5  將(DMA)緩衝區加載DMA映射204
  12.5.1  bus_dma_segment結構205
  12.5.2  bus_dmamap_load函數205
  12.5.3  bus_dmamap_load_mbuf函數206
  12.5.4  bus_dmamap_load_mbuf_sg函數207
  12.5.5  bus_dmamap_load_uio函數207
  12.5.6  bus_dmamap_unload函數207
  12.6  DMA映射管理例程(第2部分)207
  12.7  一個簡單的例子208
  12.8  同步DMA緩衝區210
  12.9  本章小結210
第13章 存儲驅動211
  13.1  disk結構211
  13.1.1  描述性字段212
  13.1.2  存儲設備方法字段212
  13.1.3  必需的媒體特性字段213
  13.1.4  可選的媒體特性字段213
  13.1.5  驅動程序私有數據字段213
  13.2  disk結構管理例程214
  13.3  塊輸入輸出結構214
  13.4  塊輸入輸出隊列216
  13.5  讓一切配合起來217
  13.5.1  at45d_attach函數222
  13.5.2  at45d_delayed_attach函數223
  13.5.3  at45d_get_info函數224
  13.5.4  at45d_wait_for_device_ready函數224
  13.5.5  at45d_get_status函數225
  13.5.6  at45d_strategy函數225
  13.5.7  at45d_task函數226
  13.6  塊輸入輸出完成例程228
  13.7  本章小結228
第14章 通用存取方法229
  14.1  CAM是如何工作的230
  14.2  一個(略為)簡單的例子231
  14.2.1  mfip_attach函數239
  14.2.2  mfip_detach函數240
  14.2.3  mfip_action函數240
  14.2.4  mfip_poll函數243
  14.2.5  mfip_start函數243
  14.2.6  mfip_done函數245
  14.3  SIM註冊例程246
  14.3.1  cam_simq_alloc函數247
  14.3.2  cam_sim_alloc函數247
  14.3.3  xpt_bus_register函數248
  14.4  動作例程248
  14.4.1  XPT_PATH_INQ常量248
  14.4.2  XPT_RESET_BUS常量250
  14.4.3  XPT_GET_TRAN_SETTINGS常量251
  14.4.4  XPT_SET_TRAN_SETTINGS常量254
  14.4.5  XPT_SCSI_IO常量255
  14.4.6  XPT_RESET_DEV常量260
  14.5  本章小結261
第15章 USB驅動262
  15.1  關於USB設備262
  15.2  關於USB設備的更多信息263
  15.3  USB配置結構264
  15.3.1  必需的字段265
  15.3.2  可選的字段265
  15.3.3  USB傳送標誌266
  15.4  USB傳輸(針對FreeBSD)267
  15.5  USB配置結構管理例程269
  15.6  USB方法結構270
  15.7  讓一切配合起來271
  15.7.1  ulpt_probe函數276
  15.7.2  ulpt_attach函數276
  15.7.3  ulpt_detach函數278
  15.7.4  ulpt_open函數279
  15.7.5  ulpt_reset函數279
  15.7.6  unlpt_open函數280
  15.7.7  ulpt_close函數281
  15.7.8  ulpt_ioctl函數282
  15.7.9  ulpt_watchdog函數282
  15.7.10  ulpt_start_read函數282
  15.7.11  ulpt_stop_read函數283
  15.7.12  ulpt_start_write函數283
  15.7.13  ulpt_stop_write函數284
  15.7.14  ulpt_write_callback函數284
  15.7.15  ulpt_read_callback函數285
  15.7.16  ulpt_status_callback函數287
  15.8  本章小結288
第16章 網絡驅動程序I:數據結構289
  16.1  網絡接口結構289
  16.2  網絡接口結構管理例程292
  16.2.1  ether_ifattach函數293
  16.2.2  ether_ifdetach函數294
  16.3  網絡接口媒體結構295
  16.4  網絡接口媒體結構管理例程295
  16.5  Hello, world297
  16.6  mbuf結構300
  16.7  消息驅動中斷300
  16.8  實現MSI301
  16.9  MSI管理例程303
  16.10  本章小結304
第17章 網絡驅動程序II:包的接收與傳輸305
  17.1  數據包接收305
  17.1.1  em_rxeof函數305
  17.1.2  em_handle_rx函數309
  17.2  數據包發送310
  17.2.1  em_start_locked函數310
  17.2.2  em_txeof函數311
  17.3  後數據包發送314
  17.4  本章小結315
  參考文獻316