第1章嵌入式ARM系統開發基礎1
1.1嵌入式ARM系統開發概述1
1.1.1ARM系統可執行映像文件格式1
1.1.2ARM開發調試工具2
1.1.3加載地址和運行地址3
1.2嵌入式ARM系統的啟動代碼分析4
1.2.1ARM上電啟動概述4
1.2.2ARM上電初始化啟動代碼分析5
1.3嵌入式ARM系統的中斷系統10
1.3.1ARM中斷機制代碼分析10
1.3.2ARM中斷服務處理程序的響應過程13
1.4按鍵中斷實驗15
第2章嵌入式Linux設備驅動程序開發環境的構建16
2.1安裝虛擬機軟件VMware6.0.216
2.2新建虛擬機17
2.3安裝Linux操作系統ubuntu19
2.4安裝VMwaretools工具軟件23
2.5網絡配置26
2.6設置軟件源服務器27
2.7安裝libncurses5—dev軟件包28
2.8安裝交叉編譯器arm—linux—gcc28
第3章嵌入式Linux內核的裁剪與編譯31
3.1嵌入式Linux內核的本質31
3.2嵌入式Linux內核源碼的組織32
3.3嵌入式Linux內核的移植與裁剪34
3.4嵌入式Linux內核配置、編譯的基本原理39
3.5構建嵌入式Linux根文件系統40
第4章嵌入式系統BootLoader代碼分析與移植46
4.1嵌入式系統BootLoader功能概述46
4.1.1嵌入式Linux系統的軟件組成及分布46
4.1.2嵌入式Linux中為什么要有BootLoader47
4.1.3BootLoader的功能和選擇47
4.2u—boot源碼分析48
4.2.1u—boot源碼文件的組成及配置編譯48
4.2.2u—boot的執行過程及Linux內核加載流程50
4.2.3start.s源碼文件分析50
4.2.4board.c源碼文件分析51
4.3u—boot中的環境變量52
4.4Linux系統的加載過程53
4.4.1u—boot命令執行過程54
4.4.2bootm的執行流程55
4.5u—boot向Linux傳遞參數的過程57
4.6u—boot的移植58
第5章嵌入式Linux內核模塊與字符設備驅動61
5.1嵌入式Linux內核模塊61
5.1.1嵌入式Linux內核模塊的概念61
5.1.2嵌入式Linux內核模塊編程61
5.1.3嵌入式Linux內核模塊的編譯62
5.1.4嵌入式Linux內核模塊的安裝與卸載63
5.1.5直接編譯嵌入式Linux內核模塊到內核63
5.2嵌入式Linux字符設備驅動63
5.2.1嵌入式Linux設備驅動程序的概念63
5.2.2嵌入式Linux設備管理機制64
5.2.3嵌入式Linux字符設備驅動程序的主要數據結構分析65
5.2.4嵌入式Linux字符設備驅動的工作原理66
5.2.5嵌入式Linux字符設備驅動程序設計實例68
第6章嵌入式Linux系統的內存管理72
6.1虛擬地址和物理地址概述72
6.2虛擬地址到物理地址轉換的基本原理73
6.3基于ARMS3C2440的GPIO端口地址映射實驗76
6.3.1問題描述76
6.3.2分析與思路76
6.4Linux內核中內存分配和釋放函數的用法77
第7章嵌入式Linux設備驅動開發的核心技術78
7.1嵌入式Linux中斷處理和定時器78
7.1.1嵌入式Linux系統中斷服務程序的編寫78
7.1.2嵌入式Linux系統硬件定時器的使用79
7.1.3中斷的下半部分80
7.1.4嵌入式Linux軟件定時器的使用80
7.2嵌入式Linux設備驅動程序中的并發及并發控制81
7.2.1并發的概念81
7.2.2嵌入式Linux設備驅動程序中的并發控制方式82
7.2.3信號量與自旋鎖的使用場景83
7.3嵌入式Linux設備驅動中的阻塞與非阻塞84
7.3.1概述84
7.3.2Linux設備驅動程序中阻塞的工作原理84
7.3.3進程阻塞訪問設備的基本原理85
7.3.4Linux設備驅動程序中的阻塞編程86
7.4嵌入式Linux設備驅動中的異步通知編程87
7.4.1概述87
7.4.2Linux異步通知工作原理88
7.4.3Linux異步通知應用的編程方法90
7.4.4Linux異步通知驅動的編程方法91
7.5嵌入式Linux設備驅動中的輪詢操作92
7.5.1概述92
7.5.2Linux設備驅動輪詢操作的工作原理及源碼分析92
7.5.3Linux輪詢操作的應用層編程97
7.5.4Linux輪詢操作的驅動層編程97
第8章嵌入式Linux平臺設備驅動程序開發99
8.1Linux設備和設備驅動模型99
8.1.1Linux內核中的BUS(總線)99
8.1.2Linux內核中的設備100
8.1.3Linux內核中的設備驅動101
8.2Linux平臺設備驅動程序開發過程103
8.3嵌入式Linux系統中利用mdev自動創建設備文件節點105
第9章嵌入式LinuxLCD屏驅動程序設計107
9.1LCD屏的工作原理概述107
9.2LCD屏硬件原理及驅動程序設計108
9.2.1TFTLCD屏的顯示原理109
9.2.2S3C2440LCD控制器TFTLCD的控制時序分析110
9.2.3S3C2440LCD控制器顯示的數據格式111
9.2.4S3C2440LCD控制器的顯示數據流程112
9.2.5VBPD、VFPD、VSPW和HBPD、HFPD、HSPW的設置113
9.3嵌入式LinuxLCD屏驅動程序框架114
9.4嵌入式LinuxLCD屏驅動源碼分析115
9.4.1S3c2410fb.c源碼分析116
9.4.2LCD屏Linux驅動主要數據結構117
9.4.3Probe函數處理流程及源碼分析121
9.4.4Fbmem.c源碼分析124
9.5嵌入式LinuxLCD屏驅動的移植125
第10章嵌入式Linux觸摸屏驅動程序設計128
10.1觸摸屏工作原理概述128
10.2S3C2440觸摸屏接口及硬件驅動程序設計129
10.2.1S3C2440觸摸屏控制器接口129
10.2.2S3C2440裸機下觸摸屏控制器的接口編程131
10.3嵌入式Linux觸摸屏驅動程序框架133
10.4嵌入式Linux觸摸屏驅動的源碼分析134
10.4.1Linux觸摸設備驅動的處理流程134
10.4.2觸摸屏驅動模塊的初始化函數s3c2410ts_init135
10.4.3筆針按下中斷服務處理程序stylus_updown137
10.5嵌入式Linux輸入子系統的工作原理及實現機制140
10.5.1Linux輸入子系統的主要數據結構與全局變量140
10.5.2輸入設備的注冊流程145
10.5.3事件處理器的注冊流程146
10.5.4輸入事件的報告流程149
10.5.5應用程序訪問輸入設備的流程152
第11章嵌入式LinuxMTD子系統與FLASH驅動程序設計154
11.1MTD子系統概述154
11.2Linux中NorFLASH驅動的源碼分析157
11.3MTD子系統的源碼分析160
11.3.1MTD子系統源碼組織160
11.3.2MTD子系統主要數據的結構分析161
11.4NorFLASH芯片手冊解讀163
第12章嵌入式LinuxNandFLASH驅動程序設計165
12.1NandFLASH芯片硬件及接口介紹165
12.1.1NandFLASH存儲空間的組織165
12.1.2NandFLASH的硬件接口及讀寫操作時序166
12.1.3S3C2440對NandFLASH芯片的訪問167
12.2嵌入式Linux下NandFLASH驅動分析168
12.2.1NandFLASH驅動源碼組織168
12.2.2NandFLASH驅動架構168
12.2.3NandFLASH相關操作流程171
12.2.4s3c24xx_nand_probe函數分析172
12.3應用程序對NandFLASH設備的讀/寫操作175
12.3.1MTD字符設備寫NandFLASH的操作分析175
12.3.2s3c2440_nand_hwcontrol函數178
12.3.3nand_command函數178
第13章嵌入式LinuxI2C總線驅動程序設計182
13.1I2C總線概述182
13.2S3C2440I2C總線控制器的硬件工作原理183
13.3S3C2440I2C控制器的硬件編程185
13.3.1初始化S3C2440I2C主控制器185
13.3.2I2C總線寫AT24C02操作185
13.3.3I2C總線讀AT24C02操作187
13.4嵌入式LinuxI2C總線驅動架構188
13.4.1I2C體系架構的硬件實體189
13.4.2I2C驅動的軟件實體189
13.5嵌入式LinuxI2C總線驅動源碼的組織190
13.6嵌入式LinuxI2C總線控制器驅動的程序設計及源碼分析190
13.6.1I2C總線控制器驅動的主要數據結構191
13.6.2寫AT24C02一個字節操作192
13.6.3I2C總線驅動框架192
13.6.4I2C總線控制器設備驅動探測函數probe的工作流程194
13.6.5i2c_add_adapter處理流程分析196
13.6.6定義和實現I2C適配器的底層操作接口Algorithm197
13.7嵌入式LinuxI2C設備驅動程序的設計及源碼分析198
13.7.1I2C設備驅動程序框架200
13.7.2i2c_add_driver函數203
13.7.3at24c02b_probe函數203
13.8應用程序通過I2C設備驅動寫AT24C02一個字節的流程204
第14章嵌入式Linux網卡驅動程序設計207
14.1概述207
14.2DM9000網絡芯片與S3C2440的硬件原理圖207
14.3DM9000A網卡芯片內部寄存器的訪問208
14.4DM9000數據發送/接收的流程209
14.5嵌入式LinuxDM9000網卡驅動的框架及源碼分析210
14.5.1DM9000設備211
14.5.2DM9000設備驅動211
14.5.3DM9000平臺設備驅動的工作流程212
14.5.4應用層網絡應用程序的操作215
第15章嵌入式LinuxUSB設備驅動程序設計230
15.1USB通信系統概述230
15.2USB通信系統的拓撲結構圖230
15.3USB通信的分時復用技術231
15.4USB通信系統的基本概念231
15.5USB通信的數據格式232
15.5.1域233
15.5.2包233
15.5.3事務234
15.5.4傳輸236
15.5.5USB標識域(PID)236
15.6USB設備的枚舉過程237
15.7USB設備端USB通信固件的程序設計239
15.7.1USB芯片CY7C68013概述239
15.7.2EZ—USB固件程序的啟動模式242
15.7.3EZ—USB芯片的中斷系統242
15.7.4USB固件程序的功能244
15.7.5USB固件程序的框架及源碼分析244
15.8嵌入式LinuxUSB驅動程序框架246
15.9嵌入式LinuxUSB主控制器驅動的源碼分析247
15.9.1S3C2440USB主控制器平臺設備驅動的源碼分析248
15.9.2USB主機驅動枚舉USB設備的過程250
15.10嵌入式LinuxUSB設備驅動的程序設計方法255