《深入淺出嵌入式底層軟體開發》

《深入淺出:嵌入式底層軟體開發》是由楊鑄和唐攀合著的一部書籍。

基本信息

圖書信息

書名:深入淺出:嵌入式底層軟體開發
作 者:楊鑄唐攀
出版社:北京航空航天大學出版社
出版時間:2011年6月1日
ISBN:9787512403826
開本:16開
定價:79.00元

內容簡介

第1篇(第1~3章)以ARMCPU及其彙編語言為背景,深入淺出地講解軟體是如何控制硬體的。第2篇(第4~7章)以S3C2440開發板為硬體,講解製作嵌入式Linux系統的完整過程,具有很強的實用性和可操作性。第3篇(第8~11章)以儘可能通俗的方式講解Linux設備驅動中涉及的複雜理論,在此基礎上,以驅動程式的2個接口(向下與硬體接口、向上與核心子系統接口)為突破口,由淺入深地編寫和剖析了嵌入式真實典型硬體(LED燈、按鍵、網卡、LCD、觸控螢幕)的驅動程式。所有的驅動程式均能在實際硬體上正常運行,幫助讀者揭開Linux驅動的神秘面紗。第12章以實戰的方式,深入淺出地剖析了嵌入式Linux系統中最重要的2類驅動(LCD和觸控螢幕)的代碼實現。並簡介了塊設備驅動和usb設備驅動。本書適合硬體工程師、軟體工程師、嵌入式軟體的從業人員、教授嵌入式軟體開發課程的老師、意欲從事嵌入式軟體開發工作的大學生閱讀。

作者簡介

楊鑄教育背景:電子科技大學通信與信息工程工學碩士;北京郵電大學工學學士學位,專業為計算機軟體。重大經歷:作為主要組織人員,組織完成了中國移動四川分公司最早的簡訊系統平台的建設;早期專注於Microsoft的OS和Database的技術研究與職業培訓,是微軟在中國的早期MCT之一,MCP號1694198;參與完成國家863計畫項目——信息安全產品演示和驗證平台的子課題並與合作公司完成產品化開發—內部網路監管系統;中後期專注於嵌入式軟體開發的研究與職業培訓,精於ARM體系結構與嵌入式Linux。

圖書目錄

1第1章ARM彙編編程基礎9
1.1ARMCPU暫存器9
1.1.1普通暫存器R0–R1510
1.1.2狀態暫存器cpsrspsr11
1.1.3流水線對PC值的影響13
1.2基本定址方式與基本指令15
1.2.1最常見定址方式精解15
1.2.2最常見指令精解16
1.3ARM彙編偽操作18
1.3.1彙編偽操作在彙編程式中的使用範例18
1.3.2最常見彙編偽操作精解19
1.3.3彙編偽操作列表21
1.4ADS開發環境的使用23
1.4.1在ADS中進行裸機程式的編輯、編譯、運行24
1.4.2在AXD中進行裸機程式調試的方法與步驟32
1.5RealViewMDK開發環境的使用40
1.5.1在MDK開發環境下編寫裸機程式40
1.5.2MDK調試裸機程式的方法與步驟55
1.6其他常見定址模式與常見指令58
1.6.1其他常見定址模式(基址定址、多暫存器定址、堆疊定址、暫存器移位定址、相對定址)58
1.6.2其他常見指令(訪存指令、數據處理指令、乘法指令)62
2第2章ARM編程進階65
2.1ARM彙編偽指令65
2.1.1精解ldr偽指令65
2.1.2精解adr67
2.1.3精解adrl偽指令68
2.1.4nop偽指令69
2.2ATPCS與混合編程70
2.2.1ATPCS規則精解70
2.2.2精解C和ARM彙編程式間的相互調用74
2.3裸機硬體的控制方法與例程76
2.3.1建立真實硬體的開發和調試環境77
2.3.2軟體控制(驅動)硬體的編程原理90
2.3.3裸機硬體控制程式實例91
2.3.4啟動例程96
2.4看門狗定時器(Watchdog)102
2.4.1看門狗定時器的用途103
2.4.2看門狗工作原理104
2.4.3看門狗實驗106
2.5系統時鐘107
2.5.1系統工作時鐘頻率107
2.5.2時鐘驅動實驗112
2.6SDRAM記憶體116
2.6.1S3C2440存儲器地址段(Bank)117
2.6.2SDRAM記憶體工作原理119
2.6.3SDRAM的讀操作123
2.6.4SDRAM預充電操作124
2.6.5SDRAM突發操作124
2.6.6SDRAM寫操作125
2.6.7SDRAM的刷新126
2.6.8記憶體驅動實驗130
2.7UART串口134
2.7.1異步通信和同步通信135
2.7.2數據的串列和並行通信方式135
2.7.3數據通信傳輸模式136
2.7.4S3C2440UART控制器137
2.7.5S3C2440UART串口工作原理138
2.7.6UART串口驅動實驗147
3第3章ARM體系結構151
3.1ARM處理器工作模式151
3.1.1ARM處理器不同模式下暫存器152
3.1.2ARM處理器模式切換(含MRS,MSR指令)153
3.2ARM處理器異常處理155
3.2.1異常分類155
3.2.2異常發生的硬體操作156
3.2.3異常返回地址157
3.2.4異常向量表158
3.2.5異常處理的返回160
3.3S3C2440系統中斷161
3.3.1中斷的產生-中斷源162
3.3.2中斷優先權164
3.3.3中斷控制相關暫存器166
3.3.4系統中斷流程169
3.3.5按鍵控制LED燈實驗171
3.4semihosting與硬體重定向179
3.4.1semihosting半主機調試179
3.4.2硬體重定向184
3.5系統調用與軟體中斷SWI的實現190
3.5.1系統調用190
3.5.2軟體中斷191
3.5.3軟中斷處理192
3.5.4led系統調用實驗193
3.6進程切換的實現199
3.6.1進程199
3.6.2進程控制塊PCB200
3.6.3進程創建201
3.6.4進程佇列201
3.6.5進程調度(schedule)202
3.6.6上下文切換205
3.7MMU與記憶體保護的實現208
3.7.1存儲管理單元MMU209
3.7.2Cache221
3.7.3CP15協處理器223
3.8實戰:小型多任務作業系統miniOS的實現227
3.8.1miniOS代碼分析227
3.8.2miniOS應用程式接口261
3.8.3miniOS應用程式系統調用接口262
4第4章嵌入式Linux軟體開發環境搭建265
4.1體驗嵌入式linux系統265
4.2Linux作業系統安裝266
4.2.1在Window上安裝虛擬機266
4.2.2在虛擬機上安裝Linux作業系統ubuntu9.10277
4.3在ubuntu9.10中安裝基本的開發環境280
4.4ubuntu9.10上網路服務的安裝與配置281
4.4.1設定vmware網路282
4.4.2安裝、配置和使用ftp服務286
4.4.3安裝、配置nfs服務286
5第5章建構bootloader287
5.1準備工作287
5.1.1嵌入式Linux系統概述287
5.1.2構建交叉編譯工具鏈288
5.1.3bootloader概述289
5.2深入剖析U-boot代碼293
5.2.1安裝和使用原始碼閱讀工具SourceInsight293
5.2.2u-boot的編譯初步295
5.2.3分析u-boot的第1階段代碼(cpu/arm920t/start.S)297
5.2.4分析u-boot的第2階段代碼301
5.2.5繼續移植、編譯u-boot303
5.2.6u-boot常用命令使用簡介307
5.2.7u-boot命令實現框架的分析310
5.2.8u-boot引導Linux作業系統的過程分析315
5.2.9讓u-boot支持從usbslave接口獲得數據320
6第6章建構嵌入式Linux核心322
6.1Linux核心簡介322
6.1.1Linux核心版本歷史322
6.1.2核心源碼目錄結構322
6.1.3Linux核心構造系統簡介323
6.2移植、裁減及配置Linux核心到s3c2440開發板324
6.2.1體驗Linux核心配置、編譯與使用324
6.2.2為S3C2440移植核心327
6.2.3配置並裁減核心328
6.2.4運行核心並驗證核心被配置的功能331
6.3核心Kconfig與Makefile檔案分析333
6.3.1核心構造系統簡介333
6.3.2Kconfig檔案精解333
6.3.3.config檔案說明335
6.3.4Makefile檔案精解335
6.3.5實戰:修改Kconfig和Makefile,完成向核心中添加新的功能組件——網卡、音效卡、LCD、觸控螢幕驅動336
7第7章建構嵌入式Linux檔案系統345
7.1嵌入式Linux檔案系統簡介345
7.1.1嵌入式檔案系統概述345
7.1.2MTD設備與Flash檔案系統簡介346
7.1.3嵌入式Linux系統中的tmpfs檔案系統347
7.2詳解製作根檔案系統349
7.2.1FHS標準介紹349
7.2.2編譯/安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄350
7.2.3利用交叉編譯工具鏈,構建/lib目錄351
7.2.4手工構建/etc目錄353
7.2.5手工構建最簡化的/dev目錄354
7.2.6使用啟動腳本完成/proc、/sys、/dev、/tmp、/var等目錄的完整構建355
7.2.7製作根檔案系統的jffs2映像檔案359
7.3建構嵌入式Linux應用程式系統360
7.3.1輔助處理工具的移植360
7.3.2mp3播放器madplay的移植363
7.3.3主要網路伺服器的移植與使用366
7.3.4資料庫程式的移植與使用371
7.4建構GUI系統374
7.4.1移植tslib庫374
7.4.2移植Qtopia375
8第8章Linux驅動程式開發基礎378
8.1Linux設備驅動程式簡介378
8.1.1設備驅動分類和核心模組379
8.1.2設備檔案和設備驅動380
8.1.3核心模組的編譯和使用381
8.2字元設備驅動基本編程388
8.2.1字元設備驅動體驗388
8.2.2實現字元設備驅動的工作388
8.3驅動程式中的並發控制方法401
8.3.1並發控制原理簡介401
8.3.2信號量的編程實戰402
8.3.3自旋鎖的編程實戰404
8.3.4Linux核心提供的其他並發控制方法408
8.4驅動程式中的阻塞與非阻塞編程409
8.4.1體驗阻塞I/O409
8.4.2如何在驅動程式中實現阻塞I/O411
8.4.3體驗非阻塞I/O413
8.4.4如何在驅動程式中實現非阻塞I/O415
8.5字元設備驅動程式對一些高級特性的實現416
8.5.1non-seekable的實現416
8.5.2select的實現417
9第9章Linux字元設備驅動開發實戰422
9.1IO記憶體與硬體通信422
9.1.1驅動中的記憶體分配422
9.1.2使用I/O連線埠地址空間與硬體進行通信的核心API介紹423
9.1.3使用I/O記憶體地址空間與硬體進行通信的核心API介紹424
9.1.4通過I/O記憶體驅動硬體的實戰——LED燈驅動425
9.1.5驅動程式對ioctl的規範實現433
9.2核心misc設備架構分析435
9.2.1定義全局變數435
9.2.2註冊主設備號為10的misc設備436
9.2.3導出核心API——misc_register函式437
9.2.4實施乾坤大挪移的misc設備open函式438
9.2.5導出核心API——misc_deregister函式440
9.3watchdog驅動441
9.3.1相關概念441
9.3.2Watchdog硬體結構分析443
9.3.3Watchdog驅動的初始化和卸載443
9.3.4探測函式watchdog_probe的實現444
9.3.5實現misc設備中對設備檔案的操作447
9.3.6Watchdog平台驅動的設備移除、掛起和恢復接口函式的實現450
9.3.7測試watchdog驅動451
9.4核心編碼規範與風格452
9.4.1縮進、長行、{}與空格的放453
9.4.2變數和函式453
9.4.3注釋.macros和enums454
9.4.4快樂使用核心提供的實現常用功能的宏455
10第10章Linux驅動中的中斷編程456
10.1驅動程式調測方法與技巧456
10.1.1利用printk456
10.1.2詳解OOP訊息457
10.1.3利用strace461
10.1.4利用核心內置的hacking選項462
10.1.5其他調測方法簡介465
10.2驅動程式中的中斷處理466
10.2.1中斷簡述466
10.2.2驅動程式中進行中斷處理涉及到的最基本的核心API466
10.2.3驅動程式進行中斷處理的實例代碼分析467
10.2.4其他關於中斷的核心API469
10.3核心時間與核心定時器470
10.3.1核心中如何記錄時間470
10.3.2核心定時器API471
10.3.3核心定時器與核心時間的套用案例——按鍵消抖471
10.3.4如何在核心中實現延時474
10.4中斷頂半部與底半部474
10.4.1區分和使用中斷頂半部與底半部的原因474
10.4.2tasklet機制與編程實例475
10.4.3workqueue機制與編程實例478
10.4.4tasklet與workqueue的區別和不同套用環境總結485
10.5Linux中斷處理系統的架構與共享中斷486
10.5.1裸機程式中的中斷編程與有作業系統下的中斷編程的區別486
10.5.2Linux中斷處理系統的架構487
10.5.3關於共享中斷的說明487
10.5.4共享中斷實例487
11第11章Linux網路設備驅動開發實戰489
11.1網路設備驅動基礎489
11.1.1體驗網卡驅動489
11.1.2網卡驅動的基本知識——2個結構體和5個函式489
11.1.3虛擬網卡snull驅動代碼分析494
11.1.4網卡驅動的編寫主要內容總結499
11.2網路設備驅動實例——CS8900499
11.2.1虛擬網卡驅動與真實網卡驅動的主要區別499
11.2.2真實網卡驅動的整體框架分析500
11.2.3驅動中關於cs8900硬體操作的探討507
12第12章其他重要設備驅動開發實戰519
12.1塊設備驅動初步(以ramdisk為例)519
12.1.1體驗塊設備驅動519
12.1.2塊設備驅動框架介紹519
12.1.3塊設備的簡單讀寫實現代碼分析522
12.1.4塊設備的高效讀寫實現代碼分析523
12.1.5塊設備的其他操作接口fops526
12.2LCD驅動528
12.2.1LCD裸機驅動528
12.2.2幀緩衝(FrameBuffer)設備驅動框架結構536
12.2.3LCD驅動實例代碼542
12.2.4LCD驅動代碼的主幹結構的總結555
12.2.5測試LCD驅動程式556
12.3觸控螢幕驅動556
12.3.1觸控螢幕裸機驅動556
12.3.2Linux輸入子系統561
12.3.3Linux下觸控螢幕驅動的實現步驟564
12.3.4測試觸控螢幕驅動程式572
12.4USB驅動初步572
12.4.1Linux下4種USB驅動簡介與功能體驗572
12.4.2USB接口與規範574
12.4.3USB設備驅動基本知識575
12.4.4USB設備驅動實例578

相關詞條

相關搜尋

熱門詞條

聯絡我們