嵌入式Linux驱动开发指南V1.6
目录
ALPHA/Mini 开发板教程适配表 ................................................................................. 6
前言 .............................................................................................................................. 44
第一篇 Ubuntu 系统入门篇 ....................................................................................... 46
第一章 Ubuntu 系统安装 ........................................................................................... 47
1.1 安装虚拟机软件 VMware ................................................................................. 48
1.2 创建虚拟机 ........................................................................................................ 54
1.3 安装 Ubuntu 操作系统 ...................................................................................... 65
1.3.1 获取 Ubuntu 系统 ........................................................................................... 65
1.3.2 安装 Ubuntu 操作系统 ................................................................................... 66
1.3.3 弹出系统镜像 ................................................................................................. 78
第二章 Ubuntu 系统入门 ........................................................................................... 80
2.1 Ubuntu 系统初体验 ............................................................................................ 81
2.1.1 Hello Ubuntu .................................................................................................... 81
2.1.2 系统设置 ......................................................................................................... 83
2.1.3 系统注销与关机 ............................................................................................. 86
2.1.4 中文输入测试 ................................................................................................. 86
2.2 Ubuntu 终端操作 ................................................................................................ 89
2.3 Shell 操作 ............................................................................................................ 90
2.3.1 Shell 简介 ......................................................................................................... 90
2.3.2 Shell 基本操作 ................................................................................................. 90
2.2.4 常用 Shell 命令 ............................................................................................... 92
2.4 APT 下载工具 ..................................................................................................... 99
2.5 Ubuntu 下文本编辑 .......................................................................................... 102
2.5.1 Gedit 编辑器 .................................................................................................. 102
2.5.2 VI/VIM 编辑器 .............................................................................................. 103
2.6 Linux 文件系统 ................................................................................................. 108
2.6.1 Linux 文件系统简介以及类型 ...................................................................... 108
2.6.2 Linux 文件系统结构 ...................................................................................... 110
2.6.2 文件操作命令 ............................................................................................... 113
2.6.3 文件压缩和解压缩 ....................................................................................... 117
2.6.4 文件查询和搜索 ........................................................................................... 123
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
10
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
2.6.5 文件类型 ....................................................................................................... 124
2.7 Linux 用户权限管理 ......................................................................................... 125
2.7.1 Ubuntu 用户系统 ........................................................................................ 125
2.7.2 权限管理 ....................................................................................................... 125
2.7.3 权限管理命令 ............................................................................................... 128
2.8 Linux 磁盘管理 ................................................................................................. 130
2.8.1 Linux 磁盘管理基本概念 .............................................................................. 130
2.8.2 磁盘管理命令 ............................................................................................... 131
第三章 Linux C 编程入门 ........................................................................................ 135
3.1 Hello World! ................................................................................................... 136
3.1.1 编写代码 ....................................................................................................... 136
3.1.2 编译代码 ....................................................................................................... 137
3.2 GCC 编译器 ...................................................................................................... 139
3.2.1 gcc 命令 .......................................................................................................... 139
3.2.2 编译错误警告 ............................................................................................... 139
3.2.3 编译流程 ....................................................................................................... 140
3.3 Makefile 基础 .................................................................................................... 140
3.3.1 何为 Makefile ................................................................................................ 140
3.3.2 Makefile 的引入 ............................................................................................. 141
3.4 Makefile 语法 .................................................................................................... 144
3.4.1 Makefile 规则格式 ......................................................................................... 144
3.4.2 Makefile 变量 ................................................................................................. 146
3.4.3 Makefile 模式规则 ......................................................................................... 148
3.4.4 Makefile 自动化变量 ..................................................................................... 149
3.4.5 Makefile 伪目标 ............................................................................................. 150
3.4.6 Makefile 条件判断 ......................................................................................... 150
3.4.7 Makefile 函数使用 ......................................................................................... 151
第二篇 裸机开发篇 .................................................................................................. 154
第四章 开发环境搭建 .............................................................................................. 155
4.1 Ubuntu 和 Windows 文件互传 ......................................................................... 156
4.2 Ubuntu 下 NFS 和 SSH 服务开启 ................................................................... 162
4.2.1 NFS 服务开启 ................................................................................................ 162
4.2.2 SSH 服务开启 ................................................................................................ 163
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
11
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
4.3 Ubuntu 交叉编译工具链安装 .......................................................................... 163
4.3.1 交叉编译器安装 ........................................................................................... 163
4.3.2 安装相关库 ................................................................................................... 167
4.3.3 交叉编译器验证 ........................................................................................... 167
4.4 Source Insight 软件安装和使用 ....................................................................... 169
4.4.1 Source Insight 安装 ........................................................................................ 169
4.4.2 Source Insight 新建工程 ................................................................................ 175
4.4.3 Source Insight 解决中文乱码 ........................................................................ 183
4.5 Visual Studio Code 软件的安装和使用 ........................................................... 185
4.5.1 Visual Studio Code 的安装 ............................................................................ 185
4.5.2 Visual Studio Code 插件的安装 .................................................................... 189
4.5.3 Visual Studio Code 新建工程 ........................................................................ 192
4.6 CH340 串口驱动安装 ....................................................................................... 198
4.7 SecureCRT 软件安装和使用 ............................................................................ 201
4.7.1 SecureCRT 安装 ............................................................................................. 201
4.7.2 SecureCRT 使用 ............................................................................................. 206
4.8 Putty 软件的安装和使用 .................................................................................. 211
4.8.1 Putty 软件安装 ............................................................................................... 211
4.8.2 Putty 软件使用 ............................................................................................... 214
4.9 MobaXterm 软件安装和使用 ........................................................................... 217
4.9.1 MobaXterm 软件安装 .................................................................................... 217
4.9.2 MobaXterm 软件使用 .................................................................................... 218
第五章 I.MX6U-ALPHA/Mini 开发平台介绍 ........................................................ 222
5.1 正点原子 I.MX6U-ALPHA/Mini 开发板资源初探 ....................................... 223
5.1.1 I.MX6U-ALPHA 开发板底板资源 ............................................................... 223
5.1.2 I.MX6U-Mini 开发板底板资源 .................................................................... 224
5.1.3 I.MX6U 核心板资源 ..................................................................................... 226
5.2 正点原子 I.MX6U-ALPHA/Mini 开发板资源说明 ....................................... 227
5.2.1 I.MX6U-ALPHA 硬件资源说明 ................................................................... 227
5.2.2 I.MX6U-ALPHA 软件资源说明 ................................................................... 231
5.2.3 I.MX6U-Mini 硬件资源说明 ........................................................................ 233
5.2.4 I.MX6U-Mini 软件资源说明 ........................................................................ 235
5.2.5 I.MX6ULL 核心板硬件资源说明 ................................................................. 236
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
12
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
5.3 I.MX6U-ALPHA 开发板底板原理图详解 ...................................................... 236
5.3.1 核心板接口 ................................................................................................... 236
5.3.2 引出 IO 口 ..................................................................................................... 238
5.3.3 USB 串口/串口 1 选择接口 .......................................................................... 238
5.3.4 RGB LCD 模块接口 ...................................................................................... 239
5.3.5 复位电路 ....................................................................................................... 240
5.3.6 启动模式设置接口 ....................................................................................... 240
5.3.7 VBAT 供电接口 ............................................................................................. 241
5.3.8 RS232 串口 .................................................................................................... 241
5.3.9 RS485 接口 .................................................................................................... 242
5.3.10 CAN 接口 ..................................................................................................... 242
5.3.11 USB HUB 接口 ............................................................................................ 243
5.3.12 USB OTG 接口 ............................................................................................ 244
5.3.13 光环境传感器 ............................................................................................. 244
5.3.14 六轴传感器 ................................................................................................. 244
5.3.15 LED .............................................................................................................. 245
5.3.16 按键 ............................................................................................................. 245
5.3.17 摄像头模块接口 ......................................................................................... 246
5.3.18 有源蜂鸣器 ................................................................................................. 246
5.3.19 TF 卡接口 ..................................................................................................... 247
5.3.20 SDIO WIFI 接口 .......................................................................................... 247
5.3.21 4G 模块接口 ................................................................................................ 248
5.3.22 ATK 模块接口 .............................................................................................. 249
5.3.23 以太网接口(RJ45) ................................................................................. 250
5.3.24 SAI 音频编解码器 ....................................................................................... 252
5.3.25 电源 ............................................................................................................. 253
5.3.26 电源输入输出接口 ..................................................................................... 254
5.3.27 USB 串口 ..................................................................................................... 254
5.4 I.MX6U-Mini 开发板底板原理图详解 ........................................................... 255
5.4.1 核心板接口 ................................................................................................... 255
5.4.2 引出 IO 口 ..................................................................................................... 257
5.4.3 USB 串口 ....................................................................................................... 257
5.4.4 RGB LCD 模块接口 ...................................................................................... 258
5.4.5 复位电路 ....................................................................................................... 259
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
13
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
5.4.6 启动模式设置接口 ....................................................................................... 259
5.4.7 VBAT 供电接口 ............................................................................................. 260
5.4.8 RS485 接口 .................................................................................................... 260
5.4.9 CAN 接口 ....................................................................................................... 261
5.4.10 USB HOST 接口 .......................................................................................... 261
5.4.11 USB OTG 接口 ............................................................................................ 261
5.4.12 LED .............................................................................................................. 262
5.4.13 按键 ............................................................................................................. 262
5.4.14 摄像头模块接口 ......................................................................................... 263
5.4.15 有源蜂鸣器 ................................................................................................. 263
5.4.16 TF 卡接口 ..................................................................................................... 264
5.4.17 SDIO WIFI 接口 .......................................................................................... 264
5.4.18 ATK 模块接口 .............................................................................................. 264
5.4.19 以太网接口(RJ45) ................................................................................. 265
5.4.20 电源 ............................................................................................................. 266
5.4.21 电源输入输出接口 ..................................................................................... 266
5.5 I.MX6U 核心板原理图详解 ............................................................................ 266
5.5.1 SOC ................................................................................................................ 266
5.5.2 BTB 接口 ....................................................................................................... 270
5.5.3 NAND FLASH ............................................................................................... 272
5.5.4 EMMC ............................................................................................................ 272
5.5.5 DDR3L ........................................................................................................... 273
5.5.6 核心板电源 ................................................................................................... 274
5.6 开发板使用注意事项 ...................................................................................... 277
第六章 Cortex-A7 MPCore 架构 ............................................................................. 278
6.1 Cortex-A7 MPCore 简介 .................................................................................. 279
6.2 Cortex-A 处理器运行模型 ............................................................................... 280
6.3 Cortex-A 寄存器组 ........................................................................................... 280
6.3.1 通用寄存器 ................................................................................................... 282
6.3.2 程序状态寄存器 ........................................................................................... 283
第七章 ARM 汇编基础 ............................................................................................ 285
7.1 GNU 汇编语法 ................................................................................................. 286
7.2 Cortex-A7 常用汇编指令 ................................................................................. 288
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
14
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
7.2.1 处理器内部数据传输指令 ........................................................................... 288
7.2.2 存储器访问指令 ........................................................................................... 288
7.2.3 压栈和出栈指令 ........................................................................................... 289
7.2.4 跳转指令 ....................................................................................................... 291
7.2.5 算术运算指令 ............................................................................................... 292
7.2.6 逻辑运算指令 ............................................................................................... 292
第八章 汇编 LED 灯实验 ........................................................................................ 294
8.1 I.MX6U GPIO 详解 .......................................................................................... 295
8.1.1 STM32 GPIO 回顾 ......................................................................................... 295
8.1.2 I.MX6U IO 命名 ............................................................................................ 295
8.1.3 I.MX6U IO 复用 ............................................................................................ 297
8.1.4 I.MX6U IO 配置 ............................................................................................ 298
8.1.5 I.MX6U GPIO 配置 ....................................................................................... 301
8.1.6 I.MX6U GPIO 时钟使能 ............................................................................... 305
8.2 硬件原理分析 .................................................................................................. 307
8.3 实验程序编写 .................................................................................................. 307
8.4 编译下载验证 .................................................................................................. 312
8.4.1 编译代码 ....................................................................................................... 312
8.4.2 创建 Makefile 文件 ....................................................................................... 316
8.4.3 代码烧写 ....................................................................................................... 317
8.4.4 代码验证 ....................................................................................................... 321
第九章 I.MX6U 启动方式详解 ............................................................................... 322
9.1 启动方式选择 .................................................................................................. 323
9.1.1 串行下载 ....................................................................................................... 323
9.1.2 内部 BOOT 模式 .......................................................................................... 324
9.2 BOOT ROM 初始化内容 ................................................................................. 324
9.3 启动设备 .......................................................................................................... 324
9.4 镜像烧写 .......................................................................................................... 328
9.4.1 IVT 和 Boot Data 数据 .................................................................................. 329
9.4.2 DCD 数据 ....................................................................................................... 331
第十章 C 语言版 LED 灯实验 ................................................................................. 334
10.1 C 语言版 LED 灯简介 .................................................................................... 335
10.2 硬件原理分析 ................................................................................................ 335
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
15
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
10.3 实验程序编写 ................................................................................................ 335
10.3.1 汇编部分实验程序编写 ............................................................................. 335
10.3.2 C 语言部分实验程序编写 .......................................................................... 337
10.4 编译下载验证 ................................................................................................ 342
10.4.1 编写 Makefile .............................................................................................. 342
10.4.2 链接脚本 ..................................................................................................... 343
10.4.3 修改 Makefile .............................................................................................. 345
10.4.4 下载验证 ..................................................................................................... 345
第十一章 模仿 STM32 驱动开发格式实验 ............................................................ 346
11.1 模仿 STM32 寄存器定义 .............................................................................. 347
11.1.1 STM32 寄存器定义简介 ............................................................................. 347
11.1.2 I.MX6U 寄存器定义 .................................................................................... 348
11.2 硬件原理分析 ................................................................................................ 349
11.3 实验程序编写 ................................................................................................ 349
11.4 编译下载验证 ................................................................................................ 354
11.4.1 编写 Makefile 和链接脚本 ......................................................................... 354
11.4.2 编译下载 ..................................................................................................... 355
第十二章 官方 SDK 移植实验 ................................................................................ 356
12.1 I.MX6ULL 官方 SDK 包简介 ........................................................................ 357
12.2 硬件原理图分析 ............................................................................................ 358
12.3 试验程序编写 ................................................................................................ 358
12.3.1 SDK 文件移植 ............................................................................................. 358
12.3.2 创建 cc.h 文件 ............................................................................................. 358
12.3.3 编写实验代码 ............................................................................................. 359
12.4 编译下载验证 ................................................................................................ 365
12.4.1 编写 Makefile 和链接脚本 ......................................................................... 365
12.4.2 编译下载 ..................................................................................................... 366
第十三章 BSP 工程管理实验 .................................................................................. 367
13.1 工程管理简介 ................................................................................................ 368
13.2 硬件原理分析 ................................................................................................ 368
13.3 实验程序编写 ................................................................................................ 369
13.3.1 创建 imx6ul.h 文件 ..................................................................................... 369
13.3.2 编写 led 驱动代码 ...................................................................................... 369
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
16
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
13.3.3 编写时钟驱动代码 ..................................................................................... 371
13.3.4 编写延时驱动代码 ..................................................................................... 372
13.3.5 修改 main.c 文件 ........................................................................................ 374
13.4 编译下载验证 ................................................................................................ 375
13.4.1 编写 Makefile 和链接脚本 ......................................................................... 375
13.4.2 编译下载 ..................................................................................................... 378
第十四章 蜂鸣器实验 .............................................................................................. 379
14.2 有源蜂鸣器简介 ............................................................................................ 380
14.3 硬件原理分析 ................................................................................................ 380
14.3 试验程序编写 ................................................................................................ 381
14.4 编译下载验证 ................................................................................................ 383
14.4.1 编写 Makefile 和链接脚本 ......................................................................... 383
14.4.2 编译下载 ..................................................................................................... 384
第十五章 按键输入实验 .......................................................................................... 385
15.1 按键输入简介 ................................................................................................ 386
15.2 硬件原理分析 ................................................................................................ 386
15.3 实验程序编写 ................................................................................................ 386
15.4 编译下载验证 ................................................................................................ 394
15.4.1 编写 Makefile 和链接脚本 ......................................................................... 394
15.4.2 编译下载 ..................................................................................................... 395
第十六章 主频和时钟配置实验 .............................................................................. 396
16.1 I.MX6U 时钟系统详解 .................................................................................. 397
16.1.1 系统时钟来源 ............................................................................................. 397
16.1.2 7 路 PLL 时钟源 .......................................................................................... 397
16.1.3 时钟树简介 ................................................................................................. 399
16.1.4 内核时钟设置 ............................................................................................. 401
16.1.5 PFD 时钟设置 .............................................................................................. 405
16.1.6 AHB、IPG 和 PERCLK 根时钟设置 ......................................................... 407
16.2 硬件原理分析 ................................................................................................ 411
16.3 实验程序编写 ................................................................................................ 411
16.4 编译下载验证 ................................................................................................ 414
16.4.1 编写 Makefile 和链接脚本 ......................................................................... 414
16.4.2 编译下载 ..................................................................................................... 415
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
17
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
第十七章 GPIO 中断实验 ........................................................................................ 416
17.1 Cortex-A7 中断系统详解 ............................................................................... 417
17.1.1 STM32 中断系统回顾 ................................................................................. 417
17.1.2 Cortex-A7 中断系统简介 ............................................................................ 419
17.1.3 GIC 控制器简介 .......................................................................................... 422
17.1.4 CP15 协处理器 ............................................................................................ 428
17.1.5 中断使能 ..................................................................................................... 432
17.1.6 中断优先级设置 ......................................................................................... 432
17.2 硬件原理分析 ................................................................................................ 434
17.3 试验程序编写 ................................................................................................ 434
17.3.1 移植 SDK 包中断相关文件 ....................................................................... 434
17.3.2 重新编写 start.S 文件 ................................................................................. 434
17.3.3 通用中断驱动文件编写 ............................................................................. 439
17.3.4 修改 GPIO 驱动文件 .................................................................................. 443
17.3.5 按键中断驱动文件编写 ............................................................................. 448
17.3.6 编写 main.c 文件 ........................................................................................ 451
17.4 编译下载验证 ................................................................................................ 452
17.4.1 编写 Makefile 和链接脚本 ......................................................................... 452
17.4.2 编译下载 ..................................................................................................... 453
第十八章 EPIT 定时器实验 ..................................................................................... 454
18.1 EPIT 定时器简介 ............................................................................................ 455
18.2 硬件原理分析 ................................................................................................ 458
18.3 实验程序编写 ................................................................................................ 458
18.4 编译下载验证 ................................................................................................ 461
18.4.1 编写 Makefile 和链接脚本 ......................................................................... 461
18.4.2 编译下载 ..................................................................................................... 462
第十九章 定时器按键消抖实验 .............................................................................. 463
19.1 定时器按键消抖简介 .................................................................................... 464
19.2 硬件原理分析 ................................................................................................ 465
19.3 试验程序编写 ................................................................................................ 465
19.4 编译下载验证 ................................................................................................ 470
19.4.1 编写 Makefile 和链接脚本 ......................................................................... 470
19.4.2 编译下载 ..................................................................................................... 471
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
18
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
第二十章 高精度延时实验 ...................................................................................... 472
20.1 高精度延时简介 ............................................................................................ 473
20.1.1 GPT 定时器简介 .......................................................................................... 473
20.1.2 定时器实现高精度延时原理 ..................................................................... 476
20.2 硬件原理分析 ................................................................................................ 477
20.3 实验程序编写 ................................................................................................ 477
20.4 编译下载验证 ................................................................................................ 483
20.4.1 编写 Makefile 和链接脚本 ......................................................................... 483
20.4.2 编译下载 ..................................................................................................... 483
第二十一章 UART 串 口 通 信 实 验
486
21.1 I.MX6U 串口简介 .......................................................................................... 487
21.1.1 UART 简介................................................................................................... 487
21.1.2 I.MX6U UART 简介 .................................................................................... 489
21.2 硬件原理分析 ................................................................................................ 492
21.3 实验程序编写 ................................................................................................ 493
21.4 编译下载验证 ................................................................................................ 502
21.4.1 编写 Makefile 和链接脚本 ......................................................................... 502
21.4.2 编译下载 ..................................................................................................... 504
第二十二章 串口格式化函数移植实验 .................................................................. 507
22.1 串口格式化函数简介 .................................................................................... 508
22.2 硬件原理分析 ................................................................................................ 508
22.3 实验程序编写 ................................................................................................ 508
22.4 编译下载验证 ................................................................................................ 510
22.4.1 编写 Makefile 和链接脚本 ......................................................................... 510
22.4.2 编译下载 ..................................................................................................... 511
第二十三章 DDR3 实验 ........................................................................................... 513
23.1 DDR3 内存简介 .............................................................................................. 514
23.1.1 何为 RAM 和 ROM? .................................................................................. 514
23.1.2 SRAM 简介 .................................................................................................. 514
23.1.3 SDRAM 简介 ............................................................................................... 516
23.1.4 DDR 简介 ..................................................................................................... 519
23.2 DDR3 关键时间参数 ...................................................................................... 521
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
19
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
23.3 I.MX6U MMDC 控制器简介 ......................................................................... 524
23.3.1 MMDC 控制器 ............................................................................................ 524
23.3.2 MMDC 控制器信号引脚 ............................................................................ 524
23.3.3 MMDC 控制器时钟源 ................................................................................ 525
23.4 ALPHA 开发板 DDR3L 原理图 .................................................................... 525
23.5 DDR3L 初始化与测试 ................................................................................... 526
23.5.1 ddr_stress_tester 简介 .................................................................................. 526
23.5.2 DDR3L 驱动配置 ........................................................................................ 527
23.5.3 DDR3L 校准 ................................................................................................ 533
23.5.4 DDR3L 超频测试 ........................................................................................ 537
23.5.5 DDR3L 驱动总结 ........................................................................................ 538
第二十四章 RGBLCD 显示实验 ............................................................................. 541
24.1 LCD 和 eLCDIF 简介 ..................................................................................... 542
24.1.1 LCD 简介 ..................................................................................................... 542
24.1.2 eLCDIF 接口 ................................................................................................ 550
24.2 硬件原理分析 ................................................................................................ 555
24.3 实验程序编写 ................................................................................................ 557
24.4 编译下载验证 ................................................................................................ 578
24.4.1 编写 Makefile 和链接脚本 ......................................................................... 578
24.4.2 编译下载 ..................................................................................................... 579
第二十五章 RTC 实时时钟实验 .............................................................................. 580
25.1 I.MX6U RTC 简介 .......................................................................................... 581
25.2 硬件原理分析 ................................................................................................ 583
25.3 实验程序编写 ................................................................................................ 583
25.3.1 修改文件 MCIMX6Y2.h ............................................................................ 584
25.3.2 编写实验程序 ............................................................................................. 584
25.4 编译下载验证 ................................................................................................ 594
25.4.1 编写 Makefile 和链接脚本 ......................................................................... 594
25.4.2 编译下载 ..................................................................................................... 595
第二十六章 I2C 实验 ............................................................................................... 597
26.1 I2C & AP3216C 简介 ..................................................................................... 598
26.1.1 I2C 简介 ....................................................................................................... 598
26.1.2 I.MX6U I2C 简介 ........................................................................................ 600
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
20
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
26.1.3 AP3216C 简介 .............................................................................................. 603
26.2 硬件原理分析 ................................................................................................ 604
26.3 实验程序编写 ................................................................................................ 605
26.4 编译下载验证 ................................................................................................ 620
26.4.1 编写 Makefile 和链接脚本 ......................................................................... 620
26.4.2 编译下载 ..................................................................................................... 621
第二十七章 SPI 实验 ............................................................................................... 623
27.1 SPI & ICM-20608 简介 .................................................................................. 624
27.1.1 SPI 简介 ....................................................................................................... 624
27.1.2 I.MX6U ECSPI 简介 .................................................................................... 625
27.1.3 ICM-20608 简介 .......................................................................................... 629
27.2 硬件原理分析 ................................................................................................ 632
27.3 实验程序编写 ................................................................................................ 632
27.4 编译下载验证 ................................................................................................ 647
27.4.1 编写 Makefile 和链接脚本 ......................................................................... 647
27.4.2 编译下载 ..................................................................................................... 649
第二十八章 多点电容触摸屏实验 .......................................................................... 650
28.1 多点电容触摸简介 ........................................................................................ 651
28.2 硬件原理分析 ................................................................................................ 652
28.3 实验程序编写 ................................................................................................ 653
28.4 编译下载验证 ................................................................................................ 663
28.4.1 编写 Makefile 和链接脚本 ......................................................................... 663
28.4.2 编译下载 ..................................................................................................... 664
第二十九章 LCD 背光调节实验 ............................................................................. 667
29.1 LCD 背光调节简介 ........................................................................................ 668
29.2 硬件原理分析 ................................................................................................ 673
29.3 实验程序编写 ................................................................................................ 673
29.4 编译下载验证 ................................................................................................ 679
29.4.1 编写 Makefile 和链接脚本 ......................................................................... 679
29.4.2 编译下载 ..................................................................................................... 681
第三篇 系统移植篇 .................................................................................................. 683
第三十章 U-Boot 使用实验 ..................................................................................... 684
30.1 U-Boot 简介 .................................................................................................... 685
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
21
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
30.2 U-Boot 初次编译 ............................................................................................ 688
30.3 U-Boot 烧写与启动 ........................................................................................ 690
30.4 U-Boot 命令使用 ............................................................................................ 692
30.4.1 信息查询命令 ............................................................................................. 693
30.4.2 环境变量操作命令 ..................................................................................... 695
30.4.3 内存操作命令 ............................................................................................. 696
30.4.4 网络操作命令 ............................................................................................. 700
30.4.5 EMMC 和 SD 卡操作命令 .......................................................................... 706
30.4.6 FAT 格式文件系统操作命令 ...................................................................... 712
30.4.7 EXT 格式文件系统操作命令 ..................................................................... 715
30.4.8 NAND 操作命令 .......................................................................................... 716
30.4.9 BOOT 操作命令 .......................................................................................... 720
30.4.10 其他常用命令 ........................................................................................... 725
第三十一章 U-Boot 顶层 Makefile 详解 ................................................................. 728
31.1 U-Boot 工程目录分析 .................................................................................... 729
31.2 VScode 工程创建 ............................................................................................ 739
31.3 U-Boot 顶层 Makefile 分析 ............................................................................ 745
31.3.1 版本号 ......................................................................................................... 745
31.3.2 MAKEFLAGS 变量 ..................................................................................... 746
31.3.3 命令输出 ..................................................................................................... 746
31.3.4 静默输出 ..................................................................................................... 748
31.3.5 设置编译结果输出目录 ............................................................................. 750
31.3.6 代码检查 ..................................................................................................... 751
31.3.7 模块编译 ..................................................................................................... 752
31.3.8 获取主机架构和系统 ................................................................................. 753
31.3.9 设置目标架构、交叉编译器和配置文件 ................................................. 754
31.3.10 调用 scripts/Kbuild.include ....................................................................... 755
31.3.11 交叉编译工具变量设置 ........................................................................... 755
31.3.12 导出其他变量 ........................................................................................... 756
31.3.13 make xxx_defconfig 过程 .......................................................................... 760
31.3.14 Makefile.build 脚本分析 ........................................................................... 765
31.3.15 make 过程 .................................................................................................. 768
第三十二章 U-Boot 启动流程详解 ......................................................................... 777
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
22
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
32.1 链接脚本 u-boot.lds 详解 .............................................................................. 778
32.2 U-Boot 启动流程详解 .................................................................................... 782
32.2.1 reset 函数源码详解 ...................................................................................... 782
32.2.2 lowlevel_init 函数详解 ................................................................................ 787
32.2.3 s_init 函数详解 ............................................................................................ 790
32.2.4 _main 函数详解 ........................................................................................... 792
32.2.5 board_init_f 函数详解 ................................................................................. 799
32.2.6 relocate_code 函数详解 ............................................................................... 807
32.2.7 relocate_vectors 函数详解 ........................................................................... 813
32.2.8 board_init_r 函数详解 ................................................................................. 814
32.2.9 run_main_loop 函数详解 ............................................................................. 818
32.2.10 cli_loop 函数详解 ...................................................................................... 824
32.2.11 cmd_process 函数详解 .............................................................................. 826
32.3 bootz 启动 Linux 内核过程 ............................................................................ 832
32.3.1 images 全局变量 .......................................................................................... 832
32.3.2 do_bootz 函数 .............................................................................................. 833
32.3.3 bootz_start 函数 ........................................................................................... 834
32.3.4 do_bootm_states 函数 .................................................................................. 837
32.3.5 bootm_os_get_boot_func 函数 .................................................................... 842
32.3.6 do_bootm_linux 函数 ................................................................................... 843
第三十三章 U-Boot 移植 ......................................................................................... 848
33.1 NXP 官方开发板 uboot 编译测试 ................................................................. 849
33.1.1 查找 NXP 官方的开发板默认配置文件 ................................................... 849
33.1.2 编译 NXP 官方开发板对应的 uboot ......................................................... 850
33.1.3 烧写验证与驱动测试 ................................................................................. 852
33.2 在 U-Boot 中添加自己的开发板 .................................................................. 854
33.2.1 添加开发板默认配置文件 ......................................................................... 855
33.2.2 添加开发板对应的头文件 ......................................................................... 855
33.2.3 添加开发板对应的板级文件夹 ................................................................. 863
33.2.4 修改 U-Boot 图形界面配置文件 ............................................................... 865
33.2.5 使用新添加的板子配置编译 uboot ........................................................... 865
33.2.6 LCD 驱动修改 ............................................................................................. 867
33.2.7 网络驱动修改 ............................................................................................. 870
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
23
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
33.2.8 其他需要修改的地方 ................................................................................. 880
33.3 bootcmd 和 bootargs 环境变量 ...................................................................... 881
33.3.1 环境变量 bootcmd ...................................................................................... 882
33.3.2 环境变量 bootargs ...................................................................................... 887
33.4 uboot 启动 Linux 测试 ................................................................................... 888
33.4.1 从 EMMC 启动 Linux 系统 ....................................................................... 888
33.4.2 从网络启动 Linux 系统 .............................................................................. 889
第三十四章 U-Boot 图形化配置及其原理 ............................................................. 891
34.1 U-Boot 图形化配置体验 ................................................................................ 892
34.2 menuconfig 图形化配置原理 ......................................................................... 896
34.2.1 make menuconfig 过程分析 ........................................................................ 896
34.2.2 Kconfig 语法简介 ........................................................................................ 897
34.3 添加自定义菜单 ............................................................................................ 906
第三十五章 Linux 内核顶层 Makefile 详解 ........................................................... 909
35.1 Linux 内核获取 ............................................................................................... 910
35.2 Linux 内核初次编译 ....................................................................................... 910
35.3 Linux 工程目录分析 ....................................................................................... 912
35.4 VSCode 工程创建 ........................................................................................... 918
35.5 顶层 Makefile 详解 ........................................................................................ 920
35.5.1 make xxx_defconfig 过程 ............................................................................ 925
35.5.2 Makefile.build 脚本分析 ............................................................................. 927
35.5.3 make 过程 .................................................................................................... 929
35.5.4 built-in.o 文件编译生成过程 ...................................................................... 934
35.5.5 make zImage 过程 ........................................................................................ 937
第三十六章 Linux 内核启动流程 ............................................................................ 939
36.1 链接脚本 vmlinux.lds .................................................................................... 940
36.2 Linux 内核启动流程分析 ............................................................................... 940
36.2.1 Linux 内核入口 stext ................................................................................... 940
36.2.2 __mmap_switched 函数 ............................................................................... 943
36.2.3 start_kernel 函数 .......................................................................................... 943
36.2.4 rest_init 函数 ................................................................................................ 947
36.2.5 init 进程 ........................................................................................................ 949
第三十七章 Linux 内核移植 .................................................................................... 953
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
24
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
37.1 创建 VSCode 工程 ......................................................................................... 954
37.2 NXP 官方开发板 Linux 内核编译 ................................................................. 954
37.2.1 修改顶层 Makefile ....................................................................................... 954
37.2.2 配置并编译 Linux 内核 .............................................................................. 954
37.2.3 Linux 内核启动测试 .................................................................................... 955
37.2.4 根文件系统缺失错误 ................................................................................. 956
37.3 在 Linux 中添加自己的开发板 ..................................................................... 957
37.3.1 添加开发板默认配置文件 ......................................................................... 957
37.3.2 添加开发板对应的设备树文件 ................................................................. 958
37.3.3 编译测试 ..................................................................................................... 959
37.4 CPU 主频和网络驱动修改 ............................................................................ 960
37.4.1 CPU 主频修改 ............................................................................................. 960
37.4.2 使能 8 线 EMMC 驱动 ............................................................................... 966
37.4.3 修改网络驱动 ............................................................................................. 967
37.4.4 保存修改后的图形化配置文件 ................................................................. 977
第三十八章 根文件系统构建 .................................................................................. 980
38.1 根文件系统简介 ............................................................................................ 981
38.2 BusyBox 构建根文件系统 ............................................................................. 983
38.2.1 BusyBox 简介 .............................................................................................. 983
38.2.2 编译 BusyBox 构建根文件系统 ................................................................ 984
38.2.3 向根文件系统添加 lib 库 ........................................................................... 992
38.2.4 创建其他文件夹 ......................................................................................... 994
38.3 根文件系统初步测试 .................................................................................... 994
38.4 完善根文件系统 ............................................................................................ 996
38.4.1 创建/etc/init.d/rcS 文件 .............................................................................. 996
38.4.2 创建/etc/fstab 文件 ..................................................................................... 997
38.4.3 创建/etc/inittab 文件 ................................................................................... 998
38.5 根文件系统其他功能测试 ............................................................................ 999
38.5.1 软件运行测试 ............................................................................................. 999
38.5.2 中文字符测试 ........................................................................................... 1001
38.5.3 开机自启动测试 ....................................................................................... 1002
38.5.4 外网连接测试 ........................................................................................... 1003
第三十九章 系统烧写 ............................................................................................ 1005
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
25
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
39.1 MfgTool 工具简介 ........................................................................................ 1006
39.2 MfgTool 工作原理简介 ................................................................................ 1007
39.2.1 烧写方式 ................................................................................................... 1007
39.2.2 系统烧写原理 ........................................................................................... 1008
39.3 烧写 NXP 官方系统 .................................................................................... 1012
39.4 烧写自制的系统 .......................................................................................... 1013
39.4.1 系统烧写 ................................................................................................... 1013
39.4.2 网络开机自启动设置 ............................................................................... 1015
39.5 改造我们自己的烧写工具 .......................................................................... 1017
39.5.1 改造 MfgTool ............................................................................................ 1017
39.5.2 烧写测试 ................................................................................................... 1020
39.5.3 解决 Linux 内核启动失败 ........................................................................ 1020
第四篇 ARM Linux 驱动开发篇 ........................................................................... 1023
第四十章 字符设备驱动开发 ................................................................................ 1024
40.1 字符设备驱动简介 ...................................................................................... 1025
40.2 字符设备驱动开发步骤 .............................................................................. 1027
40.2.1 驱动模块的加载和卸载 ........................................................................... 1028
40.2.2 字符设备注册与注销 ............................................................................... 1029
40.2.3 实现设备的具体操作函数 ....................................................................... 1031
40.2.4 添加 LICENSE 和作者信息 ..................................................................... 1033
40.3 Linux 设备号 ................................................................................................. 1033
40.3.1 设备号的组成 ........................................................................................... 1033
40.3.2 设备号的分配 ........................................................................................... 1034
40.4 chrdevbase 字符设备驱动开发实验 ............................................................ 1035
40.4.1 实验程序编写 ........................................................................................... 1035
40.4.2 编写测试 APP ........................................................................................... 1041
40.4.3 编译驱动程序和测试 APP ....................................................................... 1045
40.4.4 运行测试 ................................................................................................... 1047
第四十一章 嵌入式 Linux LED 驱动开发实验 .................................................... 1051
41.1 Linux 下 LED 灯驱动原理 ........................................................................... 1052
41.1.1 地址映射 ................................................................................................... 1052
41.1.2 I/O 内存访问函数 ...................................................................................... 1054
41.2 硬件原理图分析 .......................................................................................... 1054
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
26
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
41.3 实验程序编写 .............................................................................................. 1054
41.3.1 LED 灯驱动程序编写 ............................................................................... 1054
41.3.2 编写测试 APP ........................................................................................... 1060
41.4 运行测试 ...................................................................................................... 1062
41.4.1 编译驱动程序和测试 APP ....................................................................... 1062
41.4.2 运行测试 ................................................................................................... 1062
第四十二章 新字符设备驱动实验 ........................................................................ 1064
42.1 新字符设备驱动原理 .................................................................................. 1065
42.1.1 分配和释放设备号 ................................................................................... 1065
42.1.2 新的字符设备注册方法 ........................................................................... 1066
42.2 自动创建设备节点 ...................................................................................... 1067
42.2.1 mdev 机制 .................................................................................................. 1067
42.2.1 创建和删除类 ........................................................................................... 1068
42.2.2 创建设备 ................................................................................................... 1068
42.2.3 参考示例 ................................................................................................... 1069
42.3 设置文件私有数据 ...................................................................................... 1069
42.4 硬件原理图分析 .......................................................................................... 1070
42.5 实验程序编写 .............................................................................................. 1070
42.5.1 LED 灯驱动程序编写 ............................................................................... 1070
42.5.2 编写测试 APP ........................................................................................... 1077
42.6 运行测试 ...................................................................................................... 1077
42.6.1 编译驱动程序和测试 APP ....................................................................... 1077
42.6.2 运行测试 ................................................................................................... 1077
第四十三章 Linux 设备树 ...................................................................................... 1079
43.1 什么是设备树? .......................................................................................... 1080
43.2 DTS、DTB 和 DTC ...................................................................................... 1081
43.3 DTS 语法 ....................................................................................................... 1083
43.3.1 .dtsi 头文件 ................................................................................................ 1083
43.3.2 设备节点 ................................................................................................... 1086
43.3.3 标准属性 ................................................................................................... 1087
43.3.4 根节点 compatible 属性 ........................................................................... 1091
43.3.5 向节点追加或修改内容 ........................................................................... 1097
43.4 创建小型模板设备树 .................................................................................. 1099
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
27
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
43.5 设备树在系统中的体现 .............................................................................. 1105
43.6 特殊节点 ...................................................................................................... 1106
43.6.1 aliases 子节点 ............................................................................................ 1106
43.6.2 chosen 子节点 ............................................................................................ 1107
43.7 Linux 内核解析 DTB 文件 ........................................................................... 1109
43.8 绑定信息文档 ............................................................................................... 1110
43.9 设备树常用 OF 操作函数 ............................................................................ 1111
43.9.1 查找节点的 OF 函数 ................................................................................. 1112
43.9.2 查找父/子节点的 OF 函数 ........................................................................ 1113
43.9.3 提取属性值的 OF 函数 ............................................................................. 1114
43.9.4 其他常用的 OF 函数 ................................................................................. 1117
第四十四章 设备树下的 LED 驱动实验 .............................................................. 1120
44.1 设备树 LED 驱动原理 ................................................................................ 1121
44.2 硬件原理图分析 .......................................................................................... 1121
44.3 实验程序编写 .............................................................................................. 1121
44.3.1 修改设备树文件 ....................................................................................... 1121
44.3.2 LED 灯驱动程序编写 ............................................................................... 1122
44.3.3 编写测试 APP ........................................................................................... 1130
44.4 运行测试 ...................................................................................................... 1130
44.4.1 编译驱动程序和测试 APP ....................................................................... 1130
44.4.2 运行测试 ................................................................................................... 1130
第四十五章 pinctrl 和 gpio 子系统实验 ................................................................ 1132
45.1 pinctrl 子系统 ................................................................................................ 1133
45.1.1 pinctrl 子系统简介 ..................................................................................... 1133
45.1.2 I.MX6ULL 的 pinctrl 子系统驱动 ............................................................ 1133
45.1.3 设备树中添加 pinctrl 节点模板 ............................................................... 1142
45.2 gpio 子系统 ................................................................................................... 1143
45.2.1 gpio 子系统简介 ........................................................................................ 1143
45.2.2 I.MX6ULL 的 gpio 子系统驱动 ............................................................... 1143
45.2.3 gpio 子系统 API 函数 ................................................................................ 1151
45.2.4 设备树中添加 gpio 节点模板 .................................................................. 1152
45.2.5 与 gpio 相关的 OF 函数 ........................................................................... 1153
45.3 硬件原理图分析 .......................................................................................... 1154
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
28
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
45.4 实验程序编写 .............................................................................................. 1154
45.4.1 修改设备树文件 ....................................................................................... 1154
45.4.2 LED 灯驱动程序编写 ............................................................................... 1156
44.4.3 编写测试 APP ........................................................................................... 1161
45.5 运行测试 ...................................................................................................... 1162
45.5.1 编译驱动程序和测试 APP ....................................................................... 1162
45.5.2 运行测试 ................................................................................................... 1162
第四十六章 Linux 蜂鸣器实验 .............................................................................. 1164
46.1 蜂鸣器驱动原理 .......................................................................................... 1165
46.2 硬件原理图分析 .......................................................................................... 1165
46.3 实验程序编写 .............................................................................................. 1165
46.3.1 修改设备树文件 ....................................................................................... 1165
46.3.2 蜂鸣器驱动程序编写 ............................................................................... 1166
46.3.3 编写测试 APP ........................................................................................... 1171
46.4 运行测试 ...................................................................................................... 1173
46.4.1 编译驱动程序和测试 APP ....................................................................... 1173
46.4.2 运行测试 ................................................................................................... 1173
第四十七章 Linux 并发与竞争 .............................................................................. 1175
47.1 并发与竞争 .................................................................................................. 1176
47.2 原子操作 ...................................................................................................... 1177
47.2.1 原子操作简介 ........................................................................................... 1177
47.2.2 原子整形操作 API 函数 ........................................................................... 1178
47.2.3 原子位操作 API 函数 ............................................................................... 1179
47.3 自旋锁 .......................................................................................................... 1180
47.3.1 自旋锁简介 ............................................................................................... 1180
47.3.2 自旋锁 API 函数 ....................................................................................... 1181
47.3.3 其他类型的锁 ........................................................................................... 1183
47.3.4 自旋锁使用注意事项 ............................................................................... 1184
47.4 信号量 .......................................................................................................... 1185
47.4.1 信号量简介 ............................................................................................... 1185
47.4.2 信号量 API 函数 ....................................................................................... 1186
47.5 互斥体 .......................................................................................................... 1186
47.5.1 互斥体简介 ............................................................................................... 1186
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
29
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
47.5.2 互斥体 API 函数 ....................................................................................... 1187
第四十八章 Linux 并发与竞争实验 ...................................................................... 1188
48.1 原子操作实验 .............................................................................................. 1189
48.1.1 实验程序编写 ........................................................................................... 1189
48.1.2 运行测试 ................................................................................................... 1196
48.2 自旋锁实验 .................................................................................................. 1198
48.2.1 实验程序编写 ........................................................................................... 1198
48.2.2 运行测试 ................................................................................................... 1202
48.3 信号量实验 .................................................................................................. 1203
48.3.1 实验程序编写 ........................................................................................... 1203
48.3.2 运行测试 ................................................................................................... 1206
48.4 互斥体实验 .................................................................................................. 1207
48.4.1 实验程序编写 ........................................................................................... 1207
48.4.2 运行测试 ................................................................................................... 1210
第四十九章 Linux 按键输入实验 .......................................................................... 1212
49.1 Linux 下按键驱动原理 ................................................................................. 1213
49.2 硬件原理图分析 .......................................................................................... 1213
49.3 实验程序编写 .............................................................................................. 1213
49.3.1 修改设备树文件 ....................................................................................... 1213
49.3.2 按键驱动程序编写 ................................................................................... 1214
49.3.3 编写测试 APP ........................................................................................... 1219
49.4 运行测试 ...................................................................................................... 1221
49.4.1 编译驱动程序和测试 APP ....................................................................... 1221
49.4.2 运行测试 ................................................................................................... 1221
第五十章 Linux 内核定时器实验 ......................................................................... 1223
50.1 Linux 时间管理和内核定时器简介 ............................................................. 1224
50.1.1 内核时间管理简介 ................................................................................... 1224
50.1.2 内核定时器简介 ....................................................................................... 1227
50.1.3 Linux 内核短延时函数 .............................................................................. 1229
50.2 硬件原理图分析 .......................................................................................... 1229
50.3 实验程序编写 .............................................................................................. 1230
50.3.1 修改设备树文件 ....................................................................................... 1230
50.3.2 定时器驱动程序编写 ............................................................................... 1230
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
30
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
50.3.3 编写测试 APP ........................................................................................... 1236
50.4 运行测试 ...................................................................................................... 1238
50.4.1 编译驱动程序和测试 APP ....................................................................... 1238
50.4.2 运行测试 ................................................................................................... 1239
第五十一章 Linux 中断实验 .................................................................................. 1240
51.1 Linux 中断简介 ............................................................................................. 1241
51.1.1 Linux 中断 API 函数 ................................................................................. 1241
51.1.2 上半部与下半部 ....................................................................................... 1243
51.1.3 设备树中断信息节点 ............................................................................... 1249
51.1.4 获取中断号 ............................................................................................... 1251
51.2 硬件原理图分析 .......................................................................................... 1251
51.3 实验程序编写 .............................................................................................. 1251
51.3.1 修改设备树文件 ....................................................................................... 1251
51.3.2 按键中断驱动程序编写 ........................................................................... 1252
51.3.3 编写测试 APP ........................................................................................... 1260
51.4 运行测试 ...................................................................................................... 1262
51.4.1 编译驱动程序和测试 APP ....................................................................... 1262
51.4.2 运行测试 ................................................................................................... 1262
第五十二章 Linux 阻塞和非阻塞 IO 实验 ........................................................... 1264
52.1 阻塞和非阻塞 IO ......................................................................................... 1265
52.1.1 阻塞和非阻塞简介 ................................................................................... 1265
52.1.2 等待队列 ................................................................................................... 1266
52.1.3 轮询 ........................................................................................................... 1268
52.1.4 Linux 驱动下的 poll 操作函数 ................................................................. 1272
52.2 阻塞 IO 实验 ................................................................................................ 1273
52.2.1 硬件原理图分析 ....................................................................................... 1273
52.2.2 实验程序编写 ........................................................................................... 1273
52.2.3 运行测试 ................................................................................................... 1280
52.3 非阻塞 IO 实验 ............................................................................................ 1281
52.3.1 硬件原理图分析 ....................................................................................... 1281
52.3.2 实验程序编写 ........................................................................................... 1282
52.3.3 运行测试 ................................................................................................... 1287
第五十三章 异步通知实验 .................................................................................... 1290
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
31
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
53.1 异步通知 ...................................................................................................... 1291
53.1.1 异步通知简介 ........................................................................................... 1291
53.1.2 驱动中的信号处理 ................................................................................... 1293
53.1.3 应用程序对异步通知的处理 ................................................................... 1295
53.2 硬件原理图分析 .......................................................................................... 1295
53.3 实验程序编写 .............................................................................................. 1295
53.3.1 修改设备树文件 ....................................................................................... 1296
53.3.2 程序编写 ................................................................................................... 1296
53.3.3 编写测试 APP ........................................................................................... 1299
53.4 运行测试 ...................................................................................................... 1301
53.4.1 编译驱动程序和测试 APP ....................................................................... 1301
53.4.2 运行测试 ................................................................................................... 1302
第五十四章 platform 设备驱动实验 ..................................................................... 1303
54.1 Linux 驱动的分离与分层 ............................................................................. 1304
54.1.1 驱动的分隔与分离 ................................................................................... 1304
54.1.2 驱动的分层 ............................................................................................... 1306
54.2 platform 平台驱动模型简介 ........................................................................ 1306
54.2.1 platform 总线 ............................................................................................. 1306
54.2.2 platform 驱动 ............................................................................................. 1308
54.2.3 platform 设备 ............................................................................................. 1313
54.3 硬件原理图分析 .......................................................................................... 1316
54.4 试验程序编写 .............................................................................................. 1316
54.4.1 platform 设备与驱动程序编写 ................................................................. 1316
54.4.2 测试 APP 编写 .......................................................................................... 1326
54.5 运行测试 ...................................................................................................... 1327
54.5.1 编译驱动程序和测试 APP ....................................................................... 1327
54.4.2 运行测试 ................................................................................................... 1328
第五十五章 设备树下的 platform 驱动编写 ........................................................ 1330
55.1 设备树下的 platform 驱动简介 .................................................................. 1331
55.2 硬件原理图分析 .......................................................................................... 1332
55.3 实验程序编写 .............................................................................................. 1332
55.3.1 修改设备树文件 ....................................................................................... 1332
55.3.2 platform 驱动程序编写 ............................................................................. 1332
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
32
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
55.3.3 编写测试 APP ........................................................................................... 1338
55.4 运行测试 ...................................................................................................... 1338
55.4.1 编译驱动程序和测试 APP ....................................................................... 1338
55.4.2 运行测试 ................................................................................................... 1339
第五十六章 Linux 自带的 LED 灯驱动实验 ........................................................ 1340
56.1 Linux 内核自带 LED 驱动使能 ................................................................... 1341
56.2 Linux 内核自带 LED 驱动简介 ................................................................... 1342
56.2.1 LED 灯驱动框架分析 ............................................................................... 1342
56.2.2 module_platform_driver 函数简析 ............................................................ 1343
56.2.3 gpio_led_probe 函数简析 .......................................................................... 1344
56.3 设备树节点编写 .......................................................................................... 1347
56.4 运行测试 ...................................................................................................... 1347
第五十七章 Linux MISC 驱动实验 ....................................................................... 1349
57.1 MISC 设备驱动简介 .................................................................................... 1350
57.2 硬件原理图分析 .......................................................................................... 1351
57.3 实验程序编写 .............................................................................................. 1351
57.3.1 修改设备树 ............................................................................................... 1351
57.3.2 beep 驱动程序编写 .................................................................................... 1351
57.3.3 编写测试 APP ........................................................................................... 1357
57.4 运行测试 ...................................................................................................... 1358
57.4.1 编译驱动程序和测试 APP ....................................................................... 1358
57.4.2 运行测试 ................................................................................................... 1359
第五十八章 Linux INPUT 子系统实验 ................................................................. 1360
58.1 input 子系统 .................................................................................................. 1361
58.1.1 input 子系统简 ........................................................................................... 1361
58.1.2 input 驱动编写流程 ................................................................................... 1361
58.1.3 input_event 结构体 .................................................................................... 1367
58.2 硬件原理图分析 .......................................................................................... 1368
58.3 实验程序编写 .............................................................................................. 1368
58.3.1 修改设备树文件 ....................................................................................... 1368
58.3.2 按键 input 驱动程序编写 ......................................................................... 1368
58.3.3 编写测试 APP ........................................................................................... 1374
58.4 运行测试 ...................................................................................................... 1376
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
33
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
58.4.1 编译驱动程序和测试 APP ....................................................................... 1376
58.4.2 运行测试 ................................................................................................... 1377
58.5 Linux 自带按键驱动程序的使用 ................................................................. 1378
58.5.1 自带按键驱动程序源码简析 ................................................................... 1378
58.5.2 自带按键驱动程序的使用 ....................................................................... 1384
第五十九章 Linux LCD 驱动实验 ......................................................................... 1386
59.1 Linux 下 LCD 驱动简析 ............................................................................... 1387
59.1.1 Framebuffer 设备 ....................................................................................... 1387
59.1.2 LCD 驱动简析 ........................................................................................... 1388
59.2 硬件原理图分析 .......................................................................................... 1393
59.3 LCD 驱动程序编写 ...................................................................................... 1394
59.4 运行测试 ...................................................................................................... 1399
59.4.1 LCD 屏幕基本测试 ................................................................................... 1399
59.4.2 设置 LCD 作为终端控制台 ..................................................................... 1400
59.4.3 LCD 背光调节 ........................................................................................... 1401
59.4.4 LCD 自动关闭解决方法 ........................................................................... 1402
第六十章 Linux RTC 驱动实验 ............................................................................. 1404
60.1 Linux 内核 RTC 驱动简介 ........................................................................... 1405
60.2 I.MX6U 内部 RTC 驱动分析 ....................................................................... 1409
60.3 RTC 时间查看与设置 ................................................................................... 1414
第六十一章 Linux I2C 驱动实验 ........................................................................... 1417
61.1 Linux I2C 驱动框架简介 .............................................................................. 1418
61.1.1 I2C 总线驱动 ............................................................................................. 1418
61.1.2 I2C 设备驱动 ............................................................................................. 1419
61.1.3 I2C 设备和驱动匹配过程 ......................................................................... 1423
61.2 I.MX6U 的 I2C 适配器驱动分析 ................................................................ 1424
61.3 I2C 设备驱动编写流程 ................................................................................ 1430
61.3.1 I2C 设备信息描述 ..................................................................................... 1431
61.3.2 I2C 设备数据收发处理流程 ..................................................................... 1432
61.4 硬件原理图分析 .......................................................................................... 1435
61.5 实验程序编写 .............................................................................................. 1435
61.5.1 修改设备树 ............................................................................................... 1435
61.5.2 AP3216C 驱动编写 .................................................................................... 1437
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
34
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
61.5.3 编写测试 APP ........................................................................................... 1447
61.6 运行测试 ...................................................................................................... 1449
61.6.1 编译驱动程序和测试 APP ....................................................................... 1449
61.6.2 运行测试 ................................................................................................... 1449
第六十二章 Linux SPI 驱动实验 ........................................................................... 1451
62.1 Linux 下 SPI 驱动框架简介 ......................................................................... 1452
62.1.1 SPI 主机驱动 ............................................................................................. 1452
62.1.2 SPI 设备驱动 ............................................................................................. 1454
62.1.3 SPI 设备和驱动匹配过程 ......................................................................... 1456
62.2 I.MX6U SPI 主机驱动分析 .......................................................................... 1457
62.3 SPI 设备驱动编写流程 ................................................................................ 1459
62.3.1 SPI 设备信息描述 ..................................................................................... 1459
62.3.2 SPI 设备数据收发处理流程 ..................................................................... 1460
62.4 硬件原理图分析 .......................................................................................... 1464
62.5 试验程序编写 .............................................................................................. 1464
62.5.1 修改设备树 ............................................................................................... 1464
62.5.2 编写 ICM20608 驱动 ................................................................................ 1465
62.5.3 编写测试 APP ........................................................................................... 1476
62.6 运行测试 ...................................................................................................... 1479
62.6.1 编译驱动程序和测试 APP ....................................................................... 1479
62.6.2 运行测试 ................................................................................................... 1480
第六十三章 Linux RS232/485/GPS 驱动实验 ...................................................... 1481
63.1 Linux 下 UART 驱动框架 ............................................................................ 1482
63.2 I.MX6U UART 驱动分析 ............................................................................. 1485
63.3 硬件原理图分析 .......................................................................................... 1491
63.4 RS232 驱动编写 ........................................................................................... 1492
63.5 移植 minicom ............................................................................................... 1494
63.6 RS232 驱动测试 ........................................................................................... 1497
63.6.1 RS232 连接设置 ........................................................................................ 1497
63.6.2 minicom 设置 ............................................................................................. 1498
63.6.3 RS232 收发测试 ........................................................................................ 1500
63.7 RS485 测试 ................................................................................................... 1502
63.7.1 RS485 连接设置 ........................................................................................ 1502
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
35
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
63.7.2 RS485 收发测试 ........................................................................................ 1503
63.8 GPS 测试 ....................................................................................................... 1504
63.8.1 GPS 连接设置 ............................................................................................ 1504
63.8.2 GPS 数据接收测试 .................................................................................... 1505
第六十四章 Linux 多点电容触摸屏实验 ............................................................. 1507
64.1 Linux 下电容触摸屏驱动框架简介 ............................................................. 1508
64.1.1 多点触摸(MT)协议详解 .......................................................................... 1508
64.1.2 Type A 触摸点信息上报时序 .................................................................... 1509
64.1.3 Type B 触摸点信息上报时序 .................................................................... 1511
64.1.4 MT 其他事件的使用 ................................................................................. 1513
64.1.5 多点触摸所使用到的 API 函数 ............................................................... 1513
64.1.6 多点电容触摸驱动框架 ........................................................................... 1515
64.2 硬件原理图分析 .......................................................................................... 1519
64.3 试验程序编写 .............................................................................................. 1519
64.3.1 修改设备树 ............................................................................................... 1520
64.3.2 编写多点电容触摸驱动 ........................................................................... 1521
64.4 运行测试 ...................................................................................................... 1531
64.4.1 编译驱动程序 ........................................................................................... 1531
64.4.2 运行测试 ................................................................................................... 1532
64.4.3 将驱动添加到内核中 ............................................................................... 1533
64.5 tslib 移植与使用 ........................................................................................... 1535
64.5.1 tslib 移植 .................................................................................................... 1535
64.5.2 tslib 测试 .................................................................................................... 1536
64.6 使用内核自带的驱动 .................................................................................. 1538
64.7 4.3 寸屏触摸驱动实验 ................................................................................. 1540
第六十五章 Linux 音频驱动实验 ......................................................................... 1544
65.1 音频接口简介 .............................................................................................. 1545
65.1.1 为何需要音频编解码芯片? ................................................................... 1545
65.1.2 WM8960 简介 ............................................................................................ 1545
65.1.3 I2S 总线接口 .............................................................................................. 1547
65.1.4 I.MX6ULL SAI 简介 ................................................................................. 1548
65.2 硬件原理图分析 .......................................................................................... 1549
65.3 音频驱动使能 .............................................................................................. 1550
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
36
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
65.3.1 修改设备树 ............................................................................................... 1550
65.3.2 使能内核的 WM8960 驱动 ...................................................................... 1554
65.4 alsa-lib 和 alsa-utils 移植 .............................................................................. 1556
65.4.1 alsa-lib 移植 ............................................................................................... 1556
65.4.2 alsa-utils 移植 ............................................................................................. 1557
65.5 声卡设置与测试 .......................................................................................... 1558
65.5.1 amixer 使用方法 ........................................................................................ 1558
65.5.2 音乐播放测试 ........................................................................................... 1561
65.5.3 MIC 录音测试 ............................................................................................ 1561
65.5.4 LINE IN 录音测试 ..................................................................................... 1565
65.6 开机自动配置声卡 ...................................................................................... 1567
65.7 mplayer 播放器移植与使用 ......................................................................... 1568
65.7.1 mplayer 移植 .............................................................................................. 1568
65.7.2 mplayer 使用 .............................................................................................. 1569
65.8 alsamixer 简介 ............................................................................................... 1571
第六十六章 Linux CAN 驱动实验 ........................................................................ 1572
66.1 CAN 协议简析 .............................................................................................. 1573
66.1.1 何为 CAN? .............................................................................................. 1573
66.1.2 CAN 电气属性 ........................................................................................... 1574
66.1.3 CAN 协议 ................................................................................................... 1575
66.1.4 CAN 速率 ................................................................................................... 1581
66.1.5 I.MX6ULL FlexCAN 简介 ........................................................................ 1583
66.2 硬件原理图分析 .......................................................................................... 1585
66.3 实验程序编写 .............................................................................................. 1585
66.3.1 修改设备树 ............................................................................................... 1585
66.3.2 使能 Linux 内核自带的 FlexCAN 驱动 .................................................. 1587
66.4 FlexCAN 测试 ............................................................................................... 1588
66.4.1 检查 CAN 网卡设备是否存在 ................................................................. 1588
66.4.2 移植 iproute2 ............................................................................................. 1589
66.4.3 移植 can-utils 工具 ................................................................................... 1591
66.4.4 CAN 通信测试 ........................................................................................... 1591
第六十七章 Linux USB 驱动实验 ......................................................................... 1595
67.1 USB 接口简介 .............................................................................................. 1596
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
37
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
67.1.1 什么是 USB? .......................................................................................... 1596
67.1.2 USB 电气特性 ........................................................................................... 1597
67.1.3 USB 拓扑结构 ........................................................................................... 1598
67.1.4 什么是 USB OTG? ................................................................................. 1599
67.1.5 I.MX6ULL USB 接口简介 ........................................................................ 1600
67.2 硬件原理图分析 .......................................................................................... 1601
67.2.1 USB HUB 原理图分析 .............................................................................. 1601
67.2.2 USB OTG 原理图分析 .............................................................................. 1602
67.3 USB 协议简析 .............................................................................................. 1603
67.3.1 USB 描述符 ............................................................................................... 1603
67.3.3 USB 数据包类型 ....................................................................................... 1606
67.3.4 USB 传输类型 ........................................................................................... 1608
67.3.5 USB 枚举 ................................................................................................... 1609
67.4 Linux 内核自带 HOST 实验 ........................................................................ 1609
67.4.1 USB 鼠标键盘测试 ................................................................................... 1609
67.4.2 U 盘实验 .................................................................................................... 1612
67.5 Linux 内核自带 USB OTG 实验 .................................................................. 1614
67.5.1 修改设备树 ............................................................................................... 1614
67.5.2 OTG 主机实验 ........................................................................................... 1615
67.5.3 OTG 从机实验 ........................................................................................... 1615
第六十八章 Linux 块设备驱动实验 ..................................................................... 1620
68.1 什么是块设备? .......................................................................................... 1621
68.2 块设备驱动框架 .......................................................................................... 1621
68.2.1 block_device 结构体 .................................................................................. 1621
68.2.2 gendisk 结构体 ........................................................................................... 1623
68.2.3 block_device_operations 结构体 ............................................................... 1625
68.2.4 块设备 I/O 请求过程 ................................................................................ 1626
68.3 使用请求队列实验 ...................................................................................... 1632
68.3.1 实验程序编写 ........................................................................................... 1632
68.3.2 运行测试 ................................................................................................... 1638
68.4 不使用请求队列实验 .................................................................................. 1639
68.4.1 实验程序编写 ........................................................................................... 1639
68.4.2 运行测试 ................................................................................................... 1641
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
38
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
第六十九章 Linux 网络驱动实验 ......................................................................... 1643
69.1 嵌入式网络简介 .......................................................................................... 1644
69.1.1 嵌入式下的网络硬件接口 ........................................................................ 1644
69.1.2 MII/RMII 接口 ........................................................................................... 1645
69.1.3 MDIO 接口 ................................................................................................ 1647
69.1.4 RJ45 接口 ................................................................................................... 1647
69.1.5 I.MX6ULL ENET 接口简介...................................................................... 1648
69.2 PHY 芯片详解 .............................................................................................. 1649
69.2.1 PHY 基础知识简介 ................................................................................... 1649
69.2.2 LAN8720A 详解 ........................................................................................ 1650
69.3 Linux 内核网络驱动框架 ............................................................................. 1656
69.3.1 net_device 结构体 ...................................................................................... 1656
69.3.2 net_device_ops 结构体 .............................................................................. 1662
69.3.3 sk_buff 结构体 ........................................................................................... 1664
69.3.4 网络 NAPI 处理机制 ................................................................................ 1669
69.4 I.MX6ULL 网络驱动简介 ............................................................................ 1671
69.4.1 I.MX6ULL 网络外设设备树 ..................................................................... 1671
69.4.2 I.MX6ULL 网络驱动源码简析 ................................................................. 1675
69.4.3 fec_netdev_ops 操作集 .............................................................................. 1688
69.4.3 Linux 内核 PHY 子系统与 MDIO 总线简析 ........................................... 1693
69.5 网络驱动实验测试 ...................................................................................... 1702
69.5.1 LAN8720 PHY 驱动测试 .......................................................................... 1702
69.5.2 通用 PHY 驱动测试 ................................................................................. 1702
69.5.3 DHCP 功能配置 ........................................................................................ 1703
69.6 单网卡使用 .................................................................................................. 1703
69.6.1 只使用 ENET2 网卡 ................................................................................. 1704
69.6.2 只使用 ENET1 网卡 ................................................................................. 1705
第七十章 Linux WIFI 驱动实验 ............................................................................ 1708
70.1 WIFI 驱动添加与编译 .................................................................................. 1709
70.1.1 向 Linux 内核添加 WIFI 驱动 ................................................................. 1709
70.1.2 配置 Linux 内核 ........................................................................................ 1712
70.1.3 编译 WIFI 驱动 ........................................................................................ 1713
70.1.4 驱动加载测试 ........................................................................................... 1715
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
39
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
70.2 wireless tools 工具移植与测试 .................................................................... 1718
70.2.1 wireless tools 移植 ..................................................................................... 1718
70.2.2 wireless tools 工具测试 ............................................................................. 1718
70.3 wpa_supplicant 移植 ..................................................................................... 1720
70.3.1 openssl 移植 ............................................................................................... 1720
70.3.2 libnl 库移植 ................................................................................................ 1720
70.3.3 wpa_supplicant 移植 .................................................................................. 1721
70.4 WIFI 联网测试 .............................................................................................. 1723
70.4.1 RTL8188 USB WIFI 联网测试 ................................................................. 1723
70.4.2 RTL8189 SDIO WIFI 联网测试 ................................................................ 1725
第七十一章 Linux 4G 通信实验 ............................................................................ 1727
71.1 4G 网络连接简介 ......................................................................................... 1728
71.2 高新兴 ME3630 4G 模块实验 .................................................................... 1730
71.2.1 ME3630 4G 模块简介 ............................................................................... 1730
71.2.2 ME3630 4G 模块驱动修改 ....................................................................... 1731
71.2.3 ME3630 4G 模块 ppp 联网测试 ............................................................... 1734
71.2.4 ME3630 4G 模块 ECM 联网测试 ............................................................. 1739
71.2.5 ME3630 4G 模块 GNSS 定位测试 ........................................................... 1740
71.3 EC20 4G 模块实验 ....................................................................................... 1742
71.3.1 EC20 4G 模块简介 .................................................................................... 1742
71.3.2 EC20 4G 模块驱动修改 ............................................................................ 1743
71.3.3 quectel-CM 移植 ........................................................................................ 1748
71.3.4 EC20 上网测试 .......................................................................................... 1748
第七十二章 RGB 转 HDMI 实验 .......................................................................... 1750
72.1 RGB 转 HMDI 简介 ..................................................................................... 1751
72.2 硬件原理图分析 .......................................................................................... 1751
72.3 实验驱动编写 .............................................................................................. 1752
72.3.1 修改设备树 ............................................................................................... 1752
72.3.2 使能内核自带的 sii902x 驱动 ................................................................. 1755
72.3.3 修改 sii902x 驱动 ..................................................................................... 1755
72.4 RGB 转 HDMI 测试 ..................................................................................... 1756
第七十三章 Linux PWM 驱动实验 ....................................................................... 1758
73.1 PWM 驱动简析 ............................................................................................. 1759
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
40
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
73.1.1 设备树下的 PWM 控制器节点 ................................................................ 1759
73.1.2 PWM 子系统 .............................................................................................. 1759
73.1.3 PWM 驱动源码分析 .................................................................................. 1760
73.2 PWM 驱动编写 ............................................................................................. 1764
73.2.1 修改设备树 ............................................................................................... 1764
73.2.2 使能 PWM 驱动 ........................................................................................ 1766
73.3 PWM 驱动测试 ............................................................................................. 1766
73.4 PWM 背光设置 ............................................................................................. 1768
第七十四章 Regmap API 实验 ............................................................................... 1769
74.1 Regmap API 简介 .......................................................................................... 1770
74.1.1 什么是 Regmap ......................................................................................... 1770
74.1.2 Regmap 驱动框架 ...................................................................................... 1770
74.1.3 Regmap 操作函数 ...................................................................................... 1774
74.1.4 regmap_config 掩码设置 ........................................................................... 1776
74.2 实验程序编写 .............................................................................................. 1778
74.3 运行测试 ...................................................................................................... 1782
第七十五章 Linux IIO 驱动实验 ........................................................................... 1783
75.1 IIO 子系统简介 ............................................................................................. 1784
75.1.1 iio_dev ........................................................................................................ 1784
75.1.2 iio_info ....................................................................................................... 1787
75.1.3 iio_chan_spec ............................................................................................. 1788
75.2 IIO 驱动框架创建 ......................................................................................... 1792
75.2.1 基础驱动框架建立 ................................................................................... 1792
75.2.2 IIO 设备申请与初始化 .............................................................................. 1794
75.3 实验程序编写 .............................................................................................. 1797
75.3.1 使能内核 IIO 相关配置 ............................................................................ 1797
75.3.2 ICM20608 的 IIO 驱动框架搭建 .............................................................. 1798
75.3.3 完善 icm20608_read_raw 函数 ................................................................ 1811
75.3.4 完善 icm20608_write_raw 函数 ............................................................... 1817
75.4 测试应用程序编写 ...................................................................................... 1821
75.4.1 linux 文件流读取 ....................................................................................... 1821
75.4.2 编写测试 APP ........................................................................................... 1823
75.4.3 运行测试 ................................................................................................... 1829
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
41
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
第七十六章 Linux ADC 驱动实验 ........................................................................ 1830
76.1 ADC 简介 ...................................................................................................... 1831
76.2 ADC 驱动源码简析 ...................................................................................... 1831
76.2.1 设备树下的 ADC 节点 ............................................................................. 1831
76.2.2 ADC 驱动源码分析 ................................................................................... 1831
76.3 硬件原理图分析 .......................................................................................... 1837
76.4 ADC 驱动编写 .............................................................................................. 1838
76.4.1 修改设备树 ............................................................................................... 1838
76.4.2 使能 ADC 驱动 ......................................................................................... 1839
76.4.3 编写测试 APP ........................................................................................... 1840
76.5 运行测试 ...................................................................................................... 1843
76.5.1 编译驱动程序和测试 APP ....................................................................... 1843
76.5.2 运行测试 ................................................................................................... 1844
附录 A 其他根文件系统构建 ................................................................................ 1845
第 A1 章 Buildroot 根文件系统构建 ..................................................................... 1846
A1.1 何为 buildroot? .......................................................................................... 1847
A1.1.1 buildroot 简介 ............................................................................................ 1847
A1.1.2 buildroot 下载 ............................................................................................ 1847
A1.2 buildroot 构建根文件系统 ........................................................................... 1848
A1.2.1 配置 buildroot ........................................................................................... 1848
A1.2.2 编译 buildroot ........................................................................................... 1853
A1.2.3 buildroot 根文件系统测试 ........................................................................ 1854
A1.3 buildroot 第三方软件和库的配置 ............................................................... 1854
A1.4 buildroot 下的 busybox 配置 ....................................................................... 1856
A1.4.1 busybox 配置 ............................................................................................. 1856
A1.4.2 busybox 中文字符的支持 ......................................................................... 1857
A1.4.3 编译 busybox ............................................................................................ 1857
A1.5 根文件系统测试 ......................................................................................... 1858
第 A2 章 Yocto 根文件系统构建 ........................................................................... 1860
第 A3 章 Ubuntu-base 根文件系统构建 ................................................................ 1861
A3.1 ubuntu-base 获取 .......................................................................................... 1862
A3.2 ubuntu 根文件系统构建 .............................................................................. 1864
A3.2.1 解压缩 ubuntu base 根文件系统 ............................................................. 1864
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
42
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
A3.2.2 安装 qemu ................................................................................................ 1864
A3.2.3 设置软件源 .............................................................................................. 1865
A3.2.4 在主机挂载并配置根文件系统 .............................................................. 1865
A3.3 ubuntu 根文件系统测试 .............................................................................. 1867
A3.3.1 nfs 挂载测试 ............................................................................................. 1867
A3.3.2 ubuntu 根文件系统烧写 ........................................................................... 1868
A3.4 ubuntu 系统使用 .......................................................................................... 1869
A3.4.1 添加新用户 .............................................................................................. 1869
A3.4.2 网络 DHCP 配置 ...................................................................................... 1870
A3.4.3 安装软件 .................................................................................................. 1870
A3.4.4 FTP 服务器搭建 ....................................................................................... 1870
A3.4.5 gcc 和 make 工具安装 .............................................................................. 1872
附录 B 其他第三方软件移植 ................................................................................ 1874
第 B1 章 开发板 FTP 服务器移植与搭建 ............................................................. 1875
B1.1 vsftpd 源码下载 ........................................................................................... 1876
B1.2 vsftpd 移植 ................................................................................................... 1877
B1.3 vsftpd 服务器测试 ....................................................................................... 1877
B1.3.1 配置 vsftpd ............................................................................................... 1877
B1.3.2 添加新用户 .............................................................................................. 1878
B1.3.3 Filezilla 连接测试 ..................................................................................... 1879
第 B2 章节 开发板 OpenSSH 移植与使用 ........................................................... 1882
B2.1 OpenSSH 简介 ............................................................................................. 1883
B2.2 OpenSSH 移植 ............................................................................................. 1883
B2.2.1 OpenSSH 源码获取 .................................................................................. 1883
B2.2.2 移植 zlib 库 .............................................................................................. 1883
B2.2.3 移植 openssl 库 ........................................................................................ 1883
B2.2.4 移植 openssh 库 ........................................................................................ 1883
B2.3 openssh 设置 ................................................................................................. 1885
B2.4 openssh 使用 ................................................................................................. 1885
B2.4.1 ssh 登录 ..................................................................................................... 1885
B2.4.2 scp 命令拷贝文件 ..................................................................................... 1887
第 B3 章节 嵌入式 GDB 调试搭建与使用 ........................................................... 1889
B3.1 GDB 简介 ..................................................................................................... 1890
: 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
43
I I .MX6U 嵌入式 L Lx inux 驱动 开发指南
B3.2 GDB 移植 ..................................................................................................... 1890
B3.2.1 获取 gdb 和 gdbserver 源码 ..................................................................... 1890
B3.2.2 编译 gdb ................................................................................................... 1890
B3.2.3 移植 gdbserver .......................................................................................... 1892
B3.3 使用 GDB 进行嵌入式程序调试 ............................................................... 1893
B3.3.1 编写一个测试应用 .................................................................................. 1893
B3.3.2 GDB 调试程序 .......................................................................................... 1894
第 B4 章节 VSCode gdbserver 图形化调试 ......................................................... 1897
B4.1 VSCode 设置 ................................................................................................ 1898
B4.2 VSCode 调试方法 ........................................................................................ 1899
附录 C 裸机例程补充 ............................................................................................ 1902
第 C1 章 ADC 实验 ................................................................................................ 1903
C1.1 ADC 简介 ..................................................................................................... 1904
C1.1.1 什么是 ADC ............................................................................................. 1904
C1.1.2 I.MX6ULL ADC 简介 ............................................................................... 1904
C1.2 硬件原理分析 ............................................................................................. 1908
C1.3 实验程序编写 ............................................................................................. 1909
C1.4 编译下载验证 ............................................................................................. 1915
C1.4.1 编写 Makefile 和链接脚本 ...................................................................... 1915
C1.4.2 编译下载 .................................................................................................. 1915
评论