实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
目录 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
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论