原子嵌入式 Linux 驅動開發詳解

左忠凱

  • 原子嵌入式 Linux 驅動開發詳解-preview-1
  • 原子嵌入式 Linux 驅動開發詳解-preview-2
  • 原子嵌入式 Linux 驅動開發詳解-preview-3
原子嵌入式 Linux 驅動開發詳解-preview-1

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

商品描述

嵌入式 Linux涉及的知識點很多,對初學者的基礎要求高,在知識儲備的廣度和深度上都對學習者提出了很高 的要求。大多數轉型嵌入式 Linux開發的朋友都是以前從事單片機開發工作的工程師,因此如何從單片機開發工 程師轉型為嵌入式 Linux開發工程師,這個過程非常重要。 單片機 工 程 師 大 多 數 都 是 在 Windows環 境 下 工 作,使 用 集 成 IDE 編 寫 並 編 譯 代 碼,然 後 在 IDE 上 通 過 DownLoad按鈕一鍵下載代碼到單片機中。至於集成IDE是怎麽組織源文件,又是怎麽編譯的並不清楚。 本書就以單片機工程最熟悉的“裸機”開發為例,講解如何在 Ubuntu下搭建開發環境,如何使用 VScode編寫程 序,如何使用 make工具編譯源碼。通過這些操作,大家就可以對集成式IDE與開源開發環境有很清晰的認識。當 掌握了開發方式以後,剩下的就是通過大量的裸機案例來加深對I.MX6ULL 這顆芯片的認識,瞭解各個外設的應 用,為後面學習嵌入式Linux驅動開發打下堅實的基礎。本書後半部分詳細講解瞭如何移植uboot、Linux內核、根文件 系統,最終在開發板上搭建出一個基礎的嵌入式 Linux系統,後續的嵌入式 Linux驅動開發就在這個小系統上進行。 本書可作為廣大從事嵌入式開發、MCU 開發、物聯網應用開發等工程技術人員的學習和參考用書,也可作為高 等院校電腦、電子、自動化等專業嵌入式系統、微機接口、物聯網、單片機等課程的教材。

目錄大綱

 

 

 

第一篇Ubuntu操作系統入門

 

(掃描封底“本書資源”二維碼獲取)

第二篇裸機開發

 

第1章開發環境搭建

 

1.1Ubuntu和Windows文件互傳

 

1.2Ubuntu下NFS和SSH服務開啟

 

1.2.1NFS服務開啟

 

1.2.2SSH服務開啟

 

1.3Ubuntu交叉編譯工具鏈安裝

 

1.3.1交叉編譯器安裝

 

1.3.2安裝相關庫

 

1.3.3交叉編譯器驗證

 

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

 

1.4.1Visual Studio Code軟件的安裝

 

1.4.2Visual Studio Code插件的安裝

 

1.4.3Visual Studio Code新建工程

 

1.5CH340串口驅動安裝

 

1.6MobaXterm軟件安裝和使用

 

1.6.1MobaXterm軟件安裝

 

1.6.2MobaXterm軟件使用

 

第2章CortexA7 MPCore架構

 

2.1CortexA7 MPCore簡介

 

2.2CortexA處理器運行模型

 

2.3CortexA寄存器組

 

2.3.1通用寄存器

 

2.3.2程序狀態寄存器

 

第3章ARM匯編基礎

 

3.1GNU匯編語法

 

3.2CortexA7常用匯編指令

 

3.2.1處理器內部數據傳輸指令

 

3.2.2存儲器訪問指令

 

3.2.3壓棧和出棧指令

 

3.2.4跳轉指令

 

3.2.5算術運算指令

 

3.2.6邏輯運算指令

 

 

 

 

 

 

 

第4章匯編LED燈實驗

 

4.1I.MX6U GPIO詳解

 

4.1.1STM32 GPIO回顧

 

4.1.2I.MX6ULL I/O命名

 

4.1.3I.MX6ULL I/O復用

 

4.1.4I.MX6ULL I/O配置

 

4.1.5I.MX6ULL GPIO配置

 

4.1.6I.MX6ULL GPIO時鐘使能

 

4.2硬件原理分析

 

4.3實驗程序編寫

 

4.4編譯、下載和驗證

 

4.4.1編譯代碼

 

4.4.2創建Makefile文件

 

4.4.3代碼燒寫

 

4.4.4代碼驗證

 

第5章I.MX6U啟動方式詳解

 

5.1啟動方式選擇

 

5.1.1串行下載

 

5.1.2內部BOOT模式

 

5.2BOOT ROM初始化內容

 

5.3啟動設備

 

5.4鏡像燒寫

 

5.4.1IVT和Boot Data

 

5.4.2DCD數據

 

第6章C語言版LED燈實驗

 

6.1C語言版LED燈簡介

 

6.2硬件原理分析

 

6.3實驗程序編寫

 

6.3.1匯編部分實驗程序編寫

 

6.3.2C語言部分實驗程序編寫

 

6.4編譯、下載和驗證

 

6.4.1編寫Makefile

 

6.4.2鏈接腳本

 

6.4.3修改Makefile

 

6.4.4下載和驗證

 

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

 

7.1模仿STM32寄存器定義

 

7.1.1STM32寄存器定義簡介

 

7.1.2I.MX6ULL寄存器定義

 

7.2硬件原理分析

 

7.3實驗程序編寫

 

7.4編譯、下載和驗證

 

7.4.1編寫Makefile和鏈接腳本

 

7.4.2編譯和下載

 

第8章官方SDK移植實驗

 

8.1官方SDK移植簡介

 

8.2硬件原理分析

 

8.3實驗程序編寫

 

8.3.1SDK文件移植

 

8.3.2創建cc.h文件

 

8.3.3編寫實驗代碼

 

8.4編譯、下載和驗證

 

8.4.1編寫Makefile和鏈接腳本

 

8.4.2編譯和下載

 

第9章BSP工程管理實驗

 

9.1BSP工程管理簡介

 

9.2硬件原理分析

 

9.3實驗程序編寫

 

9.3.1創建imx6ul.h文件

 

9.3.2編寫led驅動代碼

 

9.3.3編寫時鐘驅動代碼

 

9.3.4編寫延時驅動代碼

 

9.3.5修改main.c文件

 

9.4編譯、下載和驗證

 

9.4.1編寫Makefile和鏈接腳本

 

9.4.2編譯和下載

 

第10章蜂鳴器實驗

 

10.1有源蜂鳴器簡介

 

10.2硬件原理分析

 

10.3實驗程序編寫

 

10.4編譯、下載和驗證

 

10.4.1編寫Makefile和鏈接腳本

 

10.4.2編譯和下載

 

第11章按鍵輸入實驗

 

11.1按鍵輸入簡介

 

11.2硬件原理分析

 

11.3實驗程序編寫

 

11.4編譯、下載和驗證

 

11.4.1編寫Makefile和鏈接腳本

 

11.4.2編譯和下載

 

第12章主頻和時鐘配置實驗

 

12.1I.MX6ULL時鐘系統詳解

 

12.1.1系統時鐘來源

 

12.1.27路PLL時鐘源

 

12.1.3時鐘樹簡介

 

12.1.4內核時鐘設置

 

12.1.5PFD時鐘設置

 

12.1.6AHB、IPG和PERCLK根時鐘設置

 

12.2硬件原理分析

 

12.3實驗程序編寫

 

12.4編譯、下載和驗證

 

12.4.1編寫Makefile和鏈接腳本

 

12.4.2編譯和下載

 

第13章GPIO中斷實驗

 

13.1CortexA7中斷系統詳解

 

13.1.1STM32中斷系統回顧

 

13.1.2CortexA7中斷系統簡介

 

13.1.3GIC控制器簡介

 

13.1.4CP15協處理器

 

13.1.5中斷使能

 

13.1.6中斷優先級設置

 

13.2硬件原理分析

 

13.3實驗程序編寫

 

13.3.1移植SDK包中斷相關文件

 

13.3.2重新編寫start.s文件

 

13.3.3通用中斷驅動文件編寫

 

13.3.4修改GPIO驅動文件

 

13.3.5按鍵中斷驅動文件編寫

 

13.3.6編寫main.c文件

 

13.4編譯、下載和驗證

 

13.4.1編寫Makefile和鏈接腳本

 

13.4.2編譯和下載

 

第14章EPIT定時器實驗

 

14.1EPIT定時器簡介

 

14.2硬件原理分析

 

14.3實驗程序編寫

 

14.4編譯、下載和驗證

 

14.4.1編寫Makefile和鏈接腳本

 

14.4.2編譯和下載

 

第15章定時器按鍵消抖實驗

 

15.1定時器按鍵消抖簡介

 

15.2硬件原理分析

 

15.3實驗程序編寫

 

15.4編譯、下載和驗證

 

15.4.1編寫Makefile和鏈接腳本

 

15.4.2編譯和下載

 

第16章高精度延時實驗

 

16.1高精度延時簡介

 

16.1.1GPT定時器簡介

 

16.1.2定時器實現高精度延時原理

 

16.2硬件原理分析

 

16.3實驗程序編寫

 

16.4編譯、下載和驗證

 

16.4.1編寫Makefile和鏈接腳本

 

16.4.2編譯和下載

 

第17章UART串口通信實驗

 

17.1I.MX6ULL串口通信簡介

 

17.1.1UART簡介

 

17.1.2I.MX6ULL UART簡介

 

17.2硬件原理分析

 

17.3實驗程序編寫

 

17.4編譯、下載和驗證

 

17.4.1編寫Makefile和鏈接腳本

 

17.4.2編譯和下載

 

第18章串口格式化函數移植實驗

 

18.1串口格式化函數移植簡介

 

18.2硬件原理分析

 

18.3實驗程序編寫

 

18.4編譯、下載和驗證

 

18.4.1編寫Makefile和鏈接腳本

 

18.4.2編譯和下載

 

第19章DDR3實驗

 

19.1DDR3內存簡介

 

19.1.1何為RAM和ROM

 

19.1.2SRAM簡介

 

19.1.3SDRAM簡介

 

19.1.4DDR簡介

 

19.2DDR3關鍵時間參數

 

19.3I.MX6ULL MMDC控制器簡介

 

19.3.1MMDC控制器

 

19.3.2MMDC控制器信號引腳

 

19.3.3MMDC控制器時鐘源

 

19.4ALPHA開發板DDR3L原理圖

 

19.5DDR3L初始化與測試

 

19.5.1ddr_stress_tester簡介

 

19.5.2DDR3L驅動配置

 

19.5.3DDR3L校準

 

19.5.4DDR3L超頻測試

 

19.5.5DDR3L驅動總結

 

第20章RGB LCD顯示實驗

 

20.1LCD和eLCDIF簡介

 

20.1.1LCD簡介

 

20.1.2eLCDIF接口簡介

 

20.2硬件原理分析

 

20.3實驗程序編寫

 

20.4編譯、下載和驗證

 

20.4.1編寫Makefile和鏈接腳本

 

20.4.2編譯和下載

 

第21章RTC實時時鐘實驗

 

21.1I.MX6ULL RTC實時時鐘簡介

 

21.2硬件原理分析

 

21.3實驗程序編寫

 

21.3.1修改文件MCIMX6Y2.h

 

21.3.2編寫實驗程序

 

21.4編譯、下載和驗證

 

21.4.1編寫Makefile和鏈接腳本

 

21.4.2編譯和下載

 

第22章I2C實驗

 

22.1I2C和AP3216C簡介

 

22.1.1I2C簡介

 

22.1.2I.MX6ULL I2C簡介

 

22.1.3AP3216C簡介

 

22.2硬件原理分析

 

22.3實驗程序編寫

 

22.4編譯、下載和驗證

 

22.4.1編寫Makefile和鏈接腳本

 

22.4.2編譯和下載

 

第23章SPI實驗

 

23.1SPI & ICM20608簡介

 

23.1.1SPI簡介

 

23.1.2I.MX6ULL ECSPI簡介

 

23.1.3ICM20608簡介

 

23.2硬件原理分析

 

23.3實驗程序編寫

 

23.4編譯、下載和驗證

 

23.4.1編寫Makefile和鏈接腳本

 

23.4.2編譯和下載

 

第24章多點電容觸摸屏實驗

 

24.1多點電容觸摸屏簡介

 

24.2硬件原理分析

 

24.3實驗程序編寫

 

24.4編譯、下載和驗證

 

24.4.1編寫Makefile和鏈接腳本

 

24.4.2編譯和下載

 

第25章LCD背光調節實驗

 

25.1LCD背光調節簡介

 

25.2硬件原理分析

 

25.3實驗程序編寫

 

25.4編譯、下載和驗證

 

25.4.1編寫Makefile和鏈接腳本

 

25.4.2編譯和下載

 

第26章ADC實驗

 

26.1ADC簡介

 

26.1.1什麽是ADC

 

26.1.2I.MX6ULL ADC簡介

 

26.2硬件原理分析

 

26.3實驗程序編寫

 

26.4編譯、下載和驗證

 

26.4.1編寫Makefile和鏈接腳本

 

26.4.2編譯和下載

 

第三篇系統移植

 

第27章UBoot使用實驗

 

27.1UBoot簡介

 

27.2UBoot初次編譯

 

27.3UBoot燒寫與啟動

 

27.4UBoot命令使用

 

27.4.1信息查詢命令

 

27.4.2環境變量操作命令

 

27.4.3內存操作命令

 

27.4.4網絡操作命令

 

27.4.5EMMC和SD卡操作命令

 

27.4.6FAT格式文件系統操作命令

 

27.4.7EXT格式文件系統操作命令

 

27.4.8NAND操作命令

 

27.4.9BOOT操作命令

 

27.4.10其他常用命令

 

第28章UBoot頂層Makefile詳解

 

28.1UBoot工程目錄分析

 

28.2VSCode工程創建

 

28.3UBoot頂層Makefile分析

 

28.3.1版本號

 

28.3.2MAKEFLAGS變量

 

28.3.3命令輸出

 

28.3.4靜默輸出

 

28.3.5設置編譯結果輸出目錄

 

28.3.6代碼檢查

 

28.3.7模塊編譯

 

28.3.8獲取主機架構和系統

 

28.3.9設置目標架構、交叉編譯器和配置文件

 

28.3.10調用scripts/Kbuild.include

 

28.3.11交叉編譯工具變量設置

 

28.3.12導出其他變量

 

28.3.13make xxx_defconfig過程

 

28.3.14Makefile.build腳本分析

 

28.3.15make過程

 

第29章UBoot啟動流程詳解

 

29.1鏈接腳本uboot.lds詳解

 

29.2UBoot啟動流程解析

 

29.2.1reset函數源碼詳解

 

29.2.2lowlevel_init函數詳解

 

29.2.3s_init函數詳解

 

29.2.4_main函數詳解

 

29.2.5board_init_f函數詳解

 

29.2.6relocate_code函數詳解

 

29.2.7relocate_vectors函數詳解

 

29.2.8board_init_r函數詳解

 

29.2.9run_main_loop函數詳解

 

29.2.10cli_loop函數詳解

 

29.2.11cmd_process函數詳解

 

29.3bootz啟動Linux內核過程

 

29.3.1images全局變量

 

29.3.2do_bootz函數

 

29.3.3bootz_start函數

 

29.3.4do_bootm_states函數

 

29.3.5bootm_os_get_boot_func函數

 

29.3.6do_bootm_linux函數

 

第30章UBoot移植

 

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

 

30.1.1查找NXP官方的開發板默認配置文件

 

30.1.2編譯NXP官方開發板對應的uboot

 

30.1.3燒寫驗證與驅動測試

 

30.2在UBoot中添加自己的開發板

 

30.2.1添加開發板默認配置文件

 

30.2.2添加開發板對應的頭文件

 

30.2.3添加開發板對應的板級文件夾

 

30.2.4修改UBoot圖形界面配置文件

 

30.2.5使用新添加的板子配置編譯uboot

 

30.2.6LCD驅動修改

 

30.2.7網絡驅動修改

 

30.2.8其他需要修改的地方

 

30.3bootcmd和bootargs環境變量

 

30.3.1環境變量bootcmd

 

30.3.2環境變量bootargs

 

30.4uboot啟動Linux測試

 

30.4.1從EMMC啟動Linux系統

 

30.4.2從網絡啟動Linux系統

 

第31章UBoot圖形化配置及其原理

 

31.1UBoot圖形化配置體驗

 

31.2menuconfig圖形化配置原理

 

31.2.1make menuconfig過程分析

 

31.2.2Kconfig語法簡介

 

31.3添加自定義菜單

 

第32章Linux內核頂層Makefile詳解

 

32.1Linux內核獲取

 

32.2Linux內核初次編譯

 

32.3Linux工程目錄分析

 

32.4VSCode工程創建

 

32.5頂層Makefile詳解

 

32.5.1make xxx_defconfig過程

 

32.5.2Makefile.build腳本分析

 

32.5.3make過程

 

32.5.4builtin.o文件編譯生成過程

 

32.5.5make zImage過程

 

第33章Linux內核啟動流程

 

33.1鏈接腳本vmlinux.lds

 

33.2Linux內核啟動流程分析

 

33.2.1Linux內核入口stext

 

33.2.2__mmap_switched函數

 

33.2.3start_kernel函數

 

33.2.4rest_init函數

 

33.2.5init進程

 

第34章Linux內核移植

 

34.1創建VSCode工程

 

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

 

34.2.1修改頂層Makefile

 

34.2.2配置並編譯Linux內核

 

34.2.3Linux內核啟動測試

 

34.2.4根文件系統缺失錯誤

 

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

 

34.3.1添加開發板默認配置文件

 

34.3.2添加開發板對應的設備樹文件

 

34.3.3編譯測試

 

34.4CPU主頻和網絡驅動修改

 

34.4.1CPU主頻修改

 

34.4.2使能8線EMMC驅動

 

34.4.3修改網絡驅動

 

34.4.4保存修改後的圖形化配置文件

 

第35章根文件系統構建

 

35.1根文件系統簡介

 

35.2BusyBox構建根文件系統

 

35.2.1BusyBox簡介

 

35.2.2編譯BusyBox構建根文件系統

 

35.2.3向根文件系統添加lib庫

 

35.2.4創建其他文件夾

 

35.3根文件系統初步測試

 

35.4完善根文件系統

 

35.4.1創建/etc/init.d/rcS文件

 

35.4.2創建/etc/fstab文件

 

35.4.3創建/etc/inittab文件

 

35.5根文件系統其他功能測試

 

35.5.1軟件運行測試

 

35.5.2中文字符測試

 

35.5.3開機自啟動測試

 

35.5.4外網連接測試

 

第36章系統燒寫

 

36.1MfgTool工具簡介

 

36.2MfgTool工作原理簡介

 

36.2.1燒寫方式

 

36.2.2系統燒寫原理

 

36.3燒寫NXP官方系統

 

36.4燒寫自製的系統

 

36.4.1系統燒寫

 

36.4.2網絡開機自啟動設置

 

36.5改造自己的燒寫工具

 

36.5.1改造MfgTool

 

36.5.2燒寫測試

 

36.5.3解決Linux內核啟動失敗