特價 -20%

內嵌作業系統 – ARM Linux驅動程式開發動手做 DM2353

原始價格:NT$1,280。目前價格:NT$1,024。

出版商 深智數位股份有限公司
出版日期 2023年8月20日
語言 繁體中文
頁數 1088
ISBN 9786267273692
Add to Wishlist
貨號: DM2155-3 Category:

描述

內容簡介

【豐富實驗內容】

【完整Linux系統燒錄】

    嵌入式Linux開發環境架設、CortexA7架構及ARM組合語言

    MX6U、STM32之LED燈、啟動方式

    C語言版本LED燈、STM32驅動開發

    SDK移植、BSP專案管理、蜂嗚器、按鍵輸入實驗

    主頻和時脈設定、GPI中斷實驗、EPIT計時、高精度延遲時間

    UART及序列埠格式移植、DDR3實驗

    RGB LCD顯示、RTC即時時脈、I2C實驗、SPI實驗

    多點電容觸控式螢實驗,LCD背光調節、ADC實驗

    u-boot使用、Makefile詳解、啟動流程、u-boot移植、圖形化原理

    Linux Makefile詳解、核心啟動流程、核心移植

    Linux root檔案系統建置(BusyBox)

 

本書一共分兩篇,每篇對應一個不同的階段。第一篇主要是基本常識及最重要的裸機開發,從本篇正式開始開發板的學習。透過數十個裸機常式來幫助讀者了解I.MX6ULL這顆CPU,為以後的Linux驅動開發做準備。讀者可以掌握在Ubuntu下進行ARM開發的方法。第二篇則是系統移植,講解如何將uboot、Linux和root檔案系統移植到開發板上,為後面的Linux驅動開發做準備。把uboot、Linux核心和root檔案系統都在開發板上移植好以後,就可以開始Linux驅動開發了。

Linux最重要的三大類驅動程式,包括字元裝置驅動、區塊裝置驅動和網路裝置驅動,本書都有完整的範例說明,是從事內嵌式Linux開發者最想看到的內容。

作者

左忠凱(左盟主)

正點原子Linux總監,十年嵌入式開發工作經驗,主要研究方向為ARM內核的MCU以及MPU的開發工作,參與多款Cortex-A/M內核芯片的研發。擁有豐富的RTOS以及嵌入式Linux開發經驗,參與編寫並出版多本嵌入式開發書籍,並且錄製了大量的嵌入式學習影片,深受廣大讀者好評。

目錄

第一篇裸機開發

 

1章開發環境架設

1.1Ubuntu和Windows檔案互傳

1.2Ubuntu下NFS和SSH服務開啟

1.3Ubuntu交叉編譯工具鏈安裝

1.4Visual Studio Code軟體的安裝和使用

1.5CH340序列埠驅動安裝

1.6MobaXterm軟體安裝和使用

 

2Cortex-A7 MPCore架構

2.1Cortex-A7 MPCore簡介

2.2Cortex-A處理器執行模型

2.3Cortex-A暫存器組

 

3ARM組合語言基礎

3.1GNU組合語言語法

3.2Cortex-A7常用組合語言指令

 

4章組合語言LED燈實驗

4.1I.MX6U GPIO詳解

4.2硬體原理分析

4.3實驗程式撰寫

4.4編譯、下載和驗證

 

5I.MX6U啟動方式詳解

5.1啟動方式選擇

5.2BOOT ROM初始化內容

5.3啟動裝置

5.4鏡像燒錄

 

6C語言版LED燈實驗

6.1C語言版LED燈簡介

6.2硬體原理分析

6.3實驗程式撰寫

6.4編譯、下載和驗證

 

7章模仿STM32驅動開發格式實驗

7.1模仿STM32暫存器定義

7.2硬體原理分析

7.3實驗程式撰寫

7.4編譯、下載和驗證

 

8章官方SDK移植實驗

8.1官方SDK移植簡介

8.2硬體原理分析

8.3實驗程式撰寫

8.4編譯、下載和驗證

 

9BSP專案管理實驗

9.1BSP專案管理簡介

9.2硬體原理分析

9.3實驗程式撰寫

9.4編譯、下載和驗證

 

10章蜂鳴器實驗

10.1主動蜂鳴器簡介

10.2硬體原理分析

10.3實驗程式撰寫

10.4編譯、下載和驗證

 

11章按鍵輸入實驗

11.1按鍵輸入簡介

11.2硬體原理分析

11.3實驗程式撰寫

11.4編譯、下載和驗證

 

12章主頻和時脈設定實驗

12.1I.MX6ULL時脈系統詳解

12.2硬體原理分析

12.3實驗程式撰寫

12.4編譯、下載和驗證

 

13GPIO中斷實驗

13.1Cortex-A7中斷系統詳解

13.2硬體原理分析

13.3實驗程式撰寫

13.4編譯、下載和驗證

 

14EPIT計時器實驗

14.1EPIT計時器簡介

14.2硬體原理分析

14.3實驗程式撰寫

14.4編譯、下載和驗證

 

15章計時器按鍵消抖實驗

15.1計時器按鍵消抖簡介

15.2硬體原理分析

15.3實驗程式撰寫

15.4編譯、下載和驗證

 

16章高精度延遲時間實驗

16.1高精度延遲時間簡介

16.2硬體原理分析

16.3實驗程式撰寫

16.4編譯、下載和驗證

 

17UART序列埠通訊實驗

17.1I.MX6ULL序列埠通訊簡介

17.2硬體原理分析

17.3實驗程式撰寫

17.4編譯、下載和驗證

 

18章序列埠格式化函數移植實驗

18.1序列埠格式化函數移植簡介

18.2硬體原理分析

18.3實驗程式撰寫

18.4編譯、下載和驗證

 

19DDR3實驗

19.1DDR3記憶體簡介

19.2DDR3關鍵時間參數

19.3I.MX6ULL MMDC控制器簡介

19.4ALPHA開發板DDR3L原理圖

19.5DDR3L初始化與測試

 

20RGB LCD顯示實驗

20.1LCD和eLCDIF簡介

20.2硬體原理分析

20.3實驗程式撰寫

20.4編譯、下載和驗證

 

21RTC即時時脈實驗

21.1I.MX6ULL RTC即時時脈簡介

21.2硬體原理分析

21.3實驗程式撰寫

21.4編譯、下載和驗證

 

22I2C實驗

22.1I2C和AP3216C簡介

22.2硬體原理分析

22.3實驗程式撰寫

22.4編譯、下載和驗證

 

23SPI實驗

23.1SPI & ICM-20608簡介

23.2硬體原理分析

23.3實驗程式撰寫

23.4編譯、下載和驗證

 

24章多點電容觸控式螢幕實驗

24.1多點電容觸控式螢幕簡介

24.2硬體原理分析

24.3實驗程式撰寫

24.4編譯、下載和驗證

 

25LCD背光調節實驗

25.1LCD背光調節簡介

25.2硬體原理分析

25.3實驗程式撰寫

25.4編譯、下載和驗證

 

26ADC實驗

26.1ADC簡介

26.2硬體原理分析

26.3實驗程式撰寫

26.4編譯、下載和驗證

 

第二篇系統移植

 

27U-Boot使用實驗

27.1U-Boot簡介

27.2U-Boot初次編譯

27.3U-Boot燒錄與啟動

27.4U-Boot命令使用

 

28U-Boot頂層Makefile詳解

28.1U-Boot專案目錄分析

28.2VSCode專案建立

28.3U-Boot頂層Makefile分析

 

29U-Boot啟動流程詳解

29.1連結指令稿u-boot.lds詳解

29.2U-Boot啟動流程解析

29.3bootz啟動Linux核心過程

 

30U-Boot移植

30.1NXP官方開發板uboot編譯測試

30.2在U-Boot中增加自己的開發板

30.3bootcmd和bootargs環境變數

30.4uboot啟動Linux測試

 

31U-Boot圖形化設定及其原理

31.1U-Boot圖形化設定體驗

31.2menuconfig圖形化設定原理

31.3增加自訂選單

 

32Linux核心頂層Makefile詳解

32.1Linux核心獲取

32.2Linux核心初次編譯

32.3Linux專案目錄分析

32.4VSCode專案建立

32.5頂層Makefile詳解

 

33Linux核心啟動流程

33.1連結指令稿vmlinux.lds

33.2Linux核心啟動流程分析

 

34Linux核心移植

34.1建立VSCode專案

34.2NXP官方開發板Linux核心編譯

34.3在Linux中增加自己的開發板

34.4CPU主頻和網路驅動修改

 

35root檔案系統建構

35.1root檔案系統簡介

35.2BusyBox建構root檔案系統

35.3root檔案系統初步測試

35.4完善root檔案系統

35.5root檔案系統其他功能測試

 

36章系統燒錄

36.1MfgTool工具簡介

36.2MfgTool工作原理簡介

36.3燒錄NXP官方系統

36.4燒錄自製的系統

36.5改造自己的燒錄工具

前    言

本書主要講解嵌入式Linux中的驅動開發,也會涉及裸機開發的內容,相信大部分讀者和作者經歷一樣,以前從事過微控制器開發的工作,比如51或STM32等。微控制器開發很難接觸到更高層次的系統方面的知識,用到的系統都很簡單,比如μC/OS、FreeRTOS等,這些作業系統都使用一個Kernel,如果需要網路、檔案系統、GUI等就需要開發者自行移植。而移植又是非常痛苦的一件事情,而且移植完成以後的穩定性也無法保證。即使移植成功,後續的開發工作也比較煩瑣,因為不同的元件其API操作函數都不同,沒有一個統一的標準,使用起來學習成本比較高。這時候一個功能完整的作業系統就顯得尤為重要: 具有統一的標準,提供完整的多工管理、儲存管理、裝置管理、檔案管理和網路等。Linux就是這樣一個系統,這樣的系統還有很多,比如Windows、macOS、UNIX等。本書講解Linux,而Linux開發可以分為底層驅動開發和應用程式開發,本書講解的是Linux驅動開發,主要使用過STM32導向的開發者。平心而論,如果此前只會51微控制器開發,筆者不建議直接上手Linux驅動開發,因為51微控制器和Linux驅動開發的差異太大。筆者建議在學習嵌入式Linux驅動開發之前一定要學習STM32這種Cortex-M核心的MCU,因為STM32這樣的MCU其內部資源和可以執行Linux的CPU差不多,如果會STM32,則上手Linux驅動開發就會容易很多。筆者就是此前做了4年STM32開發工作,然後轉做Linux驅動開發,整個過程比較順暢。

鑑於當前STM32非常流行,學習者多,如何幫助STM32學習者順利地轉入Linux驅動開發有以下幾點需要注意。

1) 選取合適的CPU

理論上來講,如果ST公司有可以執行的Linux的晶片那再好不過了,因為大家對STM32很熟悉,但是在撰寫本書時,ST公司尚沒有可以執行Linux的CPU。Linux驅動開發入門的CPU一定不能複雜,比如像三星的Exynos 4412、Exynos 4418等,這些CPU性能很強大,帶有GPU,支援硬體視訊解碼,可以執行Android。但是正是它們的性能過於強大,功能過於繁雜,所以不適合Linux驅動開發入門。一款外接裝置和STM32H7這樣的MCU相似的CPU就非常適合Linux入門,三星的S3C2440就非常合適,但是S3C2440早已停產了,學了以後工作上又用不到,又得學習其他的CPU,有點浪費時間。筆者花了不少時間終於找到了一款合適的CPU,那就是NXP的I.MX6ULL。I.MX6ULL就是一款可以跑Linux的STM32,外接裝置功能和STM32相似,如果此前學習過STM32,那麼會非常容易上手I.MX6ULL。而且I.MX6ULL可以正常出貨,這是一款工業級的CPU,是三星S3C2440、S3C6410產品替代的絕佳之選,學習完I.MX6ULL以後,在工作中就可以直接使用了。本書選取正點原子的I.MX6U-ALPHA開發板,其他廠商的I.MX6ULL開發板也可以參考本書。

2) 開發環境講解

STM32的開發都是在Windows系統下進行的,使用MDK或IAR這樣的整合IDE,但是嵌入式Linux驅動開發需要的主機是Linux平台的,也就是必須先在自己的電腦上安裝Linux系統。Linux系統發行版本有Ubuntu、CentOS、Fdeora、Debian等。本書使用Ubuntu作業系統。

3) 合理的裸機常式

學習嵌入式Linux驅動開發建議大家先學習裸機開發(如果學習過STM32,則可以跳過裸機學習),Linux驅動開發非常煩瑣。要想進行Linux驅動開發,必須要先移植uboot,然後移植Linux系統和root檔案系統到開發平台上。而uboot又是一個超大的裸機綜合常式,因此如果沒有學習過裸機常式,那麼uboot移植會有困難,尤其是要修改uboot程式時。STM32基本都是裸機開發,在整合IDE下撰寫程式,可以使用ST公司提供的函數庫。但是在Ubuntu下撰寫I.MX6ULL裸機常式就沒有這麼方便了,沒有MDK和IAR這樣的IDE,所有的一切都需要自己架設,本書提供了詳細的講解。本書還提供了數十個裸機常式,由淺入深,涵蓋了大部分常用的功能,比如I/O輸入輸出、中斷、序列埠、計時器、DDR、LCD、I2C等。學習完裸機常式以後就對I.MX6ULL這顆CPU非常熟悉了,再去學習Linux驅動開發就很輕鬆了。

4) uboot、Linux和root檔案系統移植

學習完裸機常式以後就是Linux驅動開發了,但是在進行Linux驅動開發之前要先在使用的開發板平台上移植好uboot、Linux和root檔案系統。這是Linux驅動開發的第一個攔路虎,因此本書和對應的視訊會著重講解uboot/Linux和root檔案系統的移植。

5) 嵌入式Linux驅動開發

當我們把uboot、Linux核心和root檔案系統都在開發板上移植好以後,就可以開始Linux驅動開發了。Linux驅動有3大類: 字元裝置驅動、區塊裝置驅動和網路裝置驅動。對於這3大類內容,本書都有詳細的講解,並且配有數十個對應的教學常式,從最簡單的點燈到最後的網路裝置驅動。

額外資訊

出版商

深智數位股份有限公司

出版日期

2023年8月20日

語言

繁體中文

頁數

1088

ISBN

9786267273692