編輯推薦
《Linux驅動程序開發實例》深入講解瞭Linux設備驅動程序開發,內容包括Linux驅動程序基礎、內核移植、I2C驅動程序、LCD驅動程序、網絡驅動程序、USB驅動程序、輸入子係統驅動程序、塊設備驅動程序等。《Linux驅動程序開發實例》提供瞭豐富的實例代碼和詳細的注釋,並附贈代碼光盤一張。
基於ARM體係結構
全麵剖析Linux驅動程序開發的精髓
涵蓋多種硬件接口驅動程序
附贈內核代碼與實例源代碼
內容簡介
《Linux驅動程序開發實例》專門介紹Linux設備驅動程序開發,涵蓋瞭Linux驅動程序基礎、內核移植、I2C驅動程序、LCD驅動程序、網絡驅動程序、USB驅動程序、輸入子係統驅動程序、塊設備驅動程序等內容。《Linux驅動程序開發實例》以實例為主綫,是為Linux設備驅動程序開發人員量身打造的精品學習圖書和實戰指南。《Linux驅動程序開發實例》提供瞭豐富的實例代碼和詳細的注釋,並附贈完整代碼光盤一張。
《Linux驅動程序開發實例》主要麵嚮各層次的嵌入式Linux開發工程師,也可以作為各類嵌入式係統培訓機構的培訓教材和高校計算機課程的教輔書籍。
內頁插圖
目錄
齣版說明
前言
第1章 Linux設備驅動程序模型1
1.1 設備驅動程序基礎1
1.1.1 驅動程序的概念1
1.1.2 驅動程序的加載方式2
1.1.3 編寫可加載模塊3
1.1.4 帶參數的可加載模塊5
1.1.5 設備驅動程序的分類6
1.2 字符設備驅動程序原理7
1.2.1 file_operations結構7
1.2.2 使用register_chrdev注冊字符設備9
1.2.3 使用cdev_add注冊字符設備11
1.2.4 字符設備的讀寫13
1.2.5 ioctl接口14
1.2.6 seek接口16
1.2.7 poll接口18
1.2.8 異步通知22
1.3 proc文件係統24
1.3.1 proc文件係統概述24
1.3.2 seq_file機製25
1.3.3 使用proc文件係統27
1.4 塊設備驅動程序32
1.4.1 Linux塊設備驅動程序原理32
1.4.2 簡單的塊設備驅動程序實例35
1.5 網絡設備驅動程序39
1.5.1 網絡設備的特殊性39
1.5.2 sk_buff結構40
1.5.3 Linux網絡設備驅動程序架構42
1.5.4 虛擬網絡設備驅動程序實例46
1.6 Linux 2.6設備管理機製50
1.6.1 kobject和kset50
1.6.2 sysfs文件係統51
1.6.3 設備模型層次52
1.6.4 platform的概念54
第2章 Linux內核同步機製58
2.1 鎖機製58
2.1.1 自鏇鎖58
2.1.2 讀寫鎖60
2.1.3 RCU61
2.2 互斥64
2.2.1 原子操作64
2.2.2 信號量65
2.2.3 讀寫信號量67
2.3 等待隊列68
2.3.1 等待隊列原理68
2.3.2 阻塞式I/O實例68
2.3.3 完成事件70
2.4 關閉中斷71
第3章 內存管理與鏈錶72
3.1 物理地址和虛擬地址72
3.2 內存分配與釋放72
3.3 IO端口到虛擬地址的映射73
3.3.1 靜態映射73
3.3.2 動態映射75
3.4 內核空間到用戶空間的映射76
3.4.1 內核空間到用戶空間的地址映射原理76
3.4.2 mmap地址映射實例78
3.5 內核鏈錶80
3.5.1 Linux內核中的鏈錶80
3.5.2 內核鏈錶實例81
第4章 延遲處理83
4.1 內核綫程83
4.2 軟中斷機製85
4.2.1 軟中斷原理85
4.2.2 tasklet87
4.3 工作隊列89
4.3.1 工作隊列原理89
4.3.2 工作隊列實例91
4.4 內核時間92
4.4.1 Linux中的時間概念92
4.4.2 Linux中的延遲93
4.4.3 內核定時器93
第5章 簡單設備驅動程序96
5.1 寄存器訪問96
5.1.1 S3C6410地址映射96
5.1.2 S3C6410看門狗驅動程序實例98
5.1.3 S3C6410蜂鳴器驅動程序實例102
5.2 電平控製107
5.2.1 S3C6410 LED驅動程序實例107
5.2.2 掃描型S3C6410按鍵驅動程序實例109
5.3 時序産生112
5.3.1 時序圖原理112
5.3.2 AT24C02芯片原理112
5.3.3 AT24C02驅動程序開發實例115
5.4 硬中斷處理123
5.4.1 硬中斷處理原理123
5.4.2 中斷型S3C6410按鍵驅動程序實例127
5.5 Linux I/O端口控製132
5.5.1 Linux I/O端口讀寫132
5.5.2 在應用層訪問Linux I/O端口133
5.5.3 /dev/port設備134
第6章 深入Linux內核135
6.1 嵌入式Linux係統構成135
6.2 Linux內核導讀136
6.2.1 Linux內核組成136
6.2.2 Linux的代碼結構137
6.2.3 內核Makefile138
6.2.4 S3C6410硬件初始化139
6.3 Linux文件係統141
6.3.1 虛擬文件係統141
6.3.2 根文件係統143
6.3.3 文件係統加載143
6.3.4 ext3文件係統145
6.4 Flash文件係統145
6.4.1 MTD設備145
6.4.2 MTD字符設備148
6.4.3 MTD塊設備150
6.4.4 cramfs文件係統153
6.4.5 JFFS2文件係統153
6.4.6 YAFFS文件係統155
6.4.7 文件係統總結156
6.5 Linux內核移植156
6.5.1 體係配置156
6.5.2 添加yaffs2157
6.5.3 Nand flash驅動程序移植157
6.5.4 配置啓動參數159
6.5.5 移植RTC驅動程序160
6.6 根文件係統製作162
6.6.1 Busybox162
6.6.2 shell基礎165
6.6.3 根文件係統構建實例166
6.7 udev模型167
6.7.1 udev模型原理167
6.7.2 mdev的使用167
第7章 I2C總綫驅動程序169
7.1 Linux的I2C驅動程序架構169
7.1.1 I2C適配器169
7.1.2 I2C算法170
7.1.3 I2C驅動程序結構170
7.1.4 I2C從設備171
7.1.5 i2c-dev設備層171
7.2 Linux I2C驅動程序開發174
7.2.1 S3C2410X的I2C控製器174
7.2.2 S3C2410X的I2C驅動程序分析175
7.3 S3C2410的I2C訪問實例182
7.4 I2C客戶端驅動程序185
第8章 TTY與串口驅動程序190
8.1 TTY概念190
8.2 Linux TTY驅動程序體係190
8.2.1 TTY驅動程序調用關係190
8.2.2 TTY驅動程序原理191
8.3 綫路規程194
8.4 串口驅動程序與TTY196
8.4.1 串口設備驅動程序原理196
8.4.2 S3C6410的串口驅動程序實例199
8.5 TTY應用層202
第9章 網絡設備驅動程序205
9.1 DM9000網卡驅動程序開發205
9.1.1 DM9000原理205
9.1.2 DM9000X驅動程序分析207
9.1.3 DM9000網口驅動程序移植215
9.2 NFS根文件係統搭建219
9.2.1 主機配置219
9.2.2 NFS根文件係統搭建實例220
9.3 netlink Socket224
9.3.1 netlink機製224
9.3.2 netlink應用層編程228
9.3.3 netlink驅動程序實例229
第10章 framebuffer驅動程序232
10.1 Linux framebuffer驅動程序原理232
10.1.1 framebuffer核心數據結構232
10.1.2 framebuffer操作接口234
10.1.3 framebuffer驅動程序的文件接口236
10.1.4 framebuffer驅動程序框架236
10.2 S3C6410 顯示控製器238
10.3 S3C6410 LCD驅動程序實例243
10.4 framebuffer應用層250
10.5 Qt4界麵係統移植251
第11章 輸入子係統驅動程序253
11.1 Linux輸入子係統概述253
11.1.1 input_dev結構253
11.1.2 輸入事件255
11.2 input_handler256
11.2.1 Input Handler層256
11.2.2 常用的Input Handler259
11.3 輸入設備應用層261
11.4 鍵盤輸入設備驅動程序實例262
11.5 event接口267
11.6 觸摸屏驅動程序實例270
11.6.1 S3C6410觸摸屏控製器270
11.6.2 S3C6410觸摸屏驅動程序設計273
11.7 觸摸屏校準282
11.7.1 觸摸屏校準原理282
11.7.2 利用TSLIB庫校準觸摸屏282
第12章 USB驅動程序284
12.1 USB體係概述284
12.1.1 USB係統組成284
12.1.2 USB主機284
12.1.3 USB設備邏輯層次285
12.2 Linux USB驅動程序體係287
12.2.1 USB總體結構287
12.2.2 USB設備驅動程序287
12.2.3 主機控製器驅動程序288
12.2.4 USB請求塊urb289
12.2.5 USB請求塊的填充291
12.3 S3C6410 USB主機控製器驅動程序292
12.3.1 USB主機控製器驅動程序分析292
12.3.2 S3C6410 USB驅動程序加載294
12.4 USB鍵盤設備驅動程序分析296
12.5 USB Gadget驅動程序301
12.5.1 Linux USB Gadget驅動程序301
12.5.2 Linux USB Gadget驅動程序實例302
第13章 音頻設備驅動程序303
13.1 ALSA音頻體係303
13.2 ALSA驅動層API304
13.2.1 聲卡和設備管理304
13.2.2 PCM API304
13.2.3 控製與混音API305
13.2.4 AC97 API306
13.2.5 SOC層驅動307
13.3 ALSA驅動程序實例308
13.3.1 S3C6410的AC97控製單元308
13.3.2 S3C6410聲卡電路原理309
13.3.3 S3C6410的數字音頻接口310
13.3.4 wm9713的數字音頻接口313
13.4 ALSA音頻編程接口316
13.4.1 ALSA PCM接口實例316
13.4.2 ALSA MIDI接口實例320
13.4.3 ALSA mixer接口實例321
13.4.4 ALSA timer接口實例322
第14章 video4linux2視頻驅動程序327
14.1 video4linux2驅動程序架構327
14.1.1 video4linux2驅動程序的注冊327
14.1.2 v4l2_fops接口331
14.1.3 常用的結構332
14.1.4 video4linux2的ioctl函數333
14.2 S3C6410攝像頭驅動程序分析333
14.2.1 電路原理333
14.2.2 驅動程序分析334
14.3 video4linux2應用層實例339
第15章 SD卡驅動程序346
15.1 Linux SD卡驅動程序體係346
15.1.1 SD卡電路原理346
15.1.2 MMC卡驅動程序架構347
15.1.3 MMC卡驅動程序相關結構347
15.1.4 MMC卡塊設備驅動程序350
15.1.5 SD卡主機控製器接口驅動程序356
15.2 S3C6410 SD卡控製器驅動程序分析360
15.2.1 電路原理360
15.2.2 S3C6410 SDHCI驅動程序原理360
15.2.3 SD卡的加載實例364
參考文獻366
精彩書摘
在Linux操作係統中,設備驅動程序對各種設備提供瞭一緻的訪問接口,用戶程序可以像對普通文件一樣對設備文件進行打開和讀寫操作。Linux包含如下3類設備驅動程序:
(1)字符設備
Linux下的字符設備是指發送和接收數據以字符的形式進行的設備。字符設備接口支持麵嚮字符的I/O操作,不經過係統的快速緩存,所以它們負責管理自己的緩衝區結構。字符設備接口隻支持順序存取的有限長度的I/O操作,典型的字符設備包括串行接口、LED燈、鍵盤等設備。
(2)塊設備
塊設備是以塊的方式進行I/0操作的設備。塊設備利用一塊係統內存作緩衝區,如果用戶進程對設備的請求能滿足用戶的要求,就返迴請求的數據,否則調用請求函數來進行實際的I/O操作。塊設備主要是針對磁盤等慢速設備設計的,以免耗費過多的CPU時間來等待響應。塊設備支持隨機存取功能,幾乎可以支持任意位置和任意長度的I/O請求。典型的塊設備包括硬盤、CF卡、SD卡等存儲設備。
(3)網絡設備
Linux操作係統中的網絡設備是一類特殊的設備。Linux的網絡子係統主要基於BSDUNIX的socket機製,在網絡子係統和驅動程序之間定義有專門的數據結構(skbuff)進行數據的傳遞。Linux操作係統支持對發送數據和接收數據的緩存,提供流量控製機製,提供對多種網絡協議的支持。
Linux係統為每個設備分配瞭一個主設備號與次設備號,主設備號唯一地標識瞭設備類型,次設備號標識具體設備的實例。由同一個設備驅動程序控製的所有設備具有相同的主設備號,從設備號則被用來區分具有相同主設備號的不同設備。
前言/序言
Linux驅動程序開發實例(附CD光盤1張) epub pdf mobi txt 電子書 下載 2024
Linux驅動程序開發實例(附CD光盤1張) 下載 epub mobi pdf txt 電子書