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

《深入淺出嵌入式底層軟體開發》是2011年6月1日北京航空航天大學出版社出版的圖書,作者是楊鑄、唐攀。

基本信息

內容簡介

本書包含arm裸機程式開發、嵌入式linux系統建構、linux驅動程式開發三部分。從軟硬體的分界面開始,循序漸進,逐一詳細介紹嵌入式底層軟體開發的各個技術要點,技術體系全面;既有一定的理論,但更加強調實戰性;深入淺出,能讓讀者以最少的時間成本代價獲得嵌入式底層軟體開發的技術精髓。

本書適合硬體工程師、軟體工程師、嵌入式軟體的從業人員、教授嵌入式軟體開發課程的老師、意欲從事嵌入式軟體開發工作的大學生閱讀。

目錄

第1篇arm體系結構與編程

1 第1章 arm彙編編程基礎

1.1 arm cpu暫存器

1.1.1普通暫存器r0 – r15

1.1.2狀態暫存器cpsrspsr

1.1.3流水線對pc值的影響

1.2 基本定址方式與基本指令

1.2.1最常見定址方式精解

1.2.2最常見指令精解

1.3 arm彙編偽操作

1.3.1彙編偽操作在彙編程式中的使用範例

1.3.2最常見彙編偽操作精解

1.3.3彙編偽操作列表

1.4 ads開發環境的使用

1.4.1在ads中進行裸機程式的編輯、編譯、運行

1.4.2在axd中進行裸機程式調試的方法與步驟

1.5RealView MDK開發環境的使用

1.5.1在mdk開發環境下編寫裸機程式

1.5.2 mdk調試裸機程式的方法與步驟

.1.6 其他常見定址模式與常見指令

1.6.1其他常見定址模式(基址定址、多暫存器定址、堆疊定址、暫存器移位定址、相對定址)

1.6.2其他常見指令(訪存指令、數據處理指令、乘法指令)

2 第2章 arm編程進階

2.1 arm彙編偽指令

2.1.1精解ldr偽指令

2.1.2精解ad

2.1.3精解adrl偽指令

2.1.4 nop偽指令

2.2ATPCS與混合編程

2.2.1 atpcs規則精解

2.2.2精解c和arm彙編程式間的相互調用

2.3 裸機硬體的控制方法與例程

2.3.1建立真實硬體的開發和調試環境

2.3.2軟體控制(驅動)硬體的編程原理

2.3.3裸機硬體控制程式實例

2.3.4啟動例程

2.4 看門狗定時器(watchdog)

2.4.1看門狗定時器的用途

2.4.2看門狗工作原理

2.4.3看門狗實驗

2.5 系統時鐘

2.5.1系統工作時鐘頻率

2.5.2時鐘驅動實驗

2.6 sdram記憶體

2.6.1 s3c2440存儲器地址段(bank)

2.6.2 sdram記憶體工作原理

2.6.3 sdram的讀操作

2.6.4 sdram預充電操作

2.6.5 sdram突發操作

2.6.6 sdram寫操作

2.6.7 sdram的刷新

2.6.8記憶體驅動實驗

2.7 uart串口

2.7.1異步通信和同步通信

2.7.2數據的串列和並行通信方式

2.7.3數據通信傳輸模式

2.7.4 s3c2440 uart控制器

2.7.5 s3c2440 uart串口工作原理

2.7.6 uart串口驅動實驗

3 第3章 arm體系結構

3.1ARM處理器工作模式

3.1.1 arm處理器不同模式下暫存器

3.1.2ARM處理器模式切換(含mrs,msr指令)

3.2 arm處理器異常處理

3.2.1異常分類

3.2.2異常發生的硬體操作

3.2.3異常返回地址

3.2.4異常向量表

3.2.5異常處理的返回

3.3 s3c2440系統中斷

3.3.1中斷的產生-中斷源

3.3.2中斷優先權

3.3.3中斷控制相關暫存器

3.3.4系統中斷流程

3.3.5按鍵控制led燈實驗

3.4 semihosting與硬體重定向

3.4.1 semihosting半主機調試

3.4.2硬體重定向

3.5 系統調用與軟體中斷swi的實現

3.5.1系統調用

3.5.2軟體中斷

3.5.3軟中斷處理

3.5.4 led系統調用實驗

3.6進程切換的實現

3.6.1進程

3.6.2進程控制塊pc

3.6.3進程創建

3.6.4進程佇列

3.6.5進程調度(schedule)

3.6.6上下文切換

3.7 mmu與記憶體保護的實現

3.7.1存儲管理單元mm

3.7.2 cach

3.7.3 cp15協處理器

3.8 實戰:小型多任務作業系統minios的實現

3.8.1 minios代碼分析

3.8.2 minios應用程式接口

3.8.3 minios應用程式系統調用接口

4 第4章 嵌入式linux軟體開發環境搭建

4.1 體驗嵌入式linux系統

4.2 linux作業系統安裝

4.2.1在window上安裝虛擬機

4.2.2在虛擬機上安裝linux作業系統ubuntu9.1

4.3 在ubuntu9.10中安裝基本的開發環境

4.4 ubuntu9.10上網路服務的安裝與配置

4.4.1設定vmware網路

4.4.2安裝、配置和使用ftp服務

4.4.3安裝、配置nfs服務

5 第5章 建構bootloade

5.1 準備工作

5.1.1嵌入式linux系統概述

5.1.2構建交叉編譯工具鏈

5.1.3 bootloader概述

5.2 深入剖析u-boot代碼

5.2.1安裝和使用原始碼閱讀工具source insigh

5.2.2 u-boot的編譯初步

5.2.3分析u-boot的第1階段代碼(cpu/arm920t/start.s)

5.2.4分析u-boot的第2階段代碼

5.2.5繼續移植、編譯u-boo

5.2.6 u-boot常用命令使用簡介

5.2.7 u-boot命令實現框架的分析

5.2.8 u-boot引導linux作業系統的過程分析

5.2.9讓u-boot支持從usb slave接口獲得數據

6 第6章 建構嵌入式linux核心

6.1 linux核心簡介

6.1.1 linux核心版本歷史

6.1.2核心源碼目錄結構

6.1.3 linux核心構造系統簡介

6.2 移植、裁減及配置linux核心到s3c2440開發板

6.2.1體驗linux核心配置、編譯與使用

6.2.2為s3c2440移植核心

6.2.3配置並裁減核心

6.2.4運行核心並驗證核心被配置的功能

6.3 核心kconfig與makefile檔案分析

6.3.1核心構造系統簡介

6.3.2 kconfig檔案精解

6.3.3 .config檔案說明

6.3.4 makefile檔案精解

6.3.5實戰:修改kconfig和makefile,完成向核心中添加新的功能組件——網卡、音效卡、lcd、觸控螢幕驅動

7 第7章 建構嵌入式Linux檔案系統

7.1 嵌入式linux檔案系統簡介

7.1.1嵌入式檔案系統概述

7.1.2 mtd設備與flash檔案系統簡介

7.1.3嵌入式linux系統中的tmpfs檔案系統

7.2 詳解製作根檔案系統

7.2.1FHS標準介紹

7.2.2編譯/安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄

7.2.3利用交叉編譯工具鏈,構建/lib目錄

7.2.4手工構建/etc目錄

7.2.5手工構建最簡化的/dev目錄

7.2.6使用啟動腳本完成/proc、/sys、/dev、/tmp、/var等目錄的完整構建

7.2.7製作根檔案系統的jffs2映像檔案

7.3 建構嵌入式linux應用程式系統

7.3.1輔助處理工具的移植

7.3.2 mp3播放器 madplay的移植

7.3.3主要網路伺服器的移植與使用

7.3.4資料庫程式的移植與使用

7.4 建構gui系統

7.4.1移植tslib

7.4.2移植Qtopia

8 第8章 linux驅動程式開發基礎

8.1 linux設備驅動程式簡介

8.1.1設備驅動分類和核心模組

8.1.2設備檔案和設備驅動

8.1.3核心模組的編譯和使用

8.2 字元設備驅動基本編程

8.2.1字元設備驅動體驗

8.2.2實現字元設備驅動的工作

8.3 驅動程式中的並發控制方法

8.3.1並發控制原理簡介

8.3.2信號量的編程實戰

8.3.3自旋鎖的編程實戰

8.3.4 linux核心提供的其他並發控制方法

8.4 驅動程式中的阻塞與非阻塞編程

8.4.1體驗阻塞i/o

8.4.2如何在驅動程式中實現阻塞i/o

8.4.3體驗非阻塞i/o

8.4.4如何在驅動程式中實現非阻塞i/o

8.5 字元設備驅動程式對一些高級特性的實現

8.5.1 non-seekable的實現

8.5.2 select的實現

9 第9章 linux字元設備驅動開發實戰

9.1 io記憶體與硬體通信

9.1.1驅動中的記憶體分配

9.1.2使用 i/o 連線埠地址空間與硬體進行通信的核心api介紹

9.1.3使用 i/o 記憶體地址空間與硬體進行通信的核心api介紹

9.1.4通過i/o記憶體驅動硬體的實戰——led燈驅動

9.1.5驅動程式對ioctl的規範實現

9.2 核心misc設備架構分析

9.2.1定義全局變數

9.2.2註冊主設備號為10的misc設備

9.2.3導出核心api —— misc_register函式

9.2.4實施乾坤大挪移的misc設備open函式

9.2.5導出核心api —— misc_deregister函式

9.3 watchdog驅動

9.3.1相關概念

9.3.2 watchdog硬體結構分析

9.3.3 watchdog驅動的初始化和卸載

9.3.4探測函式watchdog_probe的實現

9.3.5實現misc設備中對設備檔案的操作

9.3.6 watchdog平台驅動的設備移除、掛起和恢復接口函式的實現

9.3.7測試watchdog驅動

9.4 核心編碼規範與風格

9.4.1縮進、長行、{}與空格的放

9.4.2變數和函式

9.4.3注釋.macros和enums

9.4.4快樂使用核心提供的實現常用功能的宏

10 第10章 linux驅動中的中斷編程

10.1 驅動程式調測方法與技巧

10.1.1利用printk

10.1.2詳解oop訊息

10.1.3利用strace

10.1.4利用核心內置的hacking選項

10.1.5其他調測方法簡介

10.2 驅動程式中的中斷處理

10.2.1中斷簡述

10.2.2驅動程式中進行中斷處理涉及到的最基本的核心api

10.2.3驅動程式進行中斷處理的實例代碼分析

10.2.4其他關於中斷的核心api

10.3 核心時間與核心定時器

10.3.1核心中如何記錄時間

10.3.2核心定時器api

10.3.3核心定時器與核心時間的套用案例——按鍵消抖

10.3.4如何在核心中實現延時

10.4 中斷頂半部與底半部

10.4.1區分和使用中斷頂半部與底半部的原因

10.4.2 tasklet機制與編程實例

10.4.3 workqueue機制與編程實例

10.4.4 tasklet與workqueue的區別和不同套用環境總結

10.5 linux中斷處理系統的架構與共享中斷

10.5.1裸機程式中的中斷編程與有作業系統下的中斷編程的區別

10.5.2 linux中斷處理系統的架構

10.5.3關於共享中斷的說明

10.5.4共享中斷實例

11 第11章 linux網路設備驅動開發實戰

11.1 網路設備驅動基礎

11.1.1體驗網卡驅動

11.1.2網卡驅動的基本知識——2個結構體和5個函式

11.1.3虛擬網卡snull驅動代碼分析

11.1.4網卡驅動的編寫主要內容總結

11.2 網路設備驅動實例——CS8900

11.2.1虛擬網卡驅動與真實網卡驅動的主要區別

11.2.2真實網卡驅動的整體框架分析

11.2.3驅動中關於cs8900硬體操作的探討

12 第12章 其他重要設備驅動開發實戰

12.1 塊設備驅動初步(以ramdisk為例)

12.1.1體驗塊設備驅動

12.1.2塊設備驅動框架介紹

12.1.3塊設備的簡單讀寫實現代碼分析

12.1.4塊設備的高效讀寫實現代碼分析

12.1.5塊設備的其他操作接口fops

12.2 lcd驅動

12.2.1 lcd裸機驅動

12.2.2幀緩衝(framebuffer)設備驅動框架結構

12.2.3 lcd驅動實例代碼

12.2.4 lcd驅動代碼的主幹結構的總結

12.2.5測試lcd驅動程式

12.3 觸控螢幕驅動

12.3.1觸控螢幕裸機驅動

12.3.2 linux輸入子系統

12.3.3 linux下觸控螢幕驅動的實現步驟

12.3.4測試觸控螢幕驅動程式

12.4 usb驅動初步

12.4.1 linux下4種usb驅動簡介與功能體驗

12.4.2 usb接口與規範

12.4.3 usb設備驅動基本知識

12.4.4 usb設備驅動實例

參考文獻

相關詞條

熱門詞條

聯絡我們