原子嵌入式 Linux 驅動開發詳解與實戰 (ARM Linux 驅動)
左忠凱
買這商品的人也買了...
-
$480$379 -
$207ARM 嵌入式 Linux 系統開發詳解, 2/e
-
$245嵌入式 Linux 系統開發入門
-
$420$328 -
$894$849 -
$500$490 -
$602嵌入式 C語言自我修養 — 從芯片、編譯器到操作系統
-
$714$678 -
$347玩轉虛擬機 — 基於 VMware + Windows, 2/e
-
$714$678 -
$449x64 匯編語言:從新手到 AVX 專家
-
$880$695 -
$403C語言編程思想與方法
-
$834$792 -
$862原子嵌入式 Linux 驅動開發詳解
-
$880$695 -
$894$849 -
$620$490 -
$780$608 -
$354$336 -
$680$537 -
$352嵌入式系統設計與實踐:基於 RK3288
-
$680$537 -
$1,280$1,011 -
$650$514
相關主題
商品描述
隨著半導體技術和晶元技術的飛速發展,能運行嵌入式 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.4alsalib和alsautils移植
28.4.1alsalib移植
28.4.2alsautils移植
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移植canutils工具
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.3quectelCM移植
37.3.4EC20上網測試