出版時間:2012-8 出版社:電子工業(yè)出版社 作者:曹國輝 頁數(shù):268 字?jǐn)?shù):420000
Tag標(biāo)簽:無
內(nèi)容概要
本書詳細(xì)闡述了嵌入式Linux設(shè)備驅(qū)動程序基本理論及開發(fā)方法。詳細(xì)講解了嵌入式系統(tǒng)的硬件體系架構(gòu),Linux系統(tǒng)的引導(dǎo)原理、啟動過程,Linux設(shè)備驅(qū)動模型及基本理論,具體的硬件設(shè)備驅(qū)動程序的源碼分析。在分析具體設(shè)備驅(qū)動程序源碼的基礎(chǔ)上,詳細(xì)講解了具體設(shè)備驅(qū)動程序的設(shè)計和移植方法。
書籍目錄
第1章 嵌入式arm系統(tǒng)開發(fā)基礎(chǔ)
1.1 嵌入式arm系統(tǒng)開發(fā)概述
1.1.1 arm系統(tǒng)可執(zhí)行映像文件格式
1.1.2 arm開發(fā)調(diào)試工具
1.1.3 加載地址和運(yùn)行地址
1.2 嵌入式arm系統(tǒng)的啟動代碼分析
1.2.1 arm上電啟動概述
1.2.2 arm上電初始化啟動代碼分析
1.3 嵌入式arm系統(tǒng)的中斷系統(tǒng)
1.3.1 arm中斷機(jī)制代碼分析
1.3.2 arm中斷服務(wù)處理程序的響應(yīng)過程
1.4 按鍵中斷實(shí)驗(yàn)
第2章 嵌入式linux設(shè)備驅(qū)動程序開發(fā)環(huán)境的構(gòu)建
2.1 安裝虛擬機(jī)軟件vmware 6.0.2
2.2 新建虛擬機(jī)
2.3 安裝linux操作系統(tǒng)ubuntu
2.4 安裝vmware tools工具軟件
2.5 網(wǎng)絡(luò)配置
2.6 設(shè)置軟件源服務(wù)器
.2.7 安裝libncurses5-dev軟件包
2.8 安裝交叉編譯器arm-linux-gcc
第3章 嵌入式linux內(nèi)核的裁剪與編譯
3.1 嵌入式linux內(nèi)核的本質(zhì)
3.2 嵌入式linux內(nèi)核源碼的組織
3.3 嵌入式linux內(nèi)核的移植與裁剪
3.4 嵌入式linux內(nèi)核配置、編譯的基本原理
3.5 構(gòu)建嵌入式linux根文件系統(tǒng)
第4章 嵌入式系統(tǒng)bootloader代碼分析與移植
4.1 嵌入式系統(tǒng)bootloader功能概述
4.1.1 嵌入式linux系統(tǒng)的軟件組成及分布
4.1.2 嵌入式linux中為什么要有bootloader
4.1.3 bootloader的功能和選擇
4.2 u-boot源碼分析
4.2.1 u-boot源碼文件的組成及配置編譯
4.2.2 u-boot的執(zhí)行過程及l(fā)inux內(nèi)核加載流程
4.2.3 start.s源碼文件分析
4.2.4 board.c源碼文件分析
4.3 u-boot中的環(huán)境變量
4.4 linux系統(tǒng)的加載過程
4.4.1 u-boot命令執(zhí)行過程
4.4.2 bootm的執(zhí)行流程
4.5 u-boot向linux傳遞參數(shù)的過程
4.6 u-boot的移植
第5章 嵌入式linux內(nèi)核模塊與字符設(shè)備驅(qū)動
5.1 嵌入式linux內(nèi)核模塊
5.1.1 嵌入式linux內(nèi)核模塊的概念
5.1.2 嵌入式linux內(nèi)核模塊編程
5.1.3 嵌入式linux內(nèi)核模塊的編譯
5.1.4 嵌入式linux內(nèi)核模塊的安裝與卸載
5.1.5 直接編譯嵌入式linux內(nèi)核模塊到內(nèi)核
5.2 嵌入式linux字符設(shè)備驅(qū)動
5.2.1 嵌入式linux設(shè)備驅(qū)動程序的概念
5.2.2 嵌入式linux設(shè)備管理機(jī)制
5.2.3 嵌入式linux字符設(shè)備驅(qū)動程序的主要數(shù)據(jù)結(jié)構(gòu)分析
5.2.4 嵌入式linux字符設(shè)備驅(qū)動的工作原理
5.2.5 嵌入式linux字符設(shè)備驅(qū)動程序設(shè)計實(shí)例
第6章 嵌入式linux系統(tǒng)的內(nèi)存管理
6.1 虛擬地址和物理地址概述
6.2 虛擬地址到物理地址轉(zhuǎn)換的基本原理
6.3 基于arm s3c2440的gpio端口地址映射實(shí)驗(yàn)
6.3.1 問題描述
6.3.2 分析與思路
6.4 linux內(nèi)核中內(nèi)存分配和釋放函數(shù)的用法
第7章 嵌入式linux設(shè)備驅(qū)動開發(fā)的核心技術(shù)
7.1 嵌入式linux中斷處理和定時器
7.1.1 嵌入式linux系統(tǒng)中斷服務(wù)程序的編寫
7.1.2 嵌入式linux系統(tǒng)硬件定時器的使用
7.1.3 中斷的下半部分
7.1.4 嵌入式linux軟件定時器的使用
7.2 嵌入式linux設(shè)備驅(qū)動程序中的并發(fā)及并發(fā)控制
7.2.1 并發(fā)的概念
7.2.2 嵌入式linux設(shè)備驅(qū)動程序中的并發(fā)控制方式
7.2.3 信號量與自旋鎖的使用場景
7.3 嵌入式linux設(shè)備驅(qū)動中的阻塞與非阻塞
7.3.1 概述
7.3.2 linux設(shè)備驅(qū)動程序中阻塞的工作原理
7.3.3 進(jìn)程阻塞訪問設(shè)備的基本原理
7.3.4 linux設(shè)備驅(qū)動程序中的阻塞編程
7.4 嵌入式linux設(shè)備驅(qū)動中的異步通知編程
7.4.1 概述
7.4.2 linux異步通知工作原理
7.4.3 linux異步通知應(yīng)用的編程方法
7.4.4 linux異步通知驅(qū)動的編程方法
7.5 嵌入式linux設(shè)備驅(qū)動中的輪詢操作
7.5.1 概述
7.5.2 linux設(shè)備驅(qū)動輪詢操作的工作原理及源碼分析
7.5.3 linux輪詢操作的應(yīng)用層編程
7.5.4 linux輪詢操作的驅(qū)動層編程
第8章 嵌入式linux平臺設(shè)備驅(qū)動程序開發(fā)
8.1 linux設(shè)備和設(shè)備驅(qū)動模型
8.1.1 linux內(nèi)核中的bus(總線)
8.1.2 linux內(nèi)核中的設(shè)備
8.1.3 linux內(nèi)核中的設(shè)備驅(qū)動
8.2 linux平臺設(shè)備驅(qū)動程序開發(fā)過程
8.3 嵌入式linux系統(tǒng)中利用mdev自動創(chuàng)建設(shè)備文件節(jié)點(diǎn)
第9章 嵌入式linux lcd屏驅(qū)動程序設(shè)計
9.1 lcd屏的工作原理概述
9.2 lcd屏硬件原理及驅(qū)動程序設(shè)計
9.2.1 tft lcd屏的顯示原理
9.2.2 s3c2440 lcd控制器tft lcd的控制時序分析
9.2.3 s3c2440 lcd控制器顯示的數(shù)據(jù)格式
9.2.4 s3c2440 lcd控制器的顯示數(shù)據(jù)流程
9.2.5 vbpd、vfpd、vspw和hbpd、hfpd、hspw的設(shè)置
9.3 嵌入式linux lcd屏驅(qū)動程序框架
9.4 嵌入式linux lcd屏驅(qū)動源碼分析
9.4.1 s3c2410fb.c源碼分析
9.4.2 lcd屏linux驅(qū)動主要數(shù)據(jù)結(jié)構(gòu)
9.4.3 probe函數(shù)處理流程及源碼分析
9.4.4 fbmem.c源碼分析
9.5 嵌入式linux lcd屏驅(qū)動的移植
第10章 嵌入式linux觸摸屏驅(qū)動程序設(shè)計
10.1 觸摸屏工作原理概述
10.2 s3c2440觸摸屏接口及硬件驅(qū)動程序設(shè)計
10.2.1 s3c2440觸摸屏控制器接口
10.2.2 s3c2440裸機(jī)下觸摸屏控制器的接口編程
10.3 嵌入式linux觸摸屏驅(qū)動程序框架
10.4 嵌入式linux觸摸屏驅(qū)動的源碼分析
10.4.1 linux觸摸設(shè)備驅(qū)動的處理流程
10.4.2 觸摸屏驅(qū)動模塊的初始化函數(shù)s3c2410ts_init
10.4.3 筆針按下中斷服務(wù)處理程序stylus_updown
10.5 嵌入式linux輸入子系統(tǒng)的工作原理及實(shí)現(xiàn)機(jī)制
10.5.1 linux輸入子系統(tǒng)的主要數(shù)據(jù)結(jié)構(gòu)與全局變量
10.5.2 輸入設(shè)備的注冊流程
10.5.3 事件處理器的注冊流程
10.5.4 輸入事件的報告流程
10.5.5 應(yīng)用程序訪問輸入設(shè)備的流程
第11章 嵌入式linux mtd子系統(tǒng)與 flash驅(qū)動程序設(shè)計
11.1 mtd子系統(tǒng)概述
11.2 linux中nor flash驅(qū)動的源碼分析
11.3 mtd子系統(tǒng)的源碼分析
11.3.1 mtd子系統(tǒng)源碼組織
11.3.2 mtd子系統(tǒng)主要數(shù)據(jù)的結(jié)構(gòu)分析
11.4 nor flash芯片手冊解讀
第12章 嵌入式linux nand flash 驅(qū)動程序設(shè)計
12.1 nand flash芯片硬件及接口介紹
12.1.1 nand flash存儲空間的組織
12.1.2 nand flash的硬件接口及讀寫操作時序
12.1.3 s3c2440對nand flash芯片的訪問
12.2 嵌入式linux下nand flash驅(qū)動分析
12.2.1 nand flash驅(qū)動源碼組織
12.2.2 nand flash驅(qū)動架構(gòu)
12.2.3 nand flash相關(guān)操作流程
12.2.4 s3c24xx_nand_probe函數(shù)分析
12.3 應(yīng)用程序?qū)and flash設(shè)備的讀/寫操作
12.3.1 mtd字符設(shè)備寫nand flash的操作分析
12.3.2 s3c2440_nand_hwcontrol函數(shù)
12.3.3 nand_command函數(shù)
第13章 嵌入式linux i2c總線驅(qū)動程序設(shè)計
13.1 i2c總線概述
13.2 s3c2440 i2c總線控制器的硬件工作原理
13.3 s3c2440 i2c控制器的硬件編程
13.3.1 初始化s3c2440 i2c主控制器
13.3.2 i2c總線寫at24c02操作
13.3.3 i2c總線讀at24c02操作
13.4 嵌入式linux i2c總線驅(qū)動架構(gòu)
13.4.1 i2c體系架構(gòu)的硬件實(shí)體
13.4.2 i2c驅(qū)動的軟件實(shí)體
13.5 嵌入式linux i2c總線驅(qū)動源碼的組織
13.6 嵌入式linux i2c總線控制器驅(qū)動的程序設(shè)計及源碼分析
13.6.1 i2c總線控制器驅(qū)動的主要數(shù)據(jù)結(jié)構(gòu)
13.6.2 寫at24c02一個字節(jié)操作
13.6.3 i2c總線驅(qū)動框架
13.6.4 i2c總線控制器設(shè)備驅(qū)動探測函數(shù)probe的工作流程
13.6.5 i2c_add_adapter處理流程分析
13.6.6 定義和實(shí)現(xiàn)i2c適配器的底層操作接口algorithm
13.7 嵌入式linux i2c 設(shè)備驅(qū)動程序的設(shè)計及源碼分析
13.7.1 i2c設(shè)備驅(qū)動程序框架
13.7.2 i2c_add_driver函數(shù)
13.7.3 at24c02b_probe函數(shù)
13.8 應(yīng)用程序通過i2c設(shè)備驅(qū)動寫at24c02一個字節(jié)的流程
第14章 嵌入式linux網(wǎng)卡驅(qū)動程序設(shè)計
14.1 概述
14.2 dm9000網(wǎng)絡(luò)芯片與s3c2440的硬件原理圖
14.3 dm9000a網(wǎng)卡芯片內(nèi)部寄存器的訪問
14.4 dm9000數(shù)據(jù)發(fā)送/接收的流程
14.5 嵌入式linux dm9000網(wǎng)卡驅(qū)動的框架及源碼分析
14.5.1 dm9000設(shè)備
14.5.2 dm9000設(shè)備驅(qū)動
14.5.3 dm9000平臺設(shè)備驅(qū)動的工作流程
14.5.4 應(yīng)用層網(wǎng)絡(luò)應(yīng)用程序的操作
第15章 嵌入式linux usb設(shè)備驅(qū)動程序設(shè)計
15.1 usb通信系統(tǒng)概述
15.2 usb通信系統(tǒng)的拓?fù)浣Y(jié)構(gòu)圖
15.3 usb通信的分時復(fù)用技術(shù)
15.4 usb通信系統(tǒng)的基本概念
15.5 usb通信的數(shù)據(jù)格式
15.5.1 域
15.5.2 包
15.5.3 事務(wù)
15.5.4 傳輸
15.5.5 usb標(biāo)識域(pid)
15.6 usb設(shè)備的枚舉過程
15.7 usb設(shè)備端usb通信固件的程序設(shè)計
15.7.1 usb芯片cy7c68013概述
15.7.2 ez-usb固件程序的啟動模式
15.7.3 ez-usb芯片的中斷系統(tǒng)
15.7.4 usb固件程序的功能
15.7.5 usb固件程序的框架及源碼分析
15.8 嵌入式linux usb驅(qū)動程序框架
15.9 嵌入式linux usb主控制器驅(qū)動的源碼分析
15.9.1 s3c2440 usb主控制器平臺設(shè)備驅(qū)動的源碼分析
15.9.2 usb主機(jī)驅(qū)動枚舉usb設(shè)備的過程
15.10 嵌入式linux usb設(shè)備驅(qū)動的程序設(shè)計方法
章節(jié)摘錄
版權(quán)頁: 插圖: 由于Linux內(nèi)核觸摸屏屏驅(qū)動基于輸入子系統(tǒng)實(shí)現(xiàn),對于觸摸屏驅(qū)動開發(fā)人員來說,在大部分情況下只要自己編寫與具體硬件相關(guān)的設(shè)備驅(qū)動源碼即可,而事件核心層和事件處理層直接由內(nèi)核提供,不需要再重新編寫。這里以S3C2440 CPU、四線電阻式觸摸屏為例來分析Linux下觸摸屏的設(shè)備驅(qū)動開發(fā)方法和思路,其他觸摸屏的設(shè)備驅(qū)動開發(fā)與之類似。 10.4.1 Linux觸摸設(shè)備驅(qū)動的處理流程 前面我們已經(jīng)了解了觸摸屏的工作原理,觸摸屏的測量觸摸位置信息的過程基本步驟如下: (1)初始化設(shè)置觸摸屏控制器處于等待筆針按下狀態(tài),等待用戶按下觸摸筆。 (2)用戶按下筆針后,觸發(fā)筆針按下中斷,在筆針按下中斷服務(wù)處理程序中,開始測量X、Y位置坐標(biāo)信息,X、Y坐標(biāo)位置信息測量完成后,向輸入子系統(tǒng)事件處理層報告位置信息及筆針狀態(tài),設(shè)置觸摸屏控制器處于等待筆針抬起狀態(tài),等待用戶抬起筆針。 (3)用戶抬起筆針,觸發(fā)筆針抬起中斷,在筆針抬起中斷服務(wù)程序中,再設(shè)置觸摸屏控制器處于等待筆針按下狀態(tài),等待用戶按下觸摸筆,準(zhǔn)備下一次觸摸的測量。 Linux觸摸屏驅(qū)動觸摸點(diǎn)位置信息測量流程如下圖所示。 了解了Linux下觸摸屏驅(qū)動的總體實(shí)現(xiàn)思路,下面分析Linux下觸摸屏設(shè)備驅(qū)動的源碼。以S3C2440 ARM CPU為例,Linux觸摸屏設(shè)備驅(qū)動的源碼文件為s3c2410_ts.c。 Linux的觸摸屏設(shè)備驅(qū)動是以模塊方式存在的,編寫一個Linux觸摸屏設(shè)備驅(qū)動主要分為以下幾個步驟: (1)初始化S3C2440的觸摸屏控制器相關(guān)寄存器,設(shè)置ADC轉(zhuǎn)換器的時鐘頻率的分頻系數(shù),A/D轉(zhuǎn)換器的工作模式等。 (2)創(chuàng)建Linux內(nèi)核中代表輸入設(shè)備的全局結(jié)構(gòu)體變量struct input_dev*inpu_dev,在Linux內(nèi)核中,struct input_dev就代表一個設(shè)備驅(qū)動層的輸入設(shè)備。 (3)設(shè)置設(shè)備驅(qū)動層輸入設(shè)備struct input_dev所支持的事件類型及支持的按鍵編碼。 (4)初始化輸入設(shè)備struct input_dev的設(shè)備id,事件處理層通過設(shè)備的id來判斷是否支持該輸入設(shè)備。 (5)最后調(diào)用事件核心層提供的函數(shù)input_register_device來注冊輸入設(shè)備到核心層。 (6)觸摸屏的設(shè)備驅(qū)動還需要注冊兩個中斷以及完成兩個中斷處理函數(shù),分別是觸摸屏中斷IRQ_TC和IRQ_ADC中斷,IRQ_TC中斷用來檢測筆針按下和抬起信號;IRQ_ADC中斷用來處理X、Y坐標(biāo)位置信息的A/D轉(zhuǎn)換及向事件處理層匯報輸入事件。 了解了觸摸屏驅(qū)動開發(fā)的基本步驟,接下來分析s3c2410_ts.C觸摸屏設(shè)備的驅(qū)動源碼。 觸摸屏設(shè)備驅(qū)動s3c2410_ts.C是一個驅(qū)動模塊,以模塊的方式存在,將觸摸屏驅(qū)動插入內(nèi)核后,首先執(zhí)行模塊初始化函數(shù)s3c2410ts_init,我們就從s3c2410ts_init開始分析。
編輯推薦
《深入理解嵌入式Linux設(shè)備驅(qū)動程序》可作為高校嵌入式專業(yè)教材以及廣大嵌入式愛好者的參考書。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載
深入理解嵌入式Linux設(shè)備驅(qū)動程序 PDF格式下載