原子嵌入式 Linux 驅動開發詳解與實戰 (ARM Linux 驅動)

左忠凱

  • 出版商: 清華大學
  • 出版日期: 2023-05-01
  • 售價: $1,068
  • 貴賓價: 9.5$1,015
  • 語言: 簡體中文
  • 頁數: 755
  • 裝訂: 平裝
  • ISBN: 7302631999
  • ISBN-13: 9787302631996
  • 相關分類: ARM嵌入式系統Linux
  • 立即出貨

  • 原子嵌入式 Linux 驅動開發詳解與實戰 (ARM Linux 驅動)-preview-1
  • 原子嵌入式 Linux 驅動開發詳解與實戰 (ARM Linux 驅動)-preview-2
  • 原子嵌入式 Linux 驅動開發詳解與實戰 (ARM Linux 驅動)-preview-3
原子嵌入式 Linux 驅動開發詳解與實戰 (ARM Linux 驅動)-preview-1

買這商品的人也買了...

商品描述

隨著半導體技術和晶元技術的飛速發展,能運行嵌入式 Linux系統的 MPU 晶元價格也在不斷降低,ARM 架構 的晶元在手機、工業控制、物聯網、自動駕駛等領域得到了廣泛應用。以前大量使用 MCU 的地方也開始使用嵌入式 Linux地系鐵統刷。卡的閘機、汽車充電樁的操作面板、物聯網網關等都有嵌入式 Linux的身影,各企業對嵌入式 Linux開發 人才的需求也急劇增加。相比單片機開發,嵌入式 Linux開發難度要大很多。尤其是重要的驅動開發,嵌入式 Linux內核採用面向對象思路設計,且已開發大量驅動框架,開發人員需要掌握這些驅動框架的使用,編寫出符合嵌 入式 Linux要求的驅動。 本書從基本的點燈程式到網路驅動的編寫,涵蓋了 Linux開發的三大驅動類型:字元設備驅動、塊設備驅動 和網路設備驅動。本書的一大特色就是涵蓋了全設備樹開發,除了開始的幾個為了講解嵌入式 Linux如何操作 晶元寄存器的常式沒有採用設備樹外,其他的常式都採用設備樹,基本涵蓋了嵌入式 Linux驅 動 開 發 中 的 常 用 外設。本書可作為廣大從事嵌入式開發、物聯網、工業控制開發等工程技術人員的學習和參考用書,也可作為高等學 校計算機、電子、自動化等專業嵌入式系統、微機介面、物聯網等課程的教材。

目錄大綱

 

目錄

第四篇ARM Linux驅動開發篇

第1章字符設備驅動開發

1.1字符設備驅動簡介

1.2字符設備驅動開發步驟

1.2.1驅動模塊的加載和卸載

1.2.2字符設備註冊與註銷

1.2.3實現設備的具體操作函數

1.2.4添加LICENSE和作者信息

1.3Linux設備號

1.3.1設備號的組成

1.3.2設備號的分配

1.4chrdevbase字符設備驅動開發實驗

1.4.1實驗程序編寫

1.4.2編寫測試App

1.4.3編譯驅動程序和測試App

1.4.4運行測試

第2章嵌入式Linux LED燈驅動開發實驗

2.1Linux下LED燈驅動原理

2.1.1地址映射

2.1.2I/O內存訪問函數

2.2硬件原理圖分析

2.3實驗程序編寫

2.3.1LED燈驅動程序編寫

2.3.2編寫測試App

2.4運行測試

2.4.1編譯驅動程序和測試App

2.4.2運行測試

第3章新字符設備驅動實驗

3.1新字符設備驅動原理

3.1.1分配和釋放設備號

3.1.2新的字符設備註冊方法

3.2自動創建設備節點

3.2.1mdev機制

3.2.2創建和刪除類

3.2.3創建設備

3.2.4參考示例

3.3設置文件私有數據

3.4硬件原理圖分析

3.5實驗程序編寫

3.5.1LED燈驅動程序編寫

3.5.2編寫測試App

3.6運行測試

3.6.1編譯驅動程序和測試App

3.6.2運行測試

第4章Linux設備樹

4.1什麽是設備樹

4.2DTS、DTB和DTC

4.3DTS語法

4.3.1.dtsi頭文件

4.3.2設備節點

4.3.3標準屬性

4.3.4根節點compatible屬性

4.3.5向節點追加或修改內容

4.4創建小型模板設備樹

4.5設備樹在系統中的體現

4.6特殊節點

4.6.1aliases子節點

4.6.2chosen子節點

4.7Linux內核解析DTB文件

4.8綁定信息文檔

4.9設備樹常用OF操作函數

4.9.1查找節點的OF函數

4.9.2查找父/子節點的OF函數

4.9.3提取屬性值的OF函數

4.9.4其他常用的OF函數

第5章設備樹下的LED燈驅動實驗

5.1設備樹LED驅動原理

5.2硬件原理圖分析

5.3實驗程序編寫

5.3.1修改設備樹文件

5.3.2LED燈驅動程序編寫

5.3.3編寫測試App

5.4運行測試

5.4.1編譯驅動程序和測試App

5.4.2運行測試

第6章pinctrl和gpio子系統實驗

6.1pinctrl子系統

6.1.1pinctrl子系統簡介

6.1.2I.MX6ULL的pinctrl子系統驅動

6.1.3設備樹中添加pinctrl節點模板

6.2gpio子系統

6.2.1gpio子系統簡介

6.2.2I.MX6ULL的gpio子系統驅動

6.2.3gpio子系統API函數

6.2.4設備樹中添加gpio節點模板

6.2.5與GPIO相關的OF函數

6.3硬件原理圖分析

6.4實驗程序編寫

6.4.1修改設備樹文件

6.4.2LED燈驅動程序編寫

6.4.3編寫測試App

6.5運行測試

6.5.1編譯驅動程序和測試App

6.5.2運行測試

第7章Linux蜂鳴器實驗

7.1蜂鳴器驅動原理

7.2硬件原理圖分析

7.3實驗程序編寫

7.3.1修改設備樹文件

7.3.2蜂鳴器驅動程序編寫

7.3.3編寫測試App

7.4運行測試

7.4.1編譯驅動程序和測試App

7.4.2運行測試

第8章Linux並發與競爭

8.1並發與競爭

8.2原子操作

8.2.1原子操作簡介

8.2.2原子整型數據操作API函數

8.2.3原子位操作API函數

8.3自旋鎖

8.3.1自旋鎖簡介

8.3.2自旋鎖API函數

8.3.3其他類型的鎖

8.3.4自旋鎖使用註意事項

8.4信號量

8.4.1信號量簡介

8.4.2信號量API函數

8.5互斥體

8.5.1互斥體簡介

8.5.2互斥體API函數

第9章Linux並發與競爭實驗

9.1原子操作實驗

9.1.1實驗程序編寫

9.1.2運行測試

9.2自旋鎖實驗

9.2.1實驗程序編寫

9.2.2運行測試

9.3信號量實驗

9.3.1實驗程序編寫

9.3.2運行測試

9.4互斥體實驗

9.4.1實驗程序編寫

9.4.2運行測試

第10章Linux按鍵輸入實驗

10.1Linux下按鍵驅動原理

10.2硬件原理圖分析

10.3實驗程序編寫

10.3.1修改設備樹文件

10.3.2按鍵驅動程序編寫

10.3.3編寫測試App

10.4運行測試

10.4.1編譯驅動程序和測試App

10.4.2運行測試

第11章Linux內核定時器實驗

11.1Linux時間管理和內核定時器簡介

11.1.1內核時間管理簡介

11.1.2內核定時器簡介

11.1.3Linux內核短延時函數

11.2硬件原理圖分析

11.3實驗程序編寫

11.3.1修改設備樹文件

11.3.2定時器驅動程序編寫

11.3.3編寫測試App

11.4運行測試

11.4.1編譯驅動程序和測試App

11.4.2運行測試

第12章Linux中斷實驗

12.1Linux中斷簡介

12.1.1Linux中斷API函數

12.1.2上半部與下半部

12.1.3設備樹中斷信息節點

12.1.4獲取中斷號 

12.2硬件原理圖分析

12.3實驗程序編寫

12.3.1修改設備樹文件

12.3.2按鍵中斷驅動程序編寫

12.3.3編寫測試App

12.4運行測試

12.4.1編譯驅動程序和測試App

12.4.2運行測試

第13章Linux阻塞和非阻塞I/O實驗

13.1阻塞和非阻塞I/O

13.1.1阻塞和非阻塞簡介

13.1.2等待隊列

13.1.3輪詢

13.1.4Linux驅動下的poll操作函數

13.2阻塞I/O實驗

13.2.1硬件原理圖分析

13.2.2實驗程序編寫

13.2.3運行測試

13.3非阻塞I/O實驗

13.3.1硬件原理圖分析

13.3.2實驗程序編寫

13.3.3運行測試

第14章異步通知實驗

14.1異步通知

14.1.1異步通知簡介

14.1.2驅動中的信號處理

14.1.3應用程序對異步通知的處理

14.2硬件原理圖分析

14.3實驗程序編寫

14.3.1修改設備樹文件

14.3.2程序編寫

14.3.3編寫測試App

14.4運行測試

14.4.1編譯驅動程序和測試App

14.4.2運行測試

第15章platform設備驅動實驗

15.1Linux驅動的分離與分層

15.1.1驅動的分隔與分離

15.1.2驅動的分層

15.2platform平臺驅動模型簡介

15.2.1platform總線

15.2.2platform驅動

15.2.3platform設備

15.3硬件原理圖分析

15.4實驗程序編寫

15.4.1platform設備與驅動程序編寫

15.4.2編寫測試App

15.5運行測試

15.5.1編譯驅動程序和測試App

15.5.2運行測試

第16章設備樹下的platform驅動編寫

16.1設備樹下的platform驅動簡介

16.2硬件原理圖分析

16.3實驗程序編寫

16.3.1修改設備樹文件

16.3.2platform驅動程序編寫

16.3.3編寫測試App

16.4運行測試

16.4.1編譯驅動程序和測試App

16.4.2運行測試

第17章Linux自帶的LED燈驅動實驗

17.1Linux內核自帶LED燈驅動使能

17.2Linux內核自帶LED燈驅動簡介

17.2.1LED燈驅動框架分析

17.2.2module_platform_driver()函數簡介

17.2.3gpio_led_probe()函數簡介

17.3設備樹節點編寫

17.4運行測試

第18章Linux MISC驅動實驗

18.1MISC設備驅動簡介

18.2硬件原理圖分析

18.3實驗程序編寫

18.3.1修改設備樹

18.3.2beep驅動程序編寫

18.3.3編寫測試App

18.4運行測試

18.4.1編譯驅動程序和測試App

18.4.2運行測試

第19章Linux input子系統實驗

19.1input子系統

19.1.1input子系統簡介

19.1.2input驅動編寫流程

19.1.3input_event結構體

19.2硬件原理圖分析

19.3實驗程序編寫

19.3.1修改設備樹文件

19.3.2按鍵input驅動程序編寫

19.3.3編寫測試App

19.4運行測試

19.4.1編譯驅動程序和測試App

19.4.2運行測試

19.5Linux自帶按鍵驅動程序的使用

19.5.1自帶按鍵驅動程序源碼簡介

19.5.2自帶按鍵驅動程序的使用

第20章Linux PWM驅動實驗

20.1PWM驅動簡介

20.1.1設備樹下的PWM控制器節點

20.1.2PWM子系統

20.1.3PWM驅動源碼分析

20.2PWM驅動編寫

20.2.1修改設備樹

20.2.2使能PWM驅動

20.3PWM驅動測試

第21章Linux LCD驅動實驗

21.1Linux下LCD驅動簡介

21.1.1Framebuffer設備

21.1.2LCD驅動簡介

21.2硬件原理圖分析

21.3LCD驅動程序編寫

21.3.1修改設備樹

21.3.2LCD屏幕背光節點信息

21.4運行測試

21.4.1LCD屏幕基本測試

21.4.2設置LCD作為終端控制台

21.4.3LCD背光調節

21.4.4LCD自動關閉解決方法

第22章Linux RTC驅動實驗

22.1Linux內核RTC驅動簡介

22.2I.MX6U內部RTC驅動分析

22.3RTC時間查看與設置

第23章Linux I2C驅動實驗

23.1Linux I2C驅動框架簡介

23.1.1I2C總線驅動

23.1.2I2C設備驅動

23.1.3I2C設備和驅動匹配過程

23.2I.MX6U的I2C適配器驅動分析

23.3I2C設備驅動編寫流程

23.3.1I2C設備信息描述

23.3.2I2C設備數據收發處理流程

23.4硬件原理圖分析

23.5實驗程序編寫

23.5.1修改設備樹

23.5.2AP3216C驅動編寫

23.5.3編寫測試App

23.6運行測試

23.6.1編譯驅動程序和測試App

23.6.2運行測試

第24章Linux SPI驅動實驗

24.1Linux下SPI驅動框架簡介

24.1.1SPI主機驅動

24.1.2SPI設備驅動

24.1.3SPI設備和驅動匹配過程

24.2I.MX6U SPI主機驅動分析

24.3SPI設備驅動編寫流程

24.3.1SPI設備信息描述

24.3.2SPI設備數據收發處理流程

24.4硬件原理圖分析

24.5實驗程序編寫

24.5.1修改設備樹

24.5.2編寫ICM20608驅動

24.5.3編寫測試App

24.6運行測試

24.6.1編譯驅動程序和測試App

24.6.2運行測試

第25章Linux RS232/485/GPS驅動實驗

25.1Linux下UART驅動框架

25.2I.MX6U UART驅動分析

25.3硬件原理圖分析

25.4RS232驅動編寫

25.5移植minicom

25.6RS232驅動測試

25.6.1RS232連接設置

25.6.2minicom設置

25.6.3RS232收發測試

25.7RS485測試

25.7.1RS485連接設置

25.7.2RS485收發測試

25.8GPS測試

25.8.1GPS連接設置

25.8.2GPS數據接收測試

第26章Linux 多點電容觸摸屏實驗

26.1Linux下電容觸摸屏驅動框架簡介

26.1.1多點觸摸協議詳解

26.1.2Type A觸摸點信息上報時序

26.1.3Type B觸摸點信息上報時序

26.1.4MT其他事件的使用

26.1.5多點觸摸使用的API函數

26.1.6多點電容觸摸屏驅動框架

26.2硬件原理圖分析

26.3實驗程序編寫

26.3.1修改設備樹

26.3.2編寫多點電容觸摸屏驅動

26.4運行測試

26.4.1編譯驅動程序

26.4.2運行測試

26.4.3將驅動添加到內核中

26.5tslib移植與使用

26.5.1tslib移植

26.5.2tslib測試

26.6使用內核自帶的驅動

第27章RGB轉HDMI實驗

27.1RGB轉HMDI簡介

27.2硬件原理圖分析

27.3實驗驅動編寫

27.3.1修改設備樹

27.3.2使能內核自帶的sii902x驅動

27.3.3修改sii902x驅動

27.4RGB轉HDMI測試

第28章Linux音頻驅動實驗

28.1音頻接口簡介

28.1.1為何需要音頻編解碼芯片

28.1.2WM8960簡介

28.1.3I2S總線接口

28.1.4I.MX6ULL SAI簡介

28.2硬件原理圖分析

28.3音頻驅動使能

28.3.1修改設備樹

28.3.2使能內核的WM8960驅動

28.4alsalib和alsautils移植

28.4.1alsalib移植

28.4.2alsautils移植

28.5聲卡設置與測試

28.5.1amixer的使用方法

28.5.2音樂播放測試

28.5.3MIC錄音測試

28.5.4Line_in錄音測試

28.6開機自動配置聲卡

28.7alsamixer簡介

第29章Linux CAN驅動實驗

29.1CAN協議簡介

29.1.1何為CAN

29.1.2CAN電氣屬性

29.1.3CAN協議

29.1.4CAN速率

29.1.5I.MX6ULL FlexCAN簡介

29.2硬件原理圖分析

29.3實驗程序編寫

29.3.1修改設備樹

29.3.2使能Linux內核自帶的FlexCAN驅動

29.4FlexCAN測試

29.4.1檢查CAN網卡設備是否存在

29.4.2移植iproute2

29.4.3移植canutils工具

29.4.4CAN通信測試

第30章Linux USB驅動實驗

30.1USB接口簡介

30.1.1什麽是USB

30.1.2USB電氣特性

30.1.3USB拓撲結構

30.1.4什麽是USB OTG

30.1.5I.MX6ULL USB接口簡介

30.2硬件原理圖分析

30.2.1USB HUB原理圖分析

30.2.2USB OTG原理圖分析

30.3USB協議簡介

30.3.1USB描述符 

30.3.3USB數據包類型

30.3.4USB傳輸類型

30.3.5USB枚舉

30.4Linux內核自帶HOST實驗

30.4.1USB鼠標鍵盤測試

30.4.2U盤實驗

30.5Linux內核自帶USB OTG實驗

30.5.1修改設備樹

30.5.2OTG主機實驗

30.5.3OTG從機實驗 

第31章regmap API實驗

31.1regmap API簡介

31.1.1什麽是regmap

31.1.2regmap驅動框架

31.1.3regmap操作函數

31.1.4regmap_config掩碼設置

31.2實驗程序編寫

31.3運行測試

第32章Linux IIO驅動實驗

32.1IIO子系統簡介

32.1.1iio_dev

32.1.2iio_info

32.1.3iio_chan_spec

32.2IIO驅動框架創建

32.2.1基礎驅動框架建立

32.2.2IIO設備申請與初始化

32.3實驗程序編寫

32.3.1使能內核IIO相關配置

32.3.2ICM20608的IIO驅動框架搭建

32.3.3完善icm20608_read_raw()函數

32.3.4完善icm20608_write_raw()函數

32.4測試應用程序編寫

32.4.1Linux文件流讀取

32.4.2編寫測試App

32.4.3運行測試

第33章Linux ADC驅動實驗

33.1ADC簡介

33.2ADC驅動源碼簡介

33.2.1設備樹下的ADC節點

33.2.2ADC驅動源碼分析

33.3硬件原理圖分析

33.4ADC驅動編寫

33.4.1修改設備樹

33.4.2使能ADC驅動

33.4.3編寫測試App

33.5運行測試

33.5.1編譯驅動程序和測試App

33.5.2運行測試

第34章Linux 塊設備驅動實驗

34.1什麽是塊設備

34.2塊設備驅動框架

34.2.1block_device結構體

34.2.2gendisk結構體

34.2.3block_device_operations結構體

34.2.4塊設備I/O請求過程

34.3使用請求隊列實驗

34.3.1實驗程序編寫

34.3.2運行測試

34.4不使用請求隊列實驗

34.4.1實驗程序編寫

34.4.2運行測試

第35章Linux 網絡驅動實驗

35.1嵌入式網絡簡介

35.1.1嵌入式下的網絡硬件接口

35.1.2MII/RMII接口

35.1.3MDIO接口

35.1.4RJ45接口

35.1.5I.MX6ULL ENET接口簡介

35.2PHY芯片詳解

35.2.1PHY基礎知識簡介

35.2.2LAN8720A詳解

35.3Linux內核網絡驅動框架

35.3.1net_device結構體

35.3.2net_device_ops結構體

35.3.3sk_buff結構體

35.3.4網絡NAPI處理機制

35.4I.MX6ULL網絡驅動簡介

35.4.1I.MX6ULL網絡外設設備樹

35.4.2I.MX6ULL網絡驅動源碼簡介

35.4.3fec_netdev_ops操作集

35.4.4Linux內核PHY子系統與MDIO總線簡介

35.5網絡驅動實驗測試

35.5.1LAN8720 PHY驅動測試

35.5.2通用PHY驅動測試

35.5.3DHCP功能配置

第36章Linux WiFi驅動實驗

36.1WiFi驅動添加與編譯

36.1.1向Linux內核添加WiFi驅動

36.1.2配置Linux內核

36.1.3編譯WiFi驅動

36.1.4驅動加載測試

36.2wireless tools工具移植與測試

36.2.1wireless tools移植

36.2.2wireless tools工具測試

36.3wpa_supplicant移植

36.3.1openssl移植

36.3.2libnl庫移植

36.3.3wpa_supplicant移植

36.4WiFi聯網測試

36.4.1RTL8188 USB WiFi聯網測試

36.4.2RTL8189 SDIO WiFi聯網測試

第37章Linux 4G通信實驗

37.14G網絡連接簡介

37.2高新興ME3630 4G模塊實驗

37.2.1ME3630 4G模塊簡介

37.2.2ME3630 4G模塊驅動修改

37.2.3ME3630 4G模塊ppp聯網測試

37.2.4ME3630 4G模塊ECM聯網測試

37.2.5ME3630 4G模塊GNSS定位測試

37.3EC20 4G模塊實驗

37.3.1EC20 4G模塊簡介

37.3.2EC20 4G模塊驅動修改

37.3.3quectelCM移植

37.3.4EC20上網測試