基本信息
作者: 曹桂平
叢書名: 華清遠見系列圖書
出版社:電子工業出版社
ISBN:9787121128288
上架時間:2011-3-7
出版日期:2011 年3月
開本:16開
頁碼:1
版次:1-1
內容簡介
shell是用戶與核心進行互動操作的一種接口,是linux最重要的軟體之一。目前最流行的shell稱為bash shell,bash shell腳本編程以其簡潔、高效而著稱,多年來成為linux程式本書結合作者實際的開發經驗,對vxworks作業系統內部的機制及其各類設備驅動的開發進行了深入的講解和分析。全書分3篇共11章,第1篇對vxworks作業系統的主要組件如任務、任務調度、任務間通信、記憶體管理、中斷處理進行了較為細緻的分析;其後對很多vxworks開發者不甚了解的vxworks核心映像類型以及啟動方式和流程進行了詳細的說明和解析。第2篇是驅動開發的準備階段,著重介紹了vxworks系統下設備驅動的核心層次結構。第3篇作為本書的重點,每章對應一類驅動,結合開發實例,詳細而完整地分析了vxworks下普通字元設備驅動、串口驅動、普通塊設備驅動、flash設備驅動、網路設備驅動以及usb設備驅動的設計和實現。
《vxworks設備驅動開發詳解》面向廣大工程技術工作者,既可作為高等院校教師和相關專業學生的教材,又可作為各類培訓班的培訓教程。
目錄
《vxworks設備驅動開發詳解》
第1篇 vxworks作業系統快速入門篇
第1章 vxworks嵌入式操作
系統的特點與套用 2
1.1 嵌入式系統概述 3
1.1.1 嵌入式系統定義 3
1.1.2 嵌入式系統組成和特點 3
1.1.3 嵌入式系統發展趨勢 4
1.1.4 實時作業系統 5
1.實時作業系統定義 5
2.實時作業系統的特徵 6
3.實時作業系統的相關概念 6
1.2 vxworks作業系統基本特點 7
1.2.1 作業系統核心結構——微核心和宏核心 7
1.宏核心 7
2.微核心 8
1.2.2 vxworks核心——高性能的微核心設計 8
1.2.3 vxworks開發支持——可裁減的運行軟體 8
1.2.4 vxworks網路支持——綜合的網路工具 9
1.2.5 vxworks移植性支持 9
.1.兼容posix 1003.1b標準 9
2.平台的選擇 9
3.方便移植到用戶硬體上 9
1.2.6 vxworks作業系統選件 10
1.3 vxworks作業系統套用範圍 10
1.4 本章小結 11
第2章 vxworks作業系統的基本組件 12
2.1 vxworks任務 13
2.1.1 核心實現基本原理 13
2.1.2 任務操作函式 15
2.1.3 深入了解任務棧 19
2.1.4 任務名長度問題 20
2.1.5 正確結束任務 21
2.1.6 任務的鉤子函式——黑客機制 23
2.1.7 任務小結 25
2.2 vxworks任務調度算法——基於優先權的搶占式調度 26
2.3 vxworks任務間通信策略 29
2.3.1 信號量 30
2.3.2 訊息佇列 31
2.3.3 管道 32
2.3.4 網路套接字socket 32
2.3.5 任務間通信的特殊機制:信號 33
2.4 vxworks記憶體管理——虛擬地址空間支持 33
2.5 vxworks中斷處理——多層次的中斷轉移 38
2.5.1 vxworks下中斷轉移過程詳解(基於arm平台) 40
2.5.2 中斷上下文中為何不可調用可引起睡眠的函式 43
2.6 本章小結 45
第3章 vxworks作業系統啟動過程詳解 46
3.1 vxworks作業系統啟動 47
3.1.1 vxworks基本啟動方式 47
3.1.2 vxworks作業系統記憶體布局 48
1.非壓縮形式 48
2.壓縮形式 48
3.1.3 下載型啟動方式概述 50
3.1.4 rom型啟動方式概述 53
3.2 深入理解bootrom——下載啟動方式下的“瑞士軍刀” 54
3.2.1 bootrom的構成 55
3.2.2 bootrom腳本的創建 56
3.2.3 腳本運行過程分析 56
3.2.4 bootrom的重定位 60
3.2.5 ram中運行的bootrom代碼 62
1.usrinit函式 62
2.usrroot函式 65
3.bootcmdloop函式 68
3.2.6 在bootrom中添加用戶代碼 68
3.2.7 其他注意事項及說明 69
3.3 深入vxworks啟動過程 71
3.3.1 rom型映像早期啟動流程詳解 71
1.rominit函式 71
2.romstart函式 79
3.3.2 下載型映像早期啟動流程詳解 81
3.3.3 公共啟動流程詳解 82
1.usrinit函式分析 83
2.usrroot函式分析 84
3.啟動用戶代碼 89
3.4 vxworks bsp檔案組成 90
3.4.1 源檔案 91
3.4.2 頭檔案 94
3.4.3 Makefile檔案 97
3.4.4 擴展檔案 100
3.4.5 說明檔案 100
3.5 本章小結 100
第2篇 vxworks設備驅動起步篇
第4章 設備驅動 102
4.1 設備驅動的功能 103
4.2 設備驅動的結構 103
4.3 設備驅動的基本特點 105
4.3.1 驅動代碼執行環境——任務和中斷上下文 105
4.3.2 設備基本分類 105
4.3.3 驅動代碼安全性——參數合法性檢查 106
4.3.4 驅動基本工作模式——輪詢和中斷 106
4.3.5 驅動與硬體數據的互動方式——dma和直接複製 107
4.3.6 其他注意事項——volatile關鍵字 107
4.4 本章小結 108
第5章 vxworks下設備驅動的核心結構層次 109
5.1 認識vxworks設備驅動核心基本層次 110
1.usb設備驅動核心層次 110
2.塊設備驅動核心層次 111
3.字元設備驅動核心層次 111
4.網路設備驅動核心層次 112
5.2 vxworks核心驅動基本結構——核心三張表 114
5.2.1 系統設備表 114
5.2.2 系統驅動表 116
5.2.3 系統檔案描述符表 118
5.2.4 核心三張表之間的聯繫 120
5.3 vxworks核心驅動支持——“免費的午餐” 122
5.3.1 管道虛擬設備驅動支持 123
5.3.2 虛擬記憶體設備驅動支持 124
1.虛擬記憶體設備創建函式 124
2.虛擬記憶體設備使用實例 125
5.3.3 ramdisk設備驅動支持 127
5.3.4 網路設備(netdrv)高層次驅動支持 129
1.netdrv驅動基本工作原理 129
2.網路設備節點的創建 130
3.netdrv驅動中關鍵參數的獲取 131
5.4 vxworks檔案系統支持 132
5.4.1 虛擬根檔案系統vrfs 132
5.4.2 事務型檔案系統hrfs 132
5.4.3 ms-dos兼容型檔案系統dosfs 133
5.4.4 原始檔案系統rawfs 134
5.4.5 cd-rom檔案系統cdromfs 135
5.4.6 唯讀檔案系統romfs 135
5.4.7 目標機檔案系統tsfs 136
5.5 添加驅動到vxworks核心 136
1.將驅動代碼編入核心映像 136
2.註冊驅動和創建設備 137
5.6 本章小結 138
第3篇 vxworks之六大核心設備驅動
第6章 vxworks設備驅動之字元設備驅動詳解 140
6.1 用戶請求到字元設備驅動服務函式的傳遞 141
6.2 實例入門:基於spi接口的串口擴展晶片vk3224驅動實現 144
6.3 認識vxworks字元設備驅動基本數據結構——dev_hdr結構 145
6.4 註冊字元設備驅動和創建字元設備節點 147
6.5 編寫字元設備驅動底層服務函式 150
6.5.1 編寫字元設備打開函式 150
6.5.2 編寫字元設備讀寫函式 152
6.5.3 編寫字元設備控制函式 155
6.5.4 編寫字元設備關閉函式 157
6.5.5 設備驅動工作模式的選擇 160
6.5.6 編寫字元設備刪除函式 161
6.6 刪除字元設備節點和卸載字元設備驅動 163
6.6.1 刪除字元設備節點 163
6.6.2 卸載字元設備驅動 164
6.7 本章小結 165
第7章 vxworks設備驅動之串口驅動詳解 166
7.1 認識vxworks核心TTY
中間層——串口驅動的基石 168
7.1.1 tty中間層應具備的功能 168
7.1.2 基於tty的串口驅動實現思想 169
7.1.3 tty中間層與底層串口驅動的關係 171
7.2 vxworks核心tty中間層初始化詳解 171
7.2.1 ttydrv函式 172
7.2.2 ttydevcreate函式 173
7.2.3 sysserialhwinit和sysserialhwinit2函式 174
7.2.4 tty中間層初始化過程小結及注意事項 174
7.3 認識vxworks下串口驅動基本數據結構——sio_chan結構 176
7.3.1 核心sio_chan結構定義 176
7.3.2 封裝sio_chan結構 178
7.4 vxworks串口驅動檔案基本構成 180
7.5 vxworks串口驅動核心接口
檔案sysserial.c的實現 183
1.sysserial.c模板檔案 184
2.模板檔案函式功能說明 188
3.sysserial.c檔案功能小結 190
7.6 編寫vxworks串口驅動底層服務函式 190
7.6.1 編寫串口驅動初始化函式 191
7.6.2 編寫串口驅動回調函式——arm926uartcallback- install 193
7.6.3 編寫串口驅動控制函式——arm926uartioctl 195
7.6.4 編寫串口驅動中斷處理函式——arm926uartint 197
7.6.5 編寫串口驅動啟動傳送函式——arm926uart- txstartup 200
7.6.6 編寫串口驅動輪詢工作模式支持函式 202
1.編寫傳送函式arm926uartpolloutput 202
2.編寫接收函式arm926uartpollinput 203
7.7 再議vxworks核心tty中間層 205
7.8 本章小結 208
第8章 vxworks設備驅動之塊設備驅動詳解 208
8.1 認識vxworks塊設備驅動核心基本層次 210
8.2 vxworks塊設備驅動基石——核心檔案系統支持 211
8.2.1 rawfs檔案系統詳解 211
1.rawfs檔案系統初始化第一步:rawfsinit函式 212
2.rawfs檔案系統初始化第二步:rawfsdevinit函式 212
3.rawfs檔案系統使用示例 214
4.cbio中間層淺析 216
8.2.2 dosfs檔案系統詳解 220
1.dosfs初始化基本流程 221
2.初始化第一步:dosfslibinit函式 222
3.初始化第二步:dosfsdevcreate函式 223
4.dosfs檔案系統格式化 225
5.dosfs檔案系統初始化小結 226
8.3 認識vxworks塊設備驅動基本數據結構——blk_dev結構 228
8.3.1 核心blk_dev結構定義 229
8.3.2 封裝blk_dev結構 232
8.4 vxworks塊設備驅動基本架構 233
8.4.1 塊設備驅動工作的特點 233
8.4.2 基於cbio中間層的塊設備驅動核心層次 234
8.4.3 塊設備驅動底層函式組成 234
8.5 編寫vxworks塊設備驅動底層服務函式 235
8.5.1 認識ata(ide)硬碟結構 236
8.5.2 認識硬碟分區 237
8.5.3 認識cbio分區管理層 239
8.5.4 編寫塊設備驅動初始化函式 241
8.5.5 編寫塊設備驅動讀設備函式atablkrd 244
8.5.6 編寫塊設備驅動寫設備函式atablkwrt 245
8.5.7 編寫塊設備驅動設備控制函式ataioctl 247
8.5.8 編寫塊設備驅動設備狀態查詢函式atastatus 248
8.5.9 編寫塊設備驅動設備復位函式atareset 248
8.6 本章小結 249
第9章 vxworks設備驅動之flash設備驅動詳解 249
9.1 認識flash設備 251
9.1.1 概述 251
9.1.2 flash設備硬體接口的差別 252
9.1.3 flash設備容量和成本 252
9.1.4 flash設備可靠性和耐用性 252
9.1.5 flash設備易用性 253
9.1.6 flash設備軟體支持 253
9.2 深入nand flash設備 254
9.3 深入nor flash設備 256
9.3.1 nor flash存儲器特點 256
9.3.2 nor flash命令集bcs / scs 256
9.3.3 nor flash接口訪問標準 257
9.4 認識flash設備地址問題——驅動“陷阱” 258
9.5 vxworks下flash設備驅動核心層次詳解——認識trueffs中間層 259
9.6 vxworks核心trueffs中間層初始化詳解 261
9.7 創建和使用flash設備 264
9.8 認識vxworks下flash設備驅動基本架構 267
9.9 編寫vxworks下flash設備驅動socket層服務函式 268
9.9.1 socket驅動層檔案構成 268
9.9.2 socket驅動層實現示例 269
9.9.3 socket層實現小結 279
9.10 編寫vxworks下flash設備驅動mtd層服務函式 285
9.10.1 tffsconfig.c檔案——flash設備驅動初始化入口 286
9.10.2 tffsmtd.c檔案——flash設備驅動mtd層服務函式所在地 289
9.10.2.1 編寫flash設備識別函式 289
9.10.2.2 編寫flash設備讀函式 292
9.10.2.3 編寫flash設備寫函式 293
9.10.2.4 編寫flash設備塊擦除函式 296
9.10.2.5 編寫flash設備地址映射函式 297
9.11 本章小結 297
第10章 vxworks設備驅動之網路設備驅動詳解 298
10.1 vxworks下網路設備驅動核心基本層次——認識mux接口層 300
10.1.1 網路設備驅動的基本特點 300
10.1.2 網路設備驅動核心層次 301
10.1.3 認識mux中間層 302
10.2 認識vxworks網路設備驅動基本數據結構——end_obj結構 304
10.3 實例介紹:基於tms320d-m6446平台的emac網口驅動 305
10.4 定義vxworks網路設備驅動自定義結構——“信息集中地” 310
10.5 vxworks網路設備驅動載入與啟動 311
10.5.1 網路設備驅動初始化基本流程 311
10.5.2 修改confignet.h檔案 313
10.5.3 網路設備驅動載入函式armload的實現 314
10.5.4 網路設備驅動啟動函式armstart的實現 319
10.6 vxworks網路設備驅動數據幀後台處理支持:netjobadd 320
10.7 編寫vxworks網路設備驅動數據幀接收函式 323
10.7.1 編寫數據幀接收“下半部分”入口函式 323
10.7.2 vxworks核心網路棧對數據幀的封裝要求 324
10.7.3 網路數據幀處理和上傳 330
10.7.4 再議網路數據幀的接收 332
10.8 編寫vxworks網路設備驅動數據幀傳送函式 333
10.9 編寫vxworks網路設備控制函式 337
10.10 編寫vxworks網路設備驅動查詢模式支持函式 342
1.armpollsend函式的實現 343
2.armpollrcv函式的實現 344
10.11 編寫vxworks網路設備停止和卸載函式 345
1.armstop函式的實現 346
2.armunload函式的實現 347
10.12 認識vxworks網路設備驅動核心支持函式 347
10.13 vxworks網路設備驅動實現小結 349
10.14 認識網路設備ip地址和mac地址 350
10.15 vxworks網路設備驅動對多網口的支持 351
10.15.1 修改底層驅動 352
10.15.2 修改confignet.h檔案 353
10.15.3 修改usrnetinit函式 354
10.16 本章小結 355
第11章 vxworks設備驅動之usb設備驅動詳解 355
11.1 usb詳解 357
11.1.1 usb的定義 357
11.1.2 認識usb描述符及其相互關係 360
1.驅動描述符(device descriptor) 360
2.配置描述符(configuration descriptor) 360
3.接口描述符(interface descriptor) 361
4.端點描述符(ENDPOINT descriptor) 362
11.1.3 usb控制器基本分類 363
11.1.4 認識usb硬體接口 363
11.2 認識vxworks下usb設備驅動核心層次和驅動對象 365
11.3 示例介紹:uhci usb主機控制器基本工作原理 367
11.3.1 uhci規範 367
11.3.2 uhci基本工作原理和數據結構 368
11.3.3 uhci控制器驅動原理概述 371
11.4 vxworks下usb設備操作請求核心傳遞過程詳解 372
11.4.1 第一層入口函式:usbbulkdevblkrd 373
11.4.2 第二層入口函式:usbbulkcmdexecute 376
11.4.3 第三層入口函式:usbdtransfer 381
11.4.4 第四層入口函式:urbexecblock 383
11.4.5 第五層入口函式:usbdcoreentry 384
11.4.6 第六層入口函式:fnctransfer 386
11.4.7 第七層入口函式:usbHCDirpsubmit 388
11.4.8 第八層入口函式:底層hcd總入口函式 389
11.4.9 vxworks下usb設備操作請求核心傳遞過程總結 391
11.5 vxworks下usb設備套用層類驅動初始化詳解 392
11.6 vxworks下usb控制器驅動初始化詳解 397
11.7 vxworks下usb控制器驅動架構 402
11.8 編寫vxworks下usb控制器驅動底層服務函式 403
11.8.1 編寫usb操作請求總入口函式 403
11.8.2 編寫usb控制器驅動中斷處理函式 404
11.8.3 編寫usb控制器驅動具體服務函式 408
11.9 本章小結 408
參考文獻 409
前言
VxWorks是較為常用的嵌入式硬實時作業系統,在很多領域都有其套用的身影,然而由於VxWorks作業系統原始碼不公開,雖然文檔中對各種驅動設計都有說明,但在實際套用中還是會遇到很多問題。本書根據作者工作中的一些驅動經驗,結合Wind River提供的一些官方文檔和開發環境下的原始碼寫成,對VxWorks下各種常見設備的驅動都做了比較詳細的介紹和分析,可以作為VxWorks下設備驅動設計的指南。另外,對於各種類型的VxWorks啟動方式以及映像檔案組成進行了較為細緻的分析,將澄清VxWorks BSP開發者具有的很多疑問。本書既可作為VxWorks初學者的學習材料,也可作為VxWorks老手的參考資料。
《VxWorks設備驅動開發詳解》內容
《VxWorks設備驅動開發詳解》分為3篇共11章。
第1篇為VxWorks作業系統快速入門篇,共包括3章內容。
第1章簡單介紹了嵌入式系統,並對VxWorks作業系統的特性進行了簡單說明。
第2章對VxWorks作業系統的主要組成進行了比較詳細的介紹,包括任務、任務調度、任務間通信、記憶體管理、中斷處理。書中內容不是翻譯官方的文檔,而是結合作者的經驗有感而發。
第3章對VxWorks核心映像類型以及啟動方式進行了詳細分析,並對下載方式中使用的bootrom進行了較為深入的分析和介紹,此後對VxWorks作業系統的啟動過程進行了梳理。本章將澄清讀者對VxWorks啟動方面的很多疑問。
第2篇為VxWorks設備驅動起步篇,共包括2章內容。
第4章討論了驅動程式的基本功能和結構,對驅動程式中常用的一些策略以及注意事項進行了介紹。
第5章介紹了VxWorks設備驅動的核心結構層次,著重對I/O子系統及其維護的三張系統表進行了討論,並對VxWorks下已有的幾個較為常用的驅動以代碼示例的方式介紹其使用方法。
第3篇為本書的重點,對VxWorks下六大核心設備驅動進行了詳細的分析和介紹,六類驅動中每類驅動對應一章內容,故本篇共包括6章內容。
第6章開始進入具體設備驅動的設計,本章將從結構層次最簡單的普通字元設備驅動開始講起,以一個SPI接口驅動代碼為例,著重討論了普通字元設備驅動的結構、設計方式和具體實現。
第7章對串口驅動設計和實現進行了詳細的分析。串口也是字元設備的一種,由於其常用性,VxWorks核心專門提供了TTY中間層來提高串口驅動設計的效率,降低串口驅動設計的複雜度。
第8章進入第二大類設備——塊設備驅動的設計和實現的分析。我們將從數據結構的知識出發,分析塊設備驅動的基本結構,進而討論其具體實現。VxWorks下塊設備驅動工作的方式比較特殊,其使用的阻塞讀寫方式不同於通用作業系統下的中斷讀寫方式,這與VxWorks特殊的工作環境有關。
第9章將對Flash設備驅動進行詳細介紹。Flash設備是嵌入式平台上最常見和常用的設備,用以存儲作業系統核心映像和用戶數據。本章將以VxWorks核心提供的TrueFFS中間層進行展開,分析Flash設備驅動涉及的各個方面。
第10章進入第三大類設備——網路設備驅動的設計和實現中。網路設備由於其獨特的工作方式,其核心驅動層次不同於其他兩類設備(字元設備、塊設備),其不屬於I/O子系統管理,而是直接工作在核心網路棧的實現下。為了簡化網路設備驅動設計的複雜度,VxWorks提供了MUX中間層,在該層次下實現的驅動通常被稱為增強型網路驅動。本章同樣也是從數據結構的知識出發,以實際項目中使用的網口驅動代碼為例,逐步完成對網路設備驅動的設計和實現。
第11章分析了USB設備驅動的設計和實現。首先對USB本身進行了詳細的介紹,之後對要驅動的對象進行了澄清。一般而言,USB設備驅動指的是對USB主機或者目標機控制器的驅動,這個驅動由於與核心USB棧耦合較緊密,故必須對核心USB棧的實現有很清楚的了解才能成功地完成USB主機控制器的驅動開發。本章首先跟隨一個USB類驅動層讀數據請求,對請求在核心USB棧中的傳遞路徑進行了跟蹤,對路徑上調用的關鍵函式以及使用的數據結構進行了較為詳細的分析和介紹,之後以Mass Storage類驅動為例,介紹類驅動的初始化過程,並以UHCI控制器驅動為例,介紹主機控制器驅動的初始化過程,最後總結出了USB主機控制器的驅動結構,給出了驅動中兩個中心函式的實現框架。
致謝
我要感謝我尊敬的慈祥的奶奶,您的勤勞善良將影響我的一生,是您教導我“自成人,方成人”,告誡我要嚴於律己。同時,我要感謝我的父母,你們鬢角的絲絲白髮,早已印入我的心中,成為我奮鬥不止的動力。