在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → I.MX6U嵌入式Linux驱动开发指南.pdf

I.MX6U嵌入式Linux驱动开发指南.pdf

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:94.29M
  • 下载次数:70
  • 浏览次数:1208
  • 发布时间:2020-12-01
  • 实例类别:一般编程问题
  • 发 布 人:steven320
  • 文件格式:.pdf
  • 所需积分:2

实例介绍

【实例简介】
【实例截图】

【核心代码】

目录
ALPHA/Mini 开发板教程适配表.................................................................................5
前言..............................................................................................................................41
第一篇 Ubuntu 系统入门篇.......................................................................................43
第一章 Ubuntu 系统安装...........................................................................................44
1.1 安装虚拟机软件 VMware ................................................................................. 45
1.2 创建虚拟机........................................................................................................ 51
1.3 安装 Ubuntu 操作系统...................................................................................... 62
1.3.1 获取 Ubuntu 系统........................................................................................... 62
1.3.2 安装 Ubuntu 操作系统................................................................................... 63
1.3.3 弹出系统镜像................................................................................................. 75
第二章 Ubuntu 系统入门...........................................................................................77
2.1 Ubuntu 系统初体验............................................................................................ 78
2.1.1 Hello Ubuntu .................................................................................................... 78
2.1.2 系统设置......................................................................................................... 80
2.1.3 系统注销与关机............................................................................................. 83
2.1.4 中文输入测试................................................................................................. 83
2.2 Ubuntu 终端操作................................................................................................ 86
2.3 Shell 操作............................................................................................................ 87
2.3.1 Shell 简介......................................................................................................... 87
2.3.2 Shell 基本操作................................................................................................. 87
2.2.4 常用 Shell 命令............................................................................................... 89
2.4 APT 下载工具..................................................................................................... 96
2.5 Ubuntu 下文本编辑............................................................................................ 99
2.5.1 Gedit 编辑器 .................................................................................................... 99
2.5.2 VI/VIM 编辑器.............................................................................................. 100
2.6 Linux 文件系统................................................................................................. 105
2.6.1 Linux 文件系统简介以及类型...................................................................... 105
2.6.2 Linux 文件系统结构...................................................................................... 107
2.6.2 文件操作命令............................................................................................... 110
2.6.3 文件压缩和解压缩....................................................................................... 114
2.6.4 文件查询和搜索........................................................................................... 120
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
9
I.MX6U 嵌入式 Linux 驱动开发指南
2.6.5 文件类型....................................................................................................... 121
2.7 Linux 用户权限管理......................................................................................... 122
2.7.1 Ubuntu 用户系统........................................................................................ 122
2.7.2 权限管理....................................................................................................... 122
2.7.3 权限管理命令............................................................................................... 125
2.8 Linux 磁盘管理................................................................................................. 127
2.8.1 Linux 磁盘管理基本概念.............................................................................. 127
2.8.2 磁盘管理命令............................................................................................... 128
第三章 Linux C 编程入门........................................................................................132
3.1 Hello World! ................................................................................................... 133
3.1.1 编写代码....................................................................................................... 133
3.1.2 编译代码....................................................................................................... 134
3.2 GCC 编译器...................................................................................................... 136
3.2.1 gcc 命令.......................................................................................................... 136
3.2.2 编译错误警告............................................................................................... 136
3.2.3 编译流程....................................................................................................... 137
3.3 Makefile 基础.................................................................................................... 137
3.3.1 何为 Makefile................................................................................................ 137
3.3.2 Makefile 的引入............................................................................................. 138
3.4 Makefile 语法.................................................................................................... 141
3.4.1 Makefile 规则格式......................................................................................... 141
3.4.2 Makefile 变量................................................................................................. 143
3.4.3 Makefile 模式规则......................................................................................... 145
3.4.4 Makefile 自动化变量..................................................................................... 146
3.4.5 Makefile 伪目标............................................................................................. 147
3.4.6 Makefile 条件判断......................................................................................... 148
3.4.7 Makefile 函数使用......................................................................................... 148
第二篇 裸机开发篇..................................................................................................151
第四章 开发环境搭建..............................................................................................152
4.1 Ubuntu 和 Windows 文件互传......................................................................... 153
4.2 Ubuntu 下 NFS 和 SSH 服务开启 ................................................................... 159
4.2.1 NFS 服务开启................................................................................................ 159
4.2.2 SSH 服务开启................................................................................................ 160
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
10
I.MX6U 嵌入式 Linux 驱动开发指南
4.3 Ubuntu 交叉编译工具链安装.......................................................................... 160
4.3.1 交叉编译器安装........................................................................................... 160
4.3.2 安装相关库................................................................................................... 164
4.3.3 交叉编译器验证........................................................................................... 164
4.4 Source Insight 软件安装和使用....................................................................... 166
4.4.1 Source Insight 安装........................................................................................ 166
4.4.2 Source Insight 新建工程................................................................................ 172
4.4.3 Source Insight 解决中文乱码........................................................................ 180
4.5 Visual Studio Code 软件的安装和使用........................................................... 182
4.5.1 Visual Studio Code 的安装............................................................................ 182
4.5.2 Visual Studio Code 插件的安装.................................................................... 186
4.5.3 Visual Studio Code 新建工程........................................................................ 189
4.6 CH340 串口驱动安装....................................................................................... 195
4.7 SecureCRT 软件安装和使用............................................................................ 198
4.7.1 SecureCRT 安装............................................................................................. 198
4.7.2 SecureCRT 使用............................................................................................. 203
4.8 Putty 软件的安装和使用.................................................................................. 208
4.8.1 Putty 软件安装............................................................................................... 208
4.8.2 Putty 软件使用............................................................................................... 211
4.9 MobaXterm 软件安装和使用........................................................................... 214
4.9.1 MobaXterm 软件安装.................................................................................... 214
4.9.2 MobaXterm 软件使用.................................................................................... 215
第五章 I.MX6U-ALPHA/Mini 开发平台介绍........................................................219
5.1 正点原子 I.MX6U-ALPHA/Mini 开发板资源初探....................................... 220
5.1.1 I.MX6U-ALPHA 开发板底板资源............................................................... 220
5.1.2 I.MX6U-Mini 开发板底板资源 .................................................................... 221
5.1.3 I.MX6U 核心板资源 ..................................................................................... 223
5.2 正点原子 I.MX6U-ALPHA/Mini 开发板资源说明....................................... 224
5.2.1 I.MX6U-ALPHA 硬件资源说明................................................................... 224
5.2.2 I.MX6U-ALPHA 软件资源说明................................................................... 228
5.2.3 I.MX6U-Mini 硬件资源说明 ........................................................................ 230
5.2.4 I.MX6U-Mini 软件资源说明 ........................................................................ 232
5.2.5 I.MX6ULL 核心板硬件资源说明................................................................. 232
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
11
I.MX6U 嵌入式 Linux 驱动开发指南
5.3 I.MX6U-ALPHA 开发板底板原理图详解...................................................... 233
5.3.1 核心板接口................................................................................................... 233
5.3.2 引出 IO 口..................................................................................................... 235
5.3.3 USB 串口/串口 1 选择接口 .......................................................................... 235
5.3.4 RGB LCD 模块接口...................................................................................... 236
5.3.5 复位电路....................................................................................................... 237
5.3.6 启动模式设置接口....................................................................................... 237
5.3.7 VBAT 供电接口............................................................................................. 238
5.3.8 RS232 串口 .................................................................................................... 238
5.3.9 RS485 接口 .................................................................................................... 239
5.3.10 CAN 接口..................................................................................................... 239
5.3.11 USB HUB 接口............................................................................................ 240
5.3.12 USB OTG 接口............................................................................................ 241
5.3.13 光环境传感器............................................................................................. 241
5.3.14 六轴传感器................................................................................................. 241
5.3.15 LED .............................................................................................................. 242
5.3.16 按键............................................................................................................. 242
5.3.17 摄像头模块接口......................................................................................... 243
5.3.18 有源蜂鸣器................................................................................................. 243
5.3.19 TF 卡接口..................................................................................................... 244
5.3.20 SDIO WIFI 接口 .......................................................................................... 244
5.3.21 4G 模块接口 ................................................................................................ 245
5.3.22 ATK 模块接口.............................................................................................. 246
5.3.23 以太网接口(RJ45)................................................................................. 247
5.3.24 SAI 音频编解码器....................................................................................... 249
5.3.25 电源............................................................................................................. 250
5.3.26 电源输入输出接口..................................................................................... 251
5.3.27 USB 串口 ..................................................................................................... 251
5.4 I.MX6U-Mini 开发板底板原理图详解 ........................................................... 252
5.4.1 核心板接口................................................................................................... 252
5.4.2 引出 IO 口..................................................................................................... 254
5.4.3 USB 串口 ....................................................................................................... 254
5.4.4 RGB LCD 模块接口...................................................................................... 255
5.4.5 复位电路....................................................................................................... 256
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
12
I.MX6U 嵌入式 Linux 驱动开发指南
5.4.6 启动模式设置接口....................................................................................... 256
5.4.7 VBAT 供电接口............................................................................................. 257
5.4.8 RS485 接口 .................................................................................................... 257
5.4.9 CAN 接口....................................................................................................... 258
5.4.10 USB HOST 接口.......................................................................................... 258
5.4.11 USB OTG 接口 ............................................................................................ 258
5.4.12 LED .............................................................................................................. 259
5.4.13 按键............................................................................................................. 259
5.4.14 摄像头模块接口......................................................................................... 260
5.4.15 有源蜂鸣器................................................................................................. 260
5.4.16 TF 卡接口..................................................................................................... 261
5.4.17 SDIO WIFI 接口 .......................................................................................... 261
5.4.18 ATK 模块接口.............................................................................................. 261
5.4.19 以太网接口(RJ45)................................................................................. 262
5.4.20 电源............................................................................................................. 263
5.4.21 电源输入输出接口..................................................................................... 263
5.5 I.MX6U 核心板原理图详解 ............................................................................ 263
5.5.1 SOC ................................................................................................................ 263
5.5.2 BTB 接口 ....................................................................................................... 267
5.5.3 NAND FLASH............................................................................................... 269
5.5.4 EMMC............................................................................................................ 269
5.5.5 DDR3L ........................................................................................................... 270
5.5.6 核心板电源................................................................................................... 271
5.6 开发板使用注意事项...................................................................................... 274
第六章 Cortex-A7 MPCore 架构 .............................................................................275
6.1 Cortex-A7 MPCore 简介 .................................................................................. 276
6.2 Cortex-A 处理器运行模型............................................................................... 277
6.3 Cortex-A 寄存器组........................................................................................... 277
6.3.1 通用寄存器................................................................................................... 279
6.3.2 程序状态寄存器........................................................................................... 280
第七章 ARM 汇编基础............................................................................................282
7.1 GNU 汇编语法 ................................................................................................. 283
7.2 Cortex-A7 常用汇编指令................................................................................. 285
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
13
I.MX6U 嵌入式 Linux 驱动开发指南
7.2.1 处理器内部数据传输指令........................................................................... 285
7.2.2 存储器访问指令........................................................................................... 285
7.2.3 压栈和出栈指令........................................................................................... 286
7.2.4 跳转指令....................................................................................................... 288
7.2.5 算术运算指令............................................................................................... 289
7.2.6 逻辑运算指令............................................................................................... 289
第八章 汇编 LED 灯实验 ........................................................................................291
8.1 I.MX6U GPIO 详解 .......................................................................................... 292
8.1.1 STM32 GPIO 回顾......................................................................................... 292
8.1.2 I.MX6U IO 命名 ............................................................................................ 292
8.1.3 I.MX6U IO 复用 ............................................................................................ 294
8.1.4 I.MX6U IO 配置 ............................................................................................ 295
8.1.5 I.MX6U GPIO 配置....................................................................................... 298
8.1.6 I.MX6U GPIO 时钟使能............................................................................... 302
8.2 硬件原理分析.................................................................................................. 304
8.3 实验程序编写.................................................................................................. 304
8.4 编译下载验证.................................................................................................. 309
8.4.1 编译代码....................................................................................................... 309
8.4.2 创建 Makefile 文件....................................................................................... 313
8.4.3 代码烧写....................................................................................................... 314
8.4.4 代码验证....................................................................................................... 318
第九章 I.MX6U 启动方式详解 ...............................................................................319
9.1 启动方式选择.................................................................................................. 320
9.1.1 串行下载....................................................................................................... 320
9.1.2 内部 BOOT 模式 .......................................................................................... 321
9.2 BOOT ROM 初始化内容 ................................................................................. 321
9.3 启动设备.......................................................................................................... 321
9.4 镜像烧写.......................................................................................................... 325
9.4.1 IVT 和 Boot Data 数据.................................................................................. 326
9.4.2 DCD 数据....................................................................................................... 328
第十章 C 语言版 LED 灯实验.................................................................................331
10.1 C 语言版 LED 灯简介.................................................................................... 332
10.2 硬件原理分析................................................................................................ 332
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
14
I.MX6U 嵌入式 Linux 驱动开发指南
10.3 实验程序编写................................................................................................ 332
10.3.1 汇编部分实验程序编写............................................................................. 332
10.3.2 C 语言部分实验程序编写 .......................................................................... 334
10.4 编译下载验证................................................................................................ 339
10.4.1 编写 Makefile.............................................................................................. 339
10.4.2 链接脚本..................................................................................................... 340
10.4.3 修改 Makefile.............................................................................................. 342
10.4.4 下载验证..................................................................................................... 342
第十一章 模仿 STM32 驱动开发格式实验............................................................343
11.1 模仿 STM32 寄存器定义.............................................................................. 344
11.1.1 STM32 寄存器定义简介............................................................................. 344
11.1.2 I.MX6U 寄存器定义.................................................................................... 345
11.2 硬件原理分析 ................................................................................................ 346
11.3 实验程序编写 ................................................................................................ 346
11.4 编译下载验证 ................................................................................................ 351
11.4.1 编写 Makefile 和链接脚本......................................................................... 351
11.4.2 编译下载 ..................................................................................................... 352
第十二章 官方 SDK 移植实验................................................................................353
12.1 I.MX6ULL 官方 SDK 包简介........................................................................ 354
12.2 硬件原理图分析............................................................................................ 355
12.3 试验程序编写................................................................................................ 355
12.3.1 SDK 文件移植............................................................................................. 355
12.3.2 创建 cc.h 文件............................................................................................. 355
12.3.3 编写实验代码............................................................................................. 356
12.4 编译下载验证................................................................................................ 362
12.4.1 编写 Makefile 和链接脚本......................................................................... 362
12.4.2 编译下载..................................................................................................... 363
第十三章 BSP 工程管理实验..................................................................................364
13.1 工程管理简介................................................................................................ 365
13.2 硬件原理分析................................................................................................ 365
13.3 实验程序编写................................................................................................ 366
13.3.1 创建 imx6ul.h 文件..................................................................................... 366
13.3.2 编写 led 驱动代码 ...................................................................................... 366
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
15
I.MX6U 嵌入式 Linux 驱动开发指南
13.3.3 编写时钟驱动代码..................................................................................... 368
13.3.4 编写延时驱动代码..................................................................................... 369
13.3.5 修改 main.c 文件 ........................................................................................ 371
13.4 编译下载验证................................................................................................ 372
13.4.1 编写 Makefile 和链接脚本......................................................................... 372
13.4.2 编译下载..................................................................................................... 375
第十四章 蜂鸣器实验..............................................................................................376
14.2 有源蜂鸣器简介............................................................................................ 377
14.3 硬件原理分析................................................................................................ 377
14.3 试验程序编写................................................................................................ 378
14.4 编译下载验证................................................................................................ 380
14.4.1 编写 Makefile 和链接脚本......................................................................... 380
14.4.2 编译下载..................................................................................................... 381
第十五章 按键输入实验..........................................................................................382
15.1 按键输入简介................................................................................................ 383
15.2 硬件原理分析................................................................................................ 383
15.3 实验程序编写................................................................................................ 383
15.4 编译下载验证................................................................................................ 391
15.4.1 编写 Makefile 和链接脚本......................................................................... 391
15.4.2 编译下载..................................................................................................... 392
第十六章 主频和时钟配置实验..............................................................................393
16.1 I.MX6U 时钟系统详解 .................................................................................. 394
16.1.1 系统时钟来源............................................................................................. 394
16.1.2 7 路 PLL 时钟源.......................................................................................... 394
16.1.3 时钟树简介................................................................................................. 396
16.1.4 内核时钟设置............................................................................................. 398
16.1.5 PFD 时钟设置.............................................................................................. 402
16.1.6 AHB、IPG 和 PERCLK 根时钟设置......................................................... 404
16.2 硬件原理分析................................................................................................ 408
16.3 实验程序编写................................................................................................ 408
16.4 编译下载验证................................................................................................ 411
16.4.1 编写 Makefile 和链接脚本......................................................................... 411
16.4.2 编译下载..................................................................................................... 412
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
16
I.MX6U 嵌入式 Linux 驱动开发指南
第十七章 GPIO 中断实验........................................................................................413
17.1 Cortex-A7 中断系统详解............................................................................... 414
17.1.1 STM32 中断系统回顾................................................................................. 414
17.1.2 Cortex-A7 中断系统简介............................................................................ 416
17.1.3 GIC 控制器简介 .......................................................................................... 419
17.1.4 CP15 协处理器 ............................................................................................ 425
17.1.5 中断使能..................................................................................................... 429
17.1.6 中断优先级设置......................................................................................... 429
17.2 硬件原理分析................................................................................................ 431
17.3 试验程序编写................................................................................................ 431
17.3.1 移植 SDK 包中断相关文件....................................................................... 431
17.3.2 重新编写 start.S 文件................................................................................. 431
17.3.3 通用中断驱动文件编写............................................................................. 436
17.3.4 修改 GPIO 驱动文件.................................................................................. 440
17.3.5 按键中断驱动文件编写............................................................................. 445
17.3.6 编写 main.c 文件 ........................................................................................ 448
17.4 编译下载验证................................................................................................ 449
17.4.1 编写 Makefile 和链接脚本......................................................................... 449
17.4.2 编译下载..................................................................................................... 450
第十八章 EPIT 定时器实验.....................................................................................451
18.1 EPIT 定时器简介............................................................................................ 452
18.2 硬件原理分析................................................................................................ 455
18.3 实验程序编写................................................................................................ 455
18.4 编译下载验证................................................................................................ 458
18.4.1 编写 Makefile 和链接脚本......................................................................... 458
18.4.2 编译下载..................................................................................................... 459
第十九章 定时器按键消抖实验..............................................................................460
19.1 定时器按键消抖简介.................................................................................... 461
19.2 硬件原理分析................................................................................................ 462
19.3 试验程序编写................................................................................................ 462
19.4 编译下载验证................................................................................................ 467
19.4.1 编写 Makefile 和链接脚本......................................................................... 467
19.4.2 编译下载..................................................................................................... 468
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
17
I.MX6U 嵌入式 Linux 驱动开发指南
第二十章 高精度延时实验......................................................................................469
20.1 高精度延时简介............................................................................................ 470
20.1.1 GPT 定时器简介.......................................................................................... 470
20.1.2 定时器实现高精度延时原理..................................................................... 473
20.2 硬件原理分析................................................................................................ 474
20.3 实验程序编写................................................................................................ 474
20.4 编译下载验证................................................................................................ 480
20.4.1 编写 Makefile 和链接脚本......................................................................... 480
20.4.2 编译下载..................................................................................................... 480
第二十一章 UART 串 口 通 信 实 验
483
21.1 I.MX6U 串口简介 .......................................................................................... 484
21.1.1 UART 简介................................................................................................... 484
21.1.2 I.MX6U UART 简介.................................................................................... 486
21.2 硬件原理分析................................................................................................ 489
21.3 实验程序编写................................................................................................ 490
21.4 编译下载验证................................................................................................ 499
21.4.1 编写 Makefile 和链接脚本......................................................................... 499
21.4.2 编译下载..................................................................................................... 501
第二十二章 串口格式化函数移植实验..................................................................504
22.1 串口格式化函数简介.................................................................................... 505
22.2 硬件原理分析................................................................................................ 505
22.3 实验程序编写................................................................................................ 505
22.4 编译下载验证................................................................................................ 507
22.4.1 编写 Makefile 和链接脚本......................................................................... 507
22.4.2 编译下载..................................................................................................... 508
第二十三章 DDR3 实验...........................................................................................510
23.1 DDR3 内存简介.............................................................................................. 511
23.1.1 何为 RAM 和 ROM? .................................................................................. 511
23.1.2 SRAM 简介.................................................................................................. 511
23.1.3 SDRAM 简介............................................................................................... 513
23.1.4 DDR 简介..................................................................................................... 516
23.2 DDR3 关键时间参数...................................................................................... 518
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
18
I.MX6U 嵌入式 Linux 驱动开发指南
23.3 I.MX6U MMDC 控制器简介......................................................................... 521
23.3.1 MMDC 控制器 ............................................................................................ 521
23.3.2 MMDC 控制器信号引脚 ............................................................................ 521
23.3.3 MMDC 控制器时钟源 ................................................................................ 522
23.4 ALPHA 开发板 DDR3L 原理图.................................................................... 522
23.5 DDR3L 初始化与测试 ................................................................................... 523
23.5.1 ddr_stress_tester 简介 .................................................................................. 523
23.5.2 DDR3L 驱动配置 ........................................................................................ 524
23.5.3 DDR3L 校准 ................................................................................................ 530
23.5.4 DDR3L 超频测试 ........................................................................................ 534
23.5.5 DDR3L 驱动总结 ........................................................................................ 535
第二十四章 RGBLCD 显示实验.............................................................................538
24.1 LCD 和 eLCDIF 简介..................................................................................... 539
24.1.1 LCD 简介..................................................................................................... 539
24.1.2 eLCDIF 接口................................................................................................ 547
24.2 硬件原理分析................................................................................................ 552
24.3 实验程序编写................................................................................................ 554
24.4 编译下载验证................................................................................................ 575
24.4.1 编写 Makefile 和链接脚本......................................................................... 575
24.4.2 编译下载..................................................................................................... 576
第二十五章 RTC 实时时钟实验..............................................................................577
25.1 I.MX6U RTC 简介.......................................................................................... 578
25.2 硬件原理分析................................................................................................ 580
25.3 实验程序编写................................................................................................ 580
25.3.1 修改文件 MCIMX6Y2.h ............................................................................ 581
25.3.2 编写实验程序............................................................................................. 581
25.4 编译下载验证................................................................................................ 591
25.4.1 编写 Makefile 和链接脚本......................................................................... 591
25.4.2 编译下载..................................................................................................... 592
第二十六章 I2C 实验...............................................................................................594
26.1 I2C & AP3216C 简介 ..................................................................................... 595
26.1.1 I2C 简介....................................................................................................... 595
26.1.2 I.MX6U I2C 简介 ........................................................................................ 597
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
19
I.MX6U 嵌入式 Linux 驱动开发指南
26.1.3 AP3216C 简介.............................................................................................. 600
26.2 硬件原理分析................................................................................................ 601
26.3 实验程序编写................................................................................................ 602
26.4 编译下载验证................................................................................................ 617
26.4.1 编写 Makefile 和链接脚本......................................................................... 617
26.4.2 编译下载..................................................................................................... 618
第二十七章 SPI 实验 ...............................................................................................620
27.1 SPI & ICM-20608 简介 .................................................................................. 621
27.1.1 SPI 简介 ....................................................................................................... 621
27.1.2 I.MX6U ECSPI 简介.................................................................................... 622
27.1.3 ICM-20608 简介 .......................................................................................... 626
27.2 硬件原理分析................................................................................................ 629
27.3 实验程序编写................................................................................................ 629
27.4 编译下载验证................................................................................................ 644
27.4.1 编写 Makefile 和链接脚本......................................................................... 644
27.4.2 编译下载..................................................................................................... 646
第二十八章 多点电容触摸屏实验..........................................................................647
28.1 多点电容触摸简介........................................................................................ 648
28.2 硬件原理分析................................................................................................ 649
28.3 实验程序编写................................................................................................ 650
28.4 编译下载验证................................................................................................ 660
28.4.1 编写 Makefile 和链接脚本......................................................................... 660
28.4.2 编译下载..................................................................................................... 661
第二十九章 LCD 背光调节实验.............................................................................663
29.1 LCD 背光调节简介........................................................................................ 664
29.2 硬件原理分析................................................................................................ 669
29.3 实验程序编写................................................................................................ 669
29.4 编译下载验证................................................................................................ 675
29.4.1 编写 Makefile 和链接脚本......................................................................... 675
29.4.2 编译下载..................................................................................................... 677
第三篇 系统移植篇..................................................................................................679
第三十章 U-Boot 使用实验.....................................................................................680
30.1 U-Boot 简介.................................................................................................... 681
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
20
I.MX6U 嵌入式 Linux 驱动开发指南
30.2 U-Boot 初次编译............................................................................................ 684
30.3 U-Boot 烧写与启动........................................................................................ 686
30.4 U-Boot 命令使用............................................................................................ 688
30.4.1 信息查询命令............................................................................................. 689
30.4.2 环境变量操作命令..................................................................................... 690
30.4.3 内存操作命令............................................................................................. 692
30.4.4 网络操作命令............................................................................................. 695
30.4.5 EMMC 和 SD 卡操作命令.......................................................................... 702
30.4.6 FAT 格式文件系统操作命令 ...................................................................... 707
30.4.7 EXT 格式文件系统操作命令 ..................................................................... 710
30.4.8 NAND 操作命令.......................................................................................... 711
30.4.9 BOOT 操作命令 .......................................................................................... 714
30.4.10 其他常用命令........................................................................................... 718
第三十一章 U-Boot 顶层 Makefile 详解.................................................................721
31.1 U-Boot 工程目录分析.................................................................................... 722
31.2 VScode 工程创建............................................................................................ 732
31.3 U-Boot 顶层 Makefile 分析............................................................................ 738
31.3.1 版本号......................................................................................................... 738
31.3.2 MAKEFLAGS 变量..................................................................................... 739
31.3.3 命令输出..................................................................................................... 739
31.3.4 静默输出..................................................................................................... 741
31.3.5 设置编译结果输出目录............................................................................. 743
31.3.6 代码检查..................................................................................................... 744
31.3.7 模块编译..................................................................................................... 745
31.3.8 获取主机架构和系统................................................................................. 746
31.3.9 设置目标架构、交叉编译器和配置文件................................................. 747
31.3.10 调用 scripts/Kbuild.include....................................................................... 748
31.3.11 交叉编译工具变量设置 ........................................................................... 748
31.3.12 导出其他变量........................................................................................... 749
31.3.13 make xxx_defconfig 过程.......................................................................... 753
31.3.14 Makefile.build 脚本分析 ........................................................................... 758
31.3.15 make 过程 .................................................................................................. 761
第三十二章 U-Boot 启动流程详解.........................................................................770
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
21
I.MX6U 嵌入式 Linux 驱动开发指南
32.1 链接脚本 u-boot.lds 详解.............................................................................. 771
32.2 U-Boot 启动流程详解.................................................................................... 775
32.2.1 reset 函数源码详解...................................................................................... 775
32.2.2 lowlevel_init 函数详解................................................................................ 780
32.2.3 s_init 函数详解 ............................................................................................ 783
32.2.4 _main 函数详解........................................................................................... 785
32.2.5 board_init_f 函数详解 ................................................................................. 792
32.2.6 relocate_code 函数详解............................................................................... 800
32.2.7 relocate_vectors 函数详解........................................................................... 806
32.2.8 board_init_r 函数详解 ................................................................................. 807
32.2.9 run_main_loop 函数详解............................................................................. 811
32.2.10 cli_loop 函数详解...................................................................................... 817
32.2.11 cmd_process 函数详解 .............................................................................. 819
32.3 bootz 启动 Linux 内核过程............................................................................ 825
32.3.1 images 全局变量.......................................................................................... 825
32.3.2 do_bootz 函数 .............................................................................................. 826
32.3.3 bootz_start 函数 ........................................................................................... 827
32.3.4 do_bootm_states 函数.................................................................................. 830
32.3.5 bootm_os_get_boot_func 函数 .................................................................... 835
32.3.6 do_bootm_linux 函数................................................................................... 836
第三十三章 U-Boot 移植.........................................................................................841
33.1 NXP 官方开发板 uboot 编译测试................................................................. 842
33.1.1 查找 NXP 官方的开发板默认配置文件................................................... 842
33.1.2 编译 NXP 官方开发板对应的 uboot......................................................... 843
33.1.3 烧写验证与驱动测试................................................................................. 845
33.2 在 U-Boot 中添加自己的开发板.................................................................. 847
33.2.1 添加开发板默认配置文件......................................................................... 848
33.2.2 添加开发板对应的头文件......................................................................... 848
33.2.3 添加开发板对应的板级文件夹................................................................. 856
33.2.4 修改 U-Boot 图形界面配置文件............................................................... 858
33.2.5 使用新添加的板子配置编译 uboot........................................................... 858
33.2.6 LCD 驱动修改............................................................................................. 860
33.2.7 网络驱动修改............................................................................................. 863
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
22
I.MX6U 嵌入式 Linux 驱动开发指南
33.2.8 其他需要修改的地方................................................................................. 873
33.3 bootcmd 和 bootargs 环境变量 ...................................................................... 874
33.3.1 环境变量 bootcmd ...................................................................................... 875
33.3.2 环境变量 bootargs ...................................................................................... 880
33.4 uboot 启动 Linux 测试 ................................................................................... 881
33.4.1 从 EMMC 启动 Linux 系统 ....................................................................... 881
33.4.2 从网络启动 Linux 系统.............................................................................. 882
第三十四章 U-Boot 图形化配置及其原理.............................................................885
34.1 U-Boot 图形化配置体验................................................................................ 886
34.2 menuconfig 图形化配置原理......................................................................... 890
34.2.1 make menuconfig 过程分析 ........................................................................ 890
34.2.2 Kconfig 语法简介........................................................................................ 891
34.3 添加自定义菜单............................................................................................ 900
第三十五章 Linux 内核顶层 Makefile 详解 ...........................................................903
35.1 Linux 内核获取............................................................................................... 904
35.2 Linux 内核编译初次编译............................................................................... 904
35.3 Linux 工程目录分析....................................................................................... 906
35.4 VSCode 工程创建........................................................................................... 912
35.5 顶层 Makefile 详解........................................................................................ 914
35.5.1 make xxx_defconfig 过程............................................................................ 919
35.5.2 Makefile.build 脚本分析 ............................................................................. 921
35.5.3 make 过程 .................................................................................................... 923
35.5.4 built-in.o 文件编译生成过程 ...................................................................... 928
35.5.5 make zImage 过程........................................................................................ 931
第三十六章 Linux 内核启动流程............................................................................933
36.1 链接脚本 vmlinux.lds.................................................................................... 934
36.2 Linux 内核启动流程分析............................................................................... 934
36.2.1 Linux 内核入口 stext................................................................................... 934
36.2.2 __mmap_switched 函数............................................................................... 937
36.2.3 start_kernel 函数 .......................................................................................... 937
36.2.4 rest_init 函数................................................................................................ 941
36.2.5 init 进程........................................................................................................ 943
第三十七章 Linux 内核移植....................................................................................947
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
23
I.MX6U 嵌入式 Linux 驱动开发指南
37.1 创建 VSCode 工程......................................................................................... 948
37.2 NXP 官方开发板 Linux 内核编译................................................................. 948
37.2.1 修改顶层 Makefile....................................................................................... 948
37.2.2 配置并编译 Linux 内核.............................................................................. 948
37.2.3 Linux 内核启动测试.................................................................................... 949
37.2.4 根文件系统缺失错误................................................................................. 950
37.3 在 Linux 中添加自己的开发板..................................................................... 951
37.3.1 添加开发板默认配置文件......................................................................... 951
37.3.2 添加开发板对应的设备树文件................................................................. 952
37.3.3 编译测试..................................................................................................... 953
37.4 CPU 主频和网络驱动修改 ............................................................................ 954
37.4.1 CPU 主频修改 ............................................................................................. 954
37.4.2 使能 8 线 EMMC 驱动............................................................................... 960
37.4.3 修改网络驱动............................................................................................. 961
37.4.4 保存修改后的图形化配置文件................................................................. 972
第三十八章 根文件系统构建..................................................................................974
38.1 根文件系统简介............................................................................................ 975
38.2 BusyBox 构建根文件系统 ............................................................................. 977
38.2.1 BusyBox 简介 .............................................................................................. 977
38.2.2 编译 BusyBox 构建根文件系统 ................................................................ 978
38.2.3 向根文件系统添加 lib 库........................................................................... 986
38.2.4 创建其他文件夹......................................................................................... 988
38.3 根文件系统初步测试.................................................................................... 988
38.4 完善根文件系统............................................................................................ 990
38.4.1 创建/etc/init.d/rcS 文件 .............................................................................. 990
38.4.2 创建/etc/fstab 文件 ..................................................................................... 991
38.4.3 创建/etc/inittab 文件................................................................................... 992
38.5 根文件系统其他功能测试............................................................................ 993
38.5.1 软件运行测试............................................................................................. 993
38.5.2 中文字符测试............................................................................................. 995
38.5.3 开机自启动测试......................................................................................... 996
38.5.4 外网连接测试............................................................................................. 997
第三十九章 系统烧写..............................................................................................999
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
24
I.MX6U 嵌入式 Linux 驱动开发指南
39.1 MfgTool 工具简介........................................................................................ 1000
39.2 MfgTool 工作原理简介................................................................................ 1001
39.2.1 烧写方式................................................................................................... 1001
39.2.2 系统烧写原理........................................................................................... 1002
39.3 烧写 NXP 官方系统.................................................................................... 1006
39.4 烧写自制的系统.......................................................................................... 1007
39.4.1 系统烧写................................................................................................... 1007
39.4.2 网络开机自启动设置............................................................................... 1009
39.5 改造我们自己的烧写工具.......................................................................... 1011
39.5.1 改造 MfgTool............................................................................................ 1011
39.5.2 烧写测试................................................................................................... 1014
39.5.3 解决 Linux 内核启动失败........................................................................ 1014
第四篇 ARM Linux 驱动开发篇 ...........................................................................1017
第四十章 字符设备驱动开发................................................................................1018
40.1 字符设备驱动简介...................................................................................... 1019
40.2 字符设备驱动开发步骤.............................................................................. 1021
40.2.1 驱动模块的加载和卸载........................................................................... 1022
40.2.2 字符设备注册与注销............................................................................... 1023
40.2.3 实现设备的具体操作函数....................................................................... 1025
40.2.4 添加 LICENSE 和作者信息..................................................................... 1027
40.3 Linux 设备号................................................................................................. 1027
40.3.1 设备号的组成........................................................................................... 1027
40.3.2 设备号的分配........................................................................................... 1028
40.4 chrdevbase 字符设备驱动开发实验............................................................ 1029
40.4.1 实验程序编写........................................................................................... 1029
40.4.2 编写测试 APP........................................................................................... 1035
40.4.3 编译驱动程序和测试 APP....................................................................... 1039
40.4.4 运行测试................................................................................................... 1041
第四十一章 嵌入式 Linux LED 驱动开发实验....................................................1045
41.1 Linux 下 LED 灯驱动原理........................................................................... 1046
41.1.1 地址映射................................................................................................... 1046
41.1.2 I/O 内存访问函数...................................................................................... 1048
41.2 硬件原理图分析.......................................................................................... 1048
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
25
I.MX6U 嵌入式 Linux 驱动开发指南
41.3 实验程序编写.............................................................................................. 1048
41.3.1 LED 灯驱动程序编写 ............................................................................... 1048
41.3.2 编写测试 APP........................................................................................... 1054
41.4 运行测试...................................................................................................... 1056
41.4.1 编译驱动程序和测试 APP....................................................................... 1056
41.4.2 运行测试................................................................................................... 1056
第四十二章 新字符设备驱动实验........................................................................1058
42.1 新字符设备驱动原理.................................................................................. 1059
42.1.1 分配和释放设备号................................................................................... 1059
42.1.2 新的字符设备注册方法........................................................................... 1060
42.2 自动创建设备节点...................................................................................... 1061
42.2.1 mdev 机制 .................................................................................................. 1061
42.2.1 创建和删除类........................................................................................... 1062
42.2.2 创建设备................................................................................................... 1062
42.2.3 参考示例................................................................................................... 1063
42.3 设置文件私有数据...................................................................................... 1063
42.4 硬件原理图分析.......................................................................................... 1064
42.5 实验程序编写.............................................................................................. 1064
42.5.1 LED 灯驱动程序编写 ............................................................................... 1064
42.5.2 编写测试 APP........................................................................................... 1071
42.6 运行测试...................................................................................................... 1071
42.6.1 编译驱动程序和测试 APP....................................................................... 1071
42.6.2 运行测试................................................................................................... 1071
第四十三章 Linux 设备树......................................................................................1073
43.1 什么是设备树?.......................................................................................... 1074
43.2 DTS、DTB 和 DTC...................................................................................... 1075
43.3 DTS 语法....................................................................................................... 1077
43.3.1 .dtsi 头文件 ................................................................................................ 1077
43.3.2 设备节点................................................................................................... 1080
43.3.3 标准属性................................................................................................... 1081
43.3.4 根节点 compatible 属性 ........................................................................... 1085
43.3.5 向节点追加或修改内容........................................................................... 1091
43.4 创建小型模板设备树.................................................................................. 1093
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
26
I.MX6U 嵌入式 Linux 驱动开发指南
43.5 设备树在系统中的体现.............................................................................. 1099
43.6 特殊节点...................................................................................................... 1100
43.6.1 aliases 子节点 ............................................................................................ 1100
43.6.2 chosen 子节点............................................................................................ 1101
43.7 Linux 内核解析 DTB 文件........................................................................... 1103
43.8 绑定信息文档.............................................................................................. 1104
43.9 设备树常用 OF 操作函数........................................................................... 1105
43.9.1 查找节点的 OF 函数................................................................................ 1106
43.9.2 查找父/子节点的 OF 函数....................................................................... 1107
43.9.3 提取属性值的 OF 函数............................................................................ 1108
43.9.4 其他常用的 OF 函数.................................................................................1111
第四十四章 设备树下的 LED 驱动实验 ..............................................................1114
44.1 设备树 LED 驱动原理 .................................................................................1115
44.2 硬件原理图分析...........................................................................................1115
44.3 实验程序编写...............................................................................................1115
44.3.1 修改设备树文件........................................................................................1115
44.3.2 LED 灯驱动程序编写 ................................................................................1116
44.3.3 编写测试 APP........................................................................................... 1124
44.4 运行测试...................................................................................................... 1124
44.4.1 编译驱动程序和测试 APP....................................................................... 1124
44.4.2 运行测试................................................................................................... 1124
第四十五章 pinctrl 和 gpio 子系统实验................................................................1126
45.1 pinctrl 子系统................................................................................................ 1127
45.1.1 pinctrl 子系统简介..................................................................................... 1127
45.1.2 I.MX6ULL 的 pinctrl 子系统驱动............................................................ 1127
45.1.3 设备树中添加 pinctrl 节点模板............................................................... 1136
45.2 gpio 子系统................................................................................................... 1137
45.2.1 gpio 子系统简介........................................................................................ 1137
45.2.2 I.MX6ULL 的 gpio 子系统驱动 ............................................................... 1137
45.2.3 gpio 子系统 API 函数................................................................................ 1145
45.2.4 设备树中添加 gpio 节点模板.................................................................. 1146
45.2.5 与 gpio 相关的 OF 函数........................................................................... 1147
45.3 硬件原理图分析.......................................................................................... 1148
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
27
I.MX6U 嵌入式 Linux 驱动开发指南
45.4 实验程序编写.............................................................................................. 1148
45.4.1 修改设备树文件....................................................................................... 1148
45.4.2 LED 灯驱动程序编写 ............................................................................... 1150
44.4.3 编写测试 APP........................................................................................... 1155
45.5 运行测试...................................................................................................... 1156
45.5.1 编译驱动程序和测试 APP....................................................................... 1156
45.5.2 运行测试................................................................................................... 1156
第四十六章 Linux 蜂鸣器实验..............................................................................1158
46.1 蜂鸣器驱动原理.......................................................................................... 1159
46.2 硬件原理图分析.......................................................................................... 1159
46.3 实验程序编写.............................................................................................. 1159
46.3.1 修改设备树文件....................................................................................... 1159
46.3.2 蜂鸣器驱动程序编写............................................................................... 1160
46.3.3 编写测试 APP........................................................................................... 1165
46.4 运行测试...................................................................................................... 1167
46.4.1 编译驱动程序和测试 APP....................................................................... 1167
46.4.2 运行测试................................................................................................... 1167
第四十七章 Linux 并发与竞争..............................................................................1169
47.1 并发与竞争.................................................................................................. 1170
47.2 原子操作...................................................................................................... 1171
47.2.1 原子操作简介........................................................................................... 1171
47.2.2 原子整形操作 API 函数........................................................................... 1172
47.2.3 原子位操作 API 函数............................................................................... 1173
47.3 自旋锁.......................................................................................................... 1174
47.3.1 自旋锁简介............................................................................................... 1174
47.3.2 自旋锁 API 函数....................................................................................... 1175
47.3.3 其他类型的锁........................................................................................... 1177
47.3.4 自旋锁使用注意事项............................................................................... 1178
47.4 信号量.......................................................................................................... 1179
47.4.1 信号量简介............................................................................................... 1179
47.4.2 信号量 API 函数....................................................................................... 1180
47.5 互斥体.......................................................................................................... 1180
47.5.1 互斥体简介............................................................................................... 1180
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
28
I.MX6U 嵌入式 Linux 驱动开发指南
47.5.2 互斥体 API 函数....................................................................................... 1181
第四十八章 Linux 并发与竞争实验......................................................................1182
48.1 原子操作实验.............................................................................................. 1183
48.1.1 实验程序编写........................................................................................... 1183
48.1.2 运行测试................................................................................................... 1190
48.2 自旋锁实验.................................................................................................. 1192
48.2.1 实验程序编写........................................................................................... 1192
48.2.2 运行测试................................................................................................... 1196
48.3 信号量实验.................................................................................................. 1197
48.3.1 实验程序编写........................................................................................... 1197
48.3.2 运行测试................................................................................................... 1200
48.4 互斥体实验.................................................................................................. 1201
48.4.1 实验程序编写........................................................................................... 1201
48.4.2 运行测试................................................................................................... 1204
第四十九章 Linux 按键输入实验..........................................................................1206
49.1 Linux 下按键驱动原理................................................................................. 1207
49.2 硬件原理图分析.......................................................................................... 1207
49.3 实验程序编写.............................................................................................. 1207
49.3.1 修改设备树文件....................................................................................... 1207
49.3.2 按键驱动程序编写................................................................................... 1208
49.3.3 编写测试 APP........................................................................................... 1213
49.4 运行测试...................................................................................................... 1215
49.4.1 编译驱动程序和测试 APP....................................................................... 1215
49.4.2 运行测试................................................................................................... 1215
第五十章 Linux 内核定时器实验.........................................................................1217
50.1 Linux 时间管理和内核定时器简介............................................................. 1218
50.1.1 内核时间管理简介................................................................................... 1218
50.1.2 内核定时器简介....................................................................................... 1221
50.1.3 Linux 内核短延时函数.............................................................................. 1223
50.2 硬件原理图分析.......................................................................................... 1223
50.3 实验程序编写.............................................................................................. 1224
50.3.1 修改设备树文件....................................................................................... 1224
50.3.2 定时器驱动程序编写............................................................................... 1224
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
29
I.MX6U 嵌入式 Linux 驱动开发指南
50.3.3 编写测试 APP........................................................................................... 1230
50.4 运行测试...................................................................................................... 1232
50.4.1 编译驱动程序和测试 APP....................................................................... 1232
50.4.2 运行测试................................................................................................... 1233
第五十一章 Linux 中断实验..................................................................................1234
51.1 Linux 中断简介............................................................................................. 1235
51.1.1 Linux 中断 API 函数................................................................................. 1235
51.1.2 上半部与下半部....................................................................................... 1237
51.1.3 设备树中断信息节点............................................................................... 1243
51.1.4 获取中断号............................................................................................... 1245
51.2 硬件原理图分析.......................................................................................... 1245
51.3 实验程序编写.............................................................................................. 1245
51.3.1 修改设备树文件....................................................................................... 1245
51.3.2 按键中断驱动程序编写........................................................................... 1246
51.3.3 编写测试 APP........................................................................................... 1254
51.4 运行测试...................................................................................................... 1256
51.4.1 编译驱动程序和测试 APP....................................................................... 1256
51.4.2 运行测试................................................................................................... 1256
第五十二章 Linux 阻塞和非阻塞 IO 实验 ...........................................................1258
52.1 阻塞和非阻塞 IO......................................................................................... 1259
52.1.1 阻塞和非阻塞简介................................................................................... 1259
52.1.2 等待队列................................................................................................... 1260
52.1.3 轮询........................................................................................................... 1262
52.1.4 Linux 驱动下的 poll 操作函数 ................................................................. 1266
52.2 阻塞 IO 实验................................................................................................ 1267
52.2.1 硬件原理图分析....................................................................................... 1267
52.2.2 实验程序编写........................................................................................... 1267
52.2.3 运行测试................................................................................................... 1274
52.3 非阻塞 IO 实验............................................................................................ 1275
52.3.1 硬件原理图分析....................................................................................... 1275
52.3.2 实验程序编写........................................................................................... 1276
52.3.3 运行测试................................................................................................... 1281
第五十三章 异步通知实验....................................................................................1284
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
30
I.MX6U 嵌入式 Linux 驱动开发指南
53.1 异步通知...................................................................................................... 1285
53.1.1 异步通知简介........................................................................................... 1285
53.1.2 驱动中的信号处理................................................................................... 1287
53.1.3 应用程序对异步通知的处理................................................................... 1289
53.2 硬件原理图分析.......................................................................................... 1289
53.3 实验程序编写.............................................................................................. 1289
53.3.1 修改设备树文件....................................................................................... 1290
53.3.2 程序编写................................................................................................... 1290
53.3.3 编写测试 APP........................................................................................... 1293
53.4 运行测试...................................................................................................... 1295
53.4.1 编译驱动程序和测试 APP....................................................................... 1295
53.4.2 运行测试................................................................................................... 1296
第五十四章 platform 设备驱动实验 .....................................................................1297
54.1 Linux 驱动的分离与分层............................................................................. 1298
54.1.1 驱动的分隔与分离................................................................................... 1298
54.1.2 驱动的分层............................................................................................... 1300
54.2 platform 平台驱动模型简介 ........................................................................ 1300
54.2.1 platform 总线 ............................................................................................. 1300
54.2.2 platform 驱动 ............................................................................................. 1302
54.2.3 platform 设备 ............................................................................................. 1307
54.3 硬件原理图分析.......................................................................................... 1310
54.4 试验程序编写.............................................................................................. 1310
54.4.1 platform 设备与驱动程序编写 ................................................................. 1310
54.4.2 测试 APP 编写.......................................................................................... 1320
54.5 运行测试...................................................................................................... 1321
54.5.1 编译驱动程序和测试 APP....................................................................... 1321
54.4.2 运行测试................................................................................................... 1322
第五十五章 设备树下的 platform 驱动编写 ........................................................1324
55.1 设备树下的 platform 驱动简介 .................................................................. 1325
55.2 硬件原理图分析.......................................................................................... 1326
55.3 实验程序编写.............................................................................................. 1326
55.3.1 修改设备树文件....................................................................................... 1326
55.3.2 platform 驱动程序编写 ............................................................................. 1326
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
31
I.MX6U 嵌入式 Linux 驱动开发指南
55.3.3 编写测试 APP........................................................................................... 1332
55.4 运行测试...................................................................................................... 1332
55.4.1 编译驱动程序和测试 APP....................................................................... 1332
55.4.2 运行测试................................................................................................... 1333
第五十六章 Linux 自带的 LED 灯驱动实验........................................................1334
56.1 Linux 内核自带 LED 驱动使能................................................................... 1335
56.2 Linux 内核自带 LED 驱动简介................................................................... 1336
56.2.1 LED 灯驱动框架分析 ............................................................................... 1336
56.2.2 module_platform_driver 函数简析............................................................ 1337
56.2.3 gpio_led_probe 函数简析.......................................................................... 1338
56.3 设备树节点编写.......................................................................................... 1341
56.4 运行测试...................................................................................................... 1341
第五十七章 Linux MISC 驱动实验.......................................................................1343
57.1 MISC 设备驱动简介 .................................................................................... 1344
57.2 硬件原理图分析.......................................................................................... 1345
57.3 实验程序编写.............................................................................................. 1345
57.3.1 修改设备树............................................................................................... 1345
57.3.2 beep 驱动程序编写.................................................................................... 1345
57.3.3 编写测试 APP........................................................................................... 1351
57.4 运行测试...................................................................................................... 1352
57.4.1 编译驱动程序和测试 APP....................................................................... 1352
57.4.2 运行测试................................................................................................... 1353
第五十八章 Linux INPUT 子系统实验.................................................................1354
58.1 input 子系统.................................................................................................. 1355
58.1.1 input 子系统简介....................................................................................... 1355
58.1.2 input 驱动编写流程................................................................................... 1355
58.1.3 input_event 结构体 .................................................................................... 1361
58.2 硬件原理图分析.......................................................................................... 1362
58.3 实验程序编写.............................................................................................. 1362
58.3.1 修改设备树文件....................................................................................... 1362
58.3.2 按键 input 驱动程序编写......................................................................... 1362
58.3.3 编写测试 APP........................................................................................... 1368
58.4 运行测试...................................................................................................... 1370
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
32
I.MX6U 嵌入式 Linux 驱动开发指南
58.4.1 编译驱动程序和测试 APP....................................................................... 1370
58.4.2 运行测试................................................................................................... 1371
58.5 Linux 自带按键驱动程序的使用................................................................. 1372
58.5.1 自带按键驱动程序源码简析................................................................... 1372
58.5.2 自带按键驱动程序的使用....................................................................... 1378
第五十九章 Linux LCD 驱动实验.........................................................................1380
59.1 Linux 下 LCD 驱动简析............................................................................... 1381
59.1.1 Framebuffer 设备 ....................................................................................... 1381
59.1.2 LCD 驱动简析........................................................................................... 1382
59.2 硬件原理图分析.......................................................................................... 1387
59.3 LCD 驱动程序编写...................................................................................... 1388
59.4 运行测试...................................................................................................... 1393
59.4.1 LCD 屏幕基本测试................................................................................... 1393
59.4.2 设置 LCD 作为终端控制台..................................................................... 1394
59.4.3 LCD 背光调节........................................................................................... 1395
59.4.4 LCD 自动关闭解决方法........................................................................... 1396
第六十章 Linux RTC 驱动实验.............................................................................1398
60.1 Linux 内核 RTC 驱动简介........................................................................... 1399
60.2 I.MX6U 内部 RTC 驱动分析....................................................................... 1403
60.3 RTC 时间查看与设置................................................................................... 1408
第六十一章 Linux I2C 驱动实验...........................................................................1411
61.1 Linux I2C 驱动框架简介.............................................................................. 1412
61.1.1 I2C 总线驱动............................................................................................. 1412
61.1.2 I2C 设备驱动............................................................................................. 1413
61.1.3 I2C 设备和驱动匹配过程......................................................................... 1417
61.2 I.MX6U 的 I2C 适配器驱动分析 ................................................................ 1418
61.3 I2C 设备驱动编写流程................................................................................ 1424
61.3.1 I2C 设备信息描述..................................................................................... 1425
61.3.2 I2C 设备数据收发处理流程..................................................................... 1426
61.4 硬件原理图分析.......................................................................................... 1429
61.5 实验程序编写.............................................................................................. 1429
61.5.1 修改设备树............................................................................................... 1429
61.5.2 AP3216C 驱动编写.................................................................................... 1431
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
33
I.MX6U 嵌入式 Linux 驱动开发指南
61.5.3 编写测试 APP........................................................................................... 1441
61.6 运行测试...................................................................................................... 1443
61.6.1 编译驱动程序和测试 APP....................................................................... 1443
61.6.2 运行测试................................................................................................... 1443
第六十二章 Linux SPI 驱动实验...........................................................................1445
62.1 Linux 下 SPI 驱动框架简介......................................................................... 1446
62.1.1 SPI 主机驱动 ............................................................................................. 1446
62.1.2 SPI 设备驱动 ............................................................................................. 1448
62.1.3 SPI 设备和驱动匹配过程 ......................................................................... 1450
62.2 I.MX6U SPI 主机驱动分析.......................................................................... 1451
62.3 SPI 设备驱动编写流程 ................................................................................ 1453
62.3.1 SPI 设备信息描述 ..................................................................................... 1453
62.3.2 SPI 设备数据收发处理流程 ..................................................................... 1454
62.4 硬件原理图分析.......................................................................................... 1458
62.5 试验程序编写.............................................................................................. 1458
62.5.1 修改设备树............................................................................................... 1458
62.5.2 编写 ICM20608 驱动................................................................................ 1459
62.5.3 编写测试 APP........................................................................................... 1470
62.6 运行测试...................................................................................................... 1473
62.6.1 编译驱动程序和测试 APP....................................................................... 1473
62.6.2 运行测试................................................................................................... 1474
第六十三章 Linux RS232/485/GPS 驱动实验......................................................1475
63.1 Linux 下 UART 驱动框架............................................................................ 1476
63.2 I.MX6U UART 驱动分析............................................................................. 1479
63.3 硬件原理图分析.......................................................................................... 1485
63.4 RS232 驱动编写 ........................................................................................... 1486
63.5 移植 minicom............................................................................................... 1488
63.6 RS232 驱动测试 ........................................................................................... 1491
63.6.1 RS232 连接设置 ........................................................................................ 1491
63.6.2 minicom 设置............................................................................................. 1492
63.6.3 RS232 收发测试 ........................................................................................ 1494
63.7 RS485 测试 ................................................................................................... 1496
63.7.1 RS485 连接设置 ........................................................................................ 1496
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
34
I.MX6U 嵌入式 Linux 驱动开发指南
63.7.2 RS485 收发测试 ........................................................................................ 1497
63.8 GPS 测试....................................................................................................... 1498
63.8.1 GPS 连接设置............................................................................................ 1498
63.8.2 GPS 数据接收测试.................................................................................... 1499
第六十四章 Linux 多点电容触摸屏实验.............................................................1501
64.1 Linux 下电容触摸屏驱动框架简介............................................................. 1502
64.1.1 多点触摸(MT)协议详解 .......................................................................... 1502
64.1.2 Type A 触摸点信息上报时序.................................................................... 1503
64.1.3 Type B 触摸点信息上报时序.................................................................... 1505
64.1.4 MT 其他事件的使用................................................................................. 1507
64.1.5 多点触摸所使用到的 API 函数............................................................... 1507
64.1.6 多点电容触摸驱动框架........................................................................... 1509
64.2 硬件原理图分析.......................................................................................... 1513
64.3 试验程序编写.............................................................................................. 1513
64.3.1 修改设备树............................................................................................... 1514
64.3.2 编写多点电容触摸驱动........................................................................... 1515
64.4 运行测试...................................................................................................... 1525
64.4.1 编译驱动程序........................................................................................... 1525
64.4.2 运行测试................................................................................................... 1526
64.4.3 将驱动添加到内核中............................................................................... 1527
64.5 tslib 移植与使用 ........................................................................................... 1529
64.5.1 tslib 移植 .................................................................................................... 1529
64.5.2 tslib 测试 .................................................................................................... 1530
64.6 使用内核自带的驱动.................................................................................. 1532
64.7 4.3 寸屏触摸驱动实验................................................................................. 1534
第六十五章 Linux 音频驱动实验.........................................................................1538
65.1 音频接口简介.............................................................................................. 1539
65.1.1 为何需要音频编解码芯片?................................................................... 1539
65.1.2 WM8960 简介............................................................................................ 1539
65.1.3 I2S 总线接口.............................................................................................. 1541
65.1.4 I.MX6ULL SAI 简介 ................................................................................. 1542
65.2 硬件原理图分析.......................................................................................... 1543
65.3 音频驱动使能.............................................................................................. 1544
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
35
I.MX6U 嵌入式 Linux 驱动开发指南
65.3.1 修改设备树............................................................................................... 1544
65.5.2 使能内核的 WM8960 驱动...................................................................... 1548
65.4 alsa-lib 和 alsa-utils 移植.............................................................................. 1550
65.4.1 alsa-lib 移植 ............................................................................................... 1550
65.4.2 alsa-utils 移植............................................................................................. 1551
65.5 声卡设置与测试.......................................................................................... 1552
65.5.1 amixer 使用方法........................................................................................ 1552
65.5.2 音乐播放测试........................................................................................... 1555
65.5.3 MIC 录音测试............................................................................................ 1555
65.5.4 LINE IN 录音测试..................................................................................... 1559
65.6 开机自动配置声卡...................................................................................... 1561
65.7 mplayer 播放器移植与使用......................................................................... 1562
65.7.1 mplayer 移植.............................................................................................. 1562
65.7.2 mplayer 使用.............................................................................................. 1563
65.8 alsamixer 简介............................................................................................... 1565
第六十六章 Linux CAN 驱动实验........................................................................1566
66.1 CAN 协议简析.............................................................................................. 1567
66.1.1 何为 CAN?.............................................................................................. 1567
66.1.2 CAN 电气属性........................................................................................... 1568
66.1.3 CAN 协议................................................................................................... 1569
66.1.4 CAN 速率................................................................................................... 1575
66.1.5 I.MX6ULL FlexCAN 简介 ........................................................................ 1577
66.2 硬件原理图分析.......................................................................................... 1579
66.3 实验程序编写.............................................................................................. 1579
66.3.1 修改设备树............................................................................................... 1579
66.3.2 使能 Linux 内核自带的 FlexCAN 驱动.................................................. 1581
66.4 FlexCAN 测试............................................................................................... 1582
66.4.1 检查 CAN 网卡设备是否存在................................................................. 1582
66.4.2 移植 iproute2............................................................................................. 1583
66.4.3 移植 can-utils 工具 ................................................................................... 1585
66.4.4 CAN 通信测试........................................................................................... 1585
第六十七章 Linux USB 驱动实验.........................................................................1589
67.1 USB 接口简介 .............................................................................................. 1590
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
36
I.MX6U 嵌入式 Linux 驱动开发指南
67.1.1 什么是 USB? .......................................................................................... 1590
67.1.2 USB 电气特性 ........................................................................................... 1591
67.1.3 USB 拓扑结构 ........................................................................................... 1592
67.1.4 什么是 USB OTG?................................................................................. 1593
67.1.5 I.MX6ULL USB 接口简介........................................................................ 1594
67.2 硬件原理图分析.......................................................................................... 1595
67.2.1 USB HUB 原理图分析.............................................................................. 1595
67.2.2 USB OTG 原理图分析.............................................................................. 1596
67.3 USB 协议简析 .............................................................................................. 1597
67.3.1 USB 描述符 ............................................................................................... 1597
67.3.3 USB 数据包类型 ....................................................................................... 1600
67.3.4 USB 传输类型 ........................................................................................... 1602
67.3.5 USB 枚举 ................................................................................................... 1603
67.4 Linux 内核自带 HOST 实验........................................................................ 1603
67.4.1 USB 鼠标键盘测试 ................................................................................... 1603
67.4.2 U 盘实验 .................................................................................................... 1606
67.5 Linux 内核自带 USB OTG 实验.................................................................. 1608
67.5.1 修改设备树............................................................................................... 1608
67.5.2 OTG 主机实验........................................................................................... 1609
67.5.3 OTG 从机实验........................................................................................... 1609
第六十八章 Linux 块设备驱动实验.....................................................................1613
第六十九章 Linux 网络驱动实验.........................................................................1614
第七十章 Linux WIFI 驱动实验............................................................................1615
70.1 WIFI 驱动添加与编译.................................................................................. 1616
70.1.1 向 Linux 内核添加 WIFI 驱动................................................................. 1616
70.1.2 配置 Linux 内核........................................................................................ 1619
70.1.3 编译 WIFI 驱动 ........................................................................................ 1620
70.1.4 驱动加载测试........................................................................................... 1622
70.2 wireless tools 工具移植与测试 .................................................................... 1625
70.2.1 wireless tools 移植 ..................................................................................... 1625
70.2.2 wireless tools 工具测试 ............................................................................. 1625
70.3 wpa_supplicant 移植..................................................................................... 1627
70.3.1 openssl 移植............................................................................................... 1627
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
37
I.MX6U 嵌入式 Linux 驱动开发指南
70.3.2 libnl 库移植................................................................................................ 1627
70.3.3 wpa_supplicant 移植.................................................................................. 1628
70.4 WIFI 联网测试.............................................................................................. 1630
70.4.1 RTL8188 USB WIFI 联网测试 ................................................................. 1630
70.4.2 RTL8189 SDIO WIFI 联网测试................................................................ 1632
第七十一章 Linux 4G 通信实验............................................................................1634
71.1 4G 网络连接简介 ......................................................................................... 1635
71.2 高新兴 ME3630 4G 模块实验 .................................................................... 1637
71.2.1 ME3630 4G 模块简介 ............................................................................... 1637
71.2.2 ME3630 4G 模块驱动修改 ....................................................................... 1638
71.2.3 ME3630 4G 模块 ppp 联网测试 ............................................................... 1641
71.2.4 ME3630 4G 模块 ECM 联网测试............................................................. 1646
71.2.5 ME3630 4G 模块 GNSS 定位测试........................................................... 1647
71.3 EC20 4G 模块实验....................................................................................... 1649
71.3.1 EC20 4G 模块简介.................................................................................... 1649
71.3.2 EC20 4G 模块驱动修改............................................................................ 1650
71.3.3 quectel-CM 移植........................................................................................ 1655
71.3.4 EC20 上网测试.......................................................................................... 1655
第七十二章 RGB 转 HDMI 实验 ..........................................................................1657
72.1 RGB 转 HMDI 简介 ..................................................................................... 1658
72.2 硬件原理图分析.......................................................................................... 1658
72.3 实验驱动编写.............................................................................................. 1659
72.3.1 修改设备树............................................................................................... 1659
72.3.2 使能内核自带的 sii902x 驱动 ................................................................. 1662
72.3.3 修改 sii902x 驱动 ..................................................................................... 1662
72.4 RGB 转 HDMI 测试 ..................................................................................... 1663
第七十三章 Linux PWM 驱动实验.......................................................................1665
73.1 PWM 驱动简析............................................................................................. 1666
73.1.1 设备树下的 PWM 控制器节点................................................................ 1666
73.1.2 PWM 子系统.............................................................................................. 1666
73.1.3 PWM 驱动源码分析.................................................................................. 1667
73.2 PWM 驱动编写............................................................................................. 1671
73.2.1 修改设备树............................................................................................... 1671
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
38
I.MX6U 嵌入式 Linux 驱动开发指南
73.2.2 使能 PWM 驱动........................................................................................ 1673
73.3 PWM 驱动测试............................................................................................. 1673
附录 A 其他根文件系统构建 ................................................................................1676
第 A1 章 Buildroot 根文件系统构建.....................................................................1677
A1.1 何为 buildroot?.......................................................................................... 1678
A1.1.1 buildroot 简介............................................................................................ 1678
A1.1.2 buildroot 下载............................................................................................ 1678
A1.2 buildroot 构建根文件系统........................................................................... 1679
A1.2.1 配置 buildroot........................................................................................... 1679
A1.2.2 编译 buildroot........................................................................................... 1684
A2.2.3 buildroot 根文件系统测试........................................................................ 1685
A1.3 buildroot 第三方软件和库的配置............................................................... 1685
A1.4 buildroot 下的 busybox 配置....................................................................... 1687
A1.4.1 busybox 配置............................................................................................. 1687
A1.4.2 busybox 中文字符的支持......................................................................... 1688
A1.4.3 编译 busybox............................................................................................ 1688
A1.5 根文件系统测试 ......................................................................................... 1689
第 A2 章 Yocto 根文件系统构建...........................................................................1691
第 A3 章 Ubuntu-base 根文件系统构建................................................................1692
A3.1 ubuntu-base 获取.......................................................................................... 1693
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
39
I.MX6U 嵌入式 Linux 驱动开发指南
A3.2 ubuntu 根文件系统构建.............................................................................. 1695
A3.2.1 解压缩 ubuntu base 根文件系统............................................................. 1695
A3.2.2 安装 qemu ................................................................................................ 1695
A3.2.3 设置软件源 .............................................................................................. 1696
A3.2.4 在主机挂载并配置根文件系统 .............................................................. 1696
A3.3 ubuntu 根文件系统测试.............................................................................. 1698
A3.3.1 nfs 挂载测试 ............................................................................................. 1698
A3.3.2 ubuntu 根文件系统烧写........................................................................... 1699
A3.4 ubuntu 系统使用.......................................................................................... 1700
A3.4.1 添加新用户 .............................................................................................. 1700
A3.4.2 网络 DHCP 配置...................................................................................... 1701
A3.4.3 安装软件 .................................................................................................. 1701
A3.4.4 FTP 服务器搭建 ....................................................................................... 1701
A3.4.5 gcc 和 make 工具安装.............................................................................. 1703
附录 B 其他第三方软件移植 ................................................................................1705
第 B1 章 开发板 FTP 服务器移植与搭建.............................................................1706
B1.1 vsftpd 源码下载 ........................................................................................... 1707
B1.2 vsftpd 移植 ................................................................................................... 1708
B1.3 vsftpd 服务器测试 ....................................................................................... 1708
B1.3.1 配置 vsftpd ............................................................................................... 1708
B1.3.2 添加新用户 .............................................................................................. 1709
B1.3.3 Filezilla 连接测试 ..................................................................................... 1710
第 B2 章节 开发板 OpenSSH 移植与使用 ...........................................................1713
B2.1 OpenSSH 简介 ............................................................................................. 1714
B2.2 OpenSSH 移植 ............................................................................................. 1714
B2.2.1 OpenSSH 源码获取 .................................................................................. 1714
B2.2.2 移植 zlib 库 .............................................................................................. 1714
B2.2.3 移植 openssl 库 ........................................................................................ 1714
B2.2.4 移植 openssh 库........................................................................................ 1714
B2.3 openssh 设置................................................................................................. 1716
B2.4 openssh 使用................................................................................................. 1716
B2.4.1 ssh 登录 ..................................................................................................... 1716
B2.4.2 scp 命令拷贝文件..................................................................................... 1718
原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
40
I.MX6U 嵌入式 Linux 驱动开发指南
第 B3 章节 嵌入式 GDB 调试搭建与使用...........................................................1720
B3.1 GDB 简介..................................................................................................... 1721
B3.2 GDB 移植..................................................................................................... 1721
B3.2.1 获取 gdb 和 gdbserver 源码..................................................................... 1721
B3.2.2 编译 gdb ................................................................................................... 1721
B3.2.3 移植 gdbserver.......................................................................................... 1723
B3.3 使用 GDB 进行嵌入式程序调试............................................................... 1724
B3.3.1 编写一个测试应用 .................................................................................. 1724
B3.3.2 GDB 调试程序.......................................................................................... 1725
第 B4 章节 VSCode gdbserver 图形化调试.........................................................1728
B4.1 VSCode 设置................................................................................................ 1729
B4.2 VSCode 调试方法........................................................................................ 1730

实例下载地址

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警