在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → STM32MP1嵌入式Linux驱动开发指南V2.0

STM32MP1嵌入式Linux驱动开发指南V2.0

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:61.67M
  • 下载次数:34
  • 浏览次数:278
  • 发布时间:2022-08-03
  • 实例类别:嵌入式开发
  • 发 布 人:wen6868wen
  • 文件格式:.pdf
  • 所需积分:2

实例介绍

【实例简介】STM32MP1嵌入式Linux驱动开发指南V2.0

本教程是正点原子STM32MP157开发板最新的嵌入式驱动开发参考书。

【实例截图】


【核心代码】

STM32MP157/MINI 开发板教程适配表..................................................................................................6

前言.......................................................................................................................................................31
第一篇 UBUNTU 系统入门篇...............................................................................................................33
第一章 UBUNTU 系统安装...................................................................................................................34
1.1 安装虚拟机软件 VMWARE ................................................................................................................. 35
1.2 创建虚拟机....................................................................................................................................... 41
1.3 安装 UBUNTU 操作系统 ..................................................................................................................... 52
1.3.1 获取 Ubuntu 系统...................................................................................................................... 52
1.3.2 安装 Ubuntu 操作系统.............................................................................................................. 53
1.4 VMWARE TOOLS 安装 ............................................................................................................................ 64
第二章 UBUNTU 系统入门...................................................................................................................67
2.1 UBUNTU 系统初体验 ........................................................................................................................... 68
2.1.1 Hello Ubuntu ............................................................................................................................... 68
2.1.2 系统设置.................................................................................................................................... 70
2.1.3 系统关机与锁定........................................................................................................................ 73
2.1.4 中文输入测试............................................................................................................................ 74
2.2 UBUNTU 终端操作 ............................................................................................................................... 77
2.3 SHELL 操作........................................................................................................................................... 78
2.3.1 Shell 简介.................................................................................................................................... 78
2.3.2 Shell 基本操作............................................................................................................................ 79
2.2.4 常用 Shell 命令.......................................................................................................................... 80
2.4 APT 下载工具..................................................................................................................................... 88
2.5 UBUNTU 下文本编辑 ........................................................................................................................... 92
2.5.1 Gedit 编辑器............................................................................................................................... 92
2.5.2 VI/VIM 编辑器 ............................................................................................................................ 92
2.6 LINUX 文件系统................................................................................................................................... 97
2.6.1 Linux 文件系统简介以及类型 ................................................................................................... 97
2.6.2 Linux 文件系统结构 ................................................................................................................... 99
2.6.2 文件操作命令..........................................................................................................................102
2.6.3 文件压缩和解压缩..................................................................................................................106
2.6.4 文件查询和搜索......................................................................................................................111
2.6.5 文件类型..................................................................................................................................113
2.7 LINUX 用户权限管理.........................................................................................................................113
2.7.1 Ubuntu 用户系统...................................................................................................................113
2.7.2 权限管理..................................................................................................................................114
2.7.3 权限管理命令..........................................................................................................................116
2.8 LINUX 磁盘管理.................................................................................................................................118
2.8.1 Linux 磁盘管理基本概念 .........................................................................................................118
2.8.2 磁盘管理命令..........................................................................................................................120
第三章 LINUX C 编程入门 ..................................................................................................................124
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
9
STM32MP1
嵌入式 Linux 驱动开发指南
3.1 HELLO WORLD!
..................................................................................................................................125
3.1.1 编写代码..................................................................................................................................125
3.1.2 编译代码..................................................................................................................................126
3.2 GCC 编译器 ......................................................................................................................................128
3.2.1 gcc 命令 ....................................................................................................................................128
3.2.2 编译错误警告..........................................................................................................................128
3.2.3 编译流程..................................................................................................................................129
3.3 MAKEFILE 基础....................................................................................................................................130
3.3.1 何为 Makefile...........................................................................................................................130
3.3.2 Makefile 的引入........................................................................................................................130
3.4 MAKEFILE 语法....................................................................................................................................134
3.4.1 Makefile 规则格式....................................................................................................................134
3.4.2 Makefile 变量............................................................................................................................135
3.4.3 Makefile 模式规则....................................................................................................................137
3.4.4 Makefile 自动化变量................................................................................................................138
3.4.5 Makefile 伪目标........................................................................................................................139
3.4.6 Makefile 条件判断....................................................................................................................140
3.4.7 Makefile 函数使用....................................................................................................................140
第二篇 系统移植篇............................................................................................................................143
第四章 开发环境搭建 ........................................................................................................................144
4.1 UBUNTU 和 WINDOWS 文件互传.........................................................................................................145
4.2 UBUNTU 下 NFS 和 SSH 服务开启.....................................................................................................151
4.2.1 NFS 服务开启............................................................................................................................151
4.2.2 SSH 服务开启............................................................................................................................152
4.3 UBUNTU 交叉编译工具链安装 .........................................................................................................152
4.3.1 交叉编译器安装......................................................................................................................152
4.3.2 安装相关库..............................................................................................................................155
4.3.3 交叉编译器验证......................................................................................................................155
4.4 VISUAL STUDIO CODE 软件的安装和使用 ............................................................................................156
4.4.1 Visual Studio Code 的安装........................................................................................................156
4.5.2 Visual Studio Code 插件的安装................................................................................................160
4.5.3 Visual Studio Code 新建工程....................................................................................................162
4.5 CH340 串口驱动安装 ......................................................................................................................168
4.6 MOBAXTERM 软件安装和使用...........................................................................................................171
4.6.1 MobaXterm 软件安装 ..............................................................................................................171
4.6.2 MobaXterm 软件使用 ..............................................................................................................173
4.7 WINDOWS 下 ST 官方软件安装.........................................................................................................176
4.7.1 ST 官方软件简介......................................................................................................................176
4.7.2 Java 环境安装...........................................................................................................................178
4.7.3 STM32CubeMX 安装.................................................................................................................179
4.7.4 STM32CubeIDE 安装.................................................................................................................179
4.7.5 STM32CubeProgrammer 安装..................................................................................................183
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
10
STM32MP1
嵌入式 Linux 驱动开发指南
4.8 UBUNTU 下 ST 官方软件安装............................................................................................................184
4.8.1 Java 环境安装...........................................................................................................................184
4.8.2 STM32CubeMX 安装.................................................................................................................185
4.8.3 STM32CubeIDE 安装.................................................................................................................186
4.8.4 STM32CubeProgrammer 安装..................................................................................................187
4.9 USB DFU 以及 STLINK 驱动安装 .......................................................................................................188
4.9.1 Windows 下 USB DFU 以及 STLink 驱动安装...........................................................................188
4.9.2 Ubuntu 下 USB DFU 以及 STLink 驱动安装 .............................................................................189
第五章 STM32MP1 启动详解.............................................................................................................192
5.1 STM32MP1 启动模式 ......................................................................................................................193
5.2 STM32MP1 启动流程详解 ..............................................................................................................194
5.2.1 内部 ROM 代码 .......................................................................................................................194
5.2.2 安全启动..................................................................................................................................195
5.2.3 串行启动..................................................................................................................................199
5.3 FLASH 设备启动要求.........................................................................................................................200
5.3.1 从 NAND 启动..........................................................................................................................201
5.3.2 从 EMMC 启动.........................................................................................................................201
5.3.3 从 SD 卡启动 ...........................................................................................................................202
5.4 STM32MP1 二进制头部信息 ..........................................................................................................202
5.5 STM23MP1 LINUX 系统启动过程......................................................................................................205
第六章 TF-A 使用 ..............................................................................................................................208
6.1 你好 TF-A.........................................................................................................................................209
6.1.1 系统源码获取..........................................................................................................................209
6.1.2 TF-A 源码打补丁 ......................................................................................................................211
6.1.3 创建 VSCode 工程 ...................................................................................................................212
6.2 编译和烧录 TF-A.............................................................................................................................214
6.2.1 stm32wrapper4dbg 工具安装..................................................................................................214
6.2.2 编译正点原子官方的 TF-A .....................................................................................................215
6.2.3 TF-A 烧录到 EMMC...................................................................................................................217
6.2.4 TF-A 的运行 ..............................................................................................................................225
第七章 TF-A 初探 ...............................................................................................................................226
7.1 设备安全怎么保证? .....................................................................................................................227
7.2 TF-A 概述..........................................................................................................................................227
7.2.1 TF-A 简介 ..................................................................................................................................227
7.2.2 ARMv7 和 ARMv8 权限等级 ....................................................................................................228
7.2.3 TF-A 不同启动阶段 ..................................................................................................................230
7.3 STM32MP1 中的 TF-A......................................................................................................................232
7.3.1 STM32MP1 TF-A 框架...............................................................................................................232
7.3.2 STM32MP1 TF-A 镜像存储映射...............................................................................................236
第八章 TF-A 启动流程详解 ...............................................................................................................237
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
11
STM32MP1
嵌入式 Linux 驱动开发指南
第九章 TF-A 移植 ...............................................................................................................................238
9.1 编译 ST 官方 TF-A 源码 ..................................................................................................................239
9.1.1 为什么要编译官方 TF-A 源码 ................................................................................................239
9.1.2 编译 TF-A .................................................................................................................................239
9.1.3 烧写 ST 官方 TF-A 镜像...........................................................................................................241
9.2 TF-A 移植..........................................................................................................................................242
9.2.1 新建自己开发板对应的设备树..............................................................................................242
9.2.2 修改设备树电源管理..............................................................................................................246
9.2.3 修改 TF 卡和 EMMC 设备树...................................................................................................251
9.2.4 修改 USB OTG 设备树 .............................................................................................................253
9.3 编译测试.........................................................................................................................................254
9.3.1 编译 .........................................................................................................................................254
9.3.2 烧写测试..................................................................................................................................254
9.3.3 xxx-serialboot.stm32 测试 ........................................................................................................258
第十章 U-BOOT 使用..........................................................................................................................260
10.1 U-BOOT 简介....................................................................................................................................261
10.2 U-BOOT 初次编译............................................................................................................................263
10.2.1 编译 .......................................................................................................................................263
10.2.2 烧写 .......................................................................................................................................265
10.3 U-BOOT 命令使用............................................................................................................................267
10.3.1 查询命令................................................................................................................................268
10.3.2 环境变量操作命令................................................................................................................270
10.3.3 内存操作命令........................................................................................................................271
10.3.4 网络操作命令........................................................................................................................274
10.3.5 EMMC 和 SD 卡操作命令.......................................................................................................280
10.3.6 EXT 格式文件系统操作命令..................................................................................................284
10.3.7 BOOT 操作命令 ......................................................................................................................287
10.3.8 UMS 命令................................................................................................................................291
10.3.9 其他常用命令........................................................................................................................292
10.3.10 MII 命令使用说明 ................................................................................................................293
第十一章 U-BOOT 顶层 MAKEFILE 详解.............................................................................................296
11.1 U-BOOT 工程目录分析....................................................................................................................297
11.2 U-BOOT 顶层 MAKEFILE 分析 ............................................................................................................305
11.2.1 版本号 ...................................................................................................................................305
11.2.2 MAKEFLAGS 变量....................................................................................................................305
11.2.3 命令输出................................................................................................................................306
11.2.4 静默输出................................................................................................................................308
11.2.5 设置编译结果输出目录........................................................................................................309
11.2.6 代码检查................................................................................................................................311
11.2.7 模块编译................................................................................................................................311
11.2.8 获取主机架构和系统............................................................................................................313
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
12
STM32MP1
嵌入式 Linux 驱动开发指南
11.2.9 设置目标架构、交叉编译器和配置文件............................................................................313
11.2.10 调用 scripts/Kbuild.include ..................................................................................................314
11.2.11 交叉编译工具变量设置......................................................................................................315
11.2.12 导出其他变量......................................................................................................................315
11.2.13 make xxx_defconfig 过程......................................................................................................319
11.2.14 Makefile.build 脚本分析.......................................................................................................324
11.2.15 make 过程.............................................................................................................................328
第十二章 U-BOOT 启动流程详解.......................................................................................................336
12.1 链接脚本 U-BOOT.LDS 详解.............................................................................................................337
12.2 U-BOOT 启动流程详解....................................................................................................................339
12.2.1 reset 函数源码详解................................................................................................................339
12.2.2 lowlevel_init 函数详解 ...........................................................................................................344
12.2.3 _main 函数详解......................................................................................................................347
12.2.4 board_init_f 函数详解............................................................................................................353
12.2.5 relocate_code 函数详解.........................................................................................................363
12.2.6 relocate_vectors 函数详解.....................................................................................................368
12.2.7 board_init_r 函数详解............................................................................................................369
12.2.8 run_main_loop 函数详解.......................................................................................................374
12.2.9 cli_loop 函数详解 ...................................................................................................................379
12.2.10 cmd_process 函数详解.........................................................................................................382
12.3 BOOTM 启动 LINUX 内核过程...........................................................................................................387
12.3.1 images 全局变量....................................................................................................................387
12.3.2 do_bootm 函数.......................................................................................................................389
12.3.3 do_bootm_states 函数 ...........................................................................................................390
12.3.4 bootm_os_get_boot_func 函数..............................................................................................399
12.3.5 do_bootm_linux 函数 .............................................................................................................400
第十三章 U-BOOT 移植......................................................................................................................404
13.1 ST 官方的 U-BOOT 编译测试 ..........................................................................................................405
13.1.1 ST 官方 uboot 源码打补丁.....................................................................................................405
13.1.2 编译 ST 官方 uboot 源码 ......................................................................................................406
13.1.3 烧写测试................................................................................................................................407
13.2 在 U-BOOT 中添加自己的开发板 ..................................................................................................408
13.2.1 创建默认配置文件................................................................................................................408
13.2.2 创建默认配置设备树............................................................................................................409
13.2.3 修改电源管理设置................................................................................................................410
13.2.4 修改 TF 卡和 EMMC 配置.....................................................................................................417
13.2.5 编译 uboot.............................................................................................................................418
13.2.6 网络驱动修改........................................................................................................................420
13.2.7 USB OTG 设备树修改 .............................................................................................................423
13.2.8 使能 boot 和 bootd 命令.......................................................................................................427
13.2.9 LCD 驱动修改..........................................................................................................................429
13.3 U-BOOT 测试....................................................................................................................................434
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
13
STM32MP1
嵌入式 Linux 驱动开发指南
13.3.1 自烧写测试............................................................................................................................434
13.3.2 从 EMMC 启动 Linux .............................................................................................................434
13.3.3 从网络启动 Linux 系统 .........................................................................................................436
13.3.4 LCD 测试 .................................................................................................................................438
13.4 BOOTCMD 和 BOOTARGS 环境变量......................................................................................................441
13.4.1 bootcmd 环境变量 .................................................................................................................441
13.4.2 bootargs 环境变量 .................................................................................................................444
第十四章 U-BOOT 图形化配置及其原理 ...........................................................................................446
14.1 U-BOOT 图形化配置体验................................................................................................................447
14.2 MENUCONFIG 图形化配置原理.........................................................................................................452
14.2.1 make menuconfig 过程分析...................................................................................................452
14.2.2 Kconfig 语法简介....................................................................................................................452
14.3 添加自定义菜单 ...........................................................................................................................464
第十五章 LINUX 内核顶层 MAKEFILE 详解 ........................................................................................467
15.1 LINUX 内核初次编译.......................................................................................................................468
15.2 LINUX 工程目录分析.......................................................................................................................470
15.3 顶层 MAKEFILE 详解........................................................................................................................476
15.3.1 make xxx_defconfig 过程........................................................................................................480
15.3.2 Makefile.build 脚本分析.........................................................................................................481
15.3.3 make 过程...............................................................................................................................483
15.3.4 built-in.o 文件编译生成过程 .................................................................................................488
15.3.5 make zImage 过程 ..................................................................................................................490
第十六章 LINUX 内核启动流程..........................................................................................................492
16.1 链接脚本 VMLINUX.LDS ....................................................................................................................493
16.2 LINUX 内核启动流程分析...............................................................................................................493
16.2.1 Linux 内核入口 stext...............................................................................................................493
16.2.2 __mmap_switched 函数.........................................................................................................495
16.2.3 start_kernel 函数 ....................................................................................................................497
16.2.4 rest_init 函数 ..........................................................................................................................501
16.2.5 init 进程 ..................................................................................................................................502
第十七章 LINUX 内核移植 .................................................................................................................507
17.1 LINUX 内核初次编译.......................................................................................................................508
17.1.1 编译正点原子出厂 Linux 源码 .............................................................................................508
17.1.2 运行测试................................................................................................................................508
17.2 编译 ST 官方 LINUX 系统 ...............................................................................................................509
17.2.1 ST 官方 Linux 源码打补丁......................................................................................................509
17.2.2 编译 ST 官方 Linux 源码........................................................................................................512
17.2.3 网络驱动修改........................................................................................................................513
17.2.4 启动测试................................................................................................................................514
17.3 在 LINUX 中添加自己的开发板 .....................................................................................................515
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
14
STM32MP1
嵌入式 Linux 驱动开发指南
17.3.1 添加开发板对应的默认配置文件........................................................................................515
17.3.2 添加开发板对应的设备树....................................................................................................515
17.3.3 关闭内核模块验证................................................................................................................522
17.3.4 关闭内核 log 信息时间戳.....................................................................................................524
17.3.5 编译测试................................................................................................................................525
17.4 烧写系统镜像到 EMMC 里面 ......................................................................................................525
17.4.1 系统镜像打包........................................................................................................................526
17.4.2 烧写到 EMMC........................................................................................................................527
17.5 根文件系统缺失错误 ...................................................................................................................528
第十八章 BUSYBOX 根文件系统构建.................................................................................................530
18.1 根文件系统简介 ...........................................................................................................................531
18.2 BUSYBOX 构建根文件系统 ..............................................................................................................533
18.2.1 BusyBox 简介 ..........................................................................................................................533
18.2.2 编译 BusyBox 构建根文件系统 ............................................................................................534
18.2.3 向根文件系统添加 lib 库......................................................................................................545
18.2.4 创建其他文件夹....................................................................................................................547
18.3 根文件系统初步测试 ...................................................................................................................547
18.3.1 修改 Ubuntu 的 nfs 版本配置...............................................................................................547
18.3.2 bootargs 环境变量设置 .........................................................................................................548
18.3.3 无法进入根文件系统............................................................................................................549
18.4 完善根文件系统 ...........................................................................................................................550
18.4.1 创建/etc/init.d/rcS 文件........................................................................................................550
18.4.2 创建/etc/fstab 文件...............................................................................................................551
18.4.3 创建/etc/inittab 文件 ............................................................................................................552
18.4.4 使能内核 uevet helper...........................................................................................................553
18.5 根文件系统其他功能测试 ...........................................................................................................554
18.5.1 软件运行测试........................................................................................................................554
18.5.2 中文字符测试........................................................................................................................556
18.5.3 开机自启动测试....................................................................................................................556
18.5.4 外网连接测试........................................................................................................................557
18.6 烧写根文件系统到 EMMC 中 ......................................................................................................558
18.6.1 根文件系统打包....................................................................................................................558
18.6.2 烧写到 EMMC........................................................................................................................560
第十九章 BUILDROOT 根文件系统构建.............................................................................................562
19.1 何为 BUILDROOT?...........................................................................................................................563
19.1.1 buildroot 简介.........................................................................................................................563
19.1.2 buildroot 下载.........................................................................................................................563
19.2 BUILDROOT 构建根文件系统............................................................................................................565
19.2.1 配置 buildroot........................................................................................................................565
19.2.2 编译 buildroot........................................................................................................................570
19.2.3 buildroot 根文件系统测试.....................................................................................................572
19.3 BUILDROOT 下的 BUSYBOX 配置..........................................................................................................572
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
15
STM32MP1
嵌入式 Linux 驱动开发指南
19.3.1 busybox 配置...........................................................................................................................572
19.3.2 busybox 中文字符的支持.......................................................................................................574
19.3.3 编译 busybox .........................................................................................................................574
19.4.3 使用自己的 busybox 源码.....................................................................................................575
19.4 BUILDROOT 第三方软件和库的配置 ................................................................................................576
19.4.1 使能 VSFTPD 服务 .................................................................................................................576
19.4.2 使能 SSH ................................................................................................................................576
19.5 BUILDROOT 根文件系统测试............................................................................................................577
19.5.1 depmod 命令测试 ..................................................................................................................577
19.5.2 vsftpd 测试..............................................................................................................................578
19.5.3 sshd 测试 ................................................................................................................................580
19.5.4 创建自启动文件....................................................................................................................583
19.5.5 显示路径................................................................................................................................584
19.5.6 使能 sysfs debug 目录...........................................................................................................586
19.6 烧写根文件系统到 EMMC 中 ......................................................................................................587
19.6.1 根文件系统打包....................................................................................................................587
19.6.2 烧写到 EMMC........................................................................................................................587
19.6.3 EMMC 启动测试.....................................................................................................................587
第三篇 ARM LINUX 驱动开发篇.........................................................................................................589
第二十章 字符设备驱动开发.............................................................................................................591
20.1 字符设备驱动简介 .......................................................................................................................592
20.2 字符设备驱动开发步骤 ...............................................................................................................594
20.2.1 驱动模块的加载和卸载........................................................................................................595
20.2.2 字符设备注册与注销............................................................................................................596
20.2.3 实现设备的具体操作函数....................................................................................................598
20.2.4 添加 LICENSE 和作者信息.....................................................................................................600
20.3 LINUX 设备号...................................................................................................................................600
20.3.1 设备号的组成........................................................................................................................600
20.3.2 设备号的分配........................................................................................................................601
20.4 CHRDEVBASE 字符设备驱动开发实验..............................................................................................602
20.4.1 实验程序编写........................................................................................................................602
20.4.2 编写测试 APP ........................................................................................................................609
20.4.3 编译驱动程序和测试 APP ....................................................................................................613
20.4.4 运行测试................................................................................................................................615
第二十一章 嵌入式 LINUX LED 驱动开发实验...................................................................................619
21.1 LINUX 下 LED 灯驱动原理...............................................................................................................620
21.1.1 地址映射................................................................................................................................620
21.1.2 I/O 内存访问函数...................................................................................................................622
21.2 硬件原理图分析 ...........................................................................................................................622
21.3 实验程序编写 ...............................................................................................................................623
21.3.1 LED 灯驱动程序编写..............................................................................................................623
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
16
STM32MP1
嵌入式 Linux 驱动开发指南
21.3.2 编写测试 APP ........................................................................................................................629
21.4 运行测试.......................................................................................................................................631
21.4.1 编译驱动程序和测试 APP ....................................................................................................631
21.4.2 运行测试................................................................................................................................631
第二十二章 新字符设备驱动实验 .....................................................................................................633
22.1 新字符设备驱动原理 ...................................................................................................................634
22.1.1 分配和释放设备号................................................................................................................634
22.1.2 新的字符设备注册方法........................................................................................................635
22.2 自动创建设备节点 .......................................................................................................................636
22.2.1 mdev 机制...............................................................................................................................636
22.2.1 创建和删除类........................................................................................................................637
22.2.2 创建设备................................................................................................................................637
22.2.3 参考示例................................................................................................................................638
22.3 设置文件私有数据 .......................................................................................................................639
22.4 硬件原理图分析 ...........................................................................................................................639
22.5 实验程序编写 ...............................................................................................................................639
22.5.1 LED 灯驱动程序编写..............................................................................................................640
22.5.2 编写测试 APP ........................................................................................................................647
22.6 运行测试.......................................................................................................................................647
22.6.1 编译驱动程序和测试 APP ....................................................................................................647
22.6.2 运行测试................................................................................................................................648
第二十三章 LINUX 设备树 .................................................................................................................650
23.1 什么是设备树? ...........................................................................................................................651
23.2 DTS、DTB 和 DTC...........................................................................................................................652
23.3 DTS 语法.........................................................................................................................................654
23.3.1 .dtsi 头文件.............................................................................................................................654
23.3.2 设备节点................................................................................................................................656
23.3.3 标准属性................................................................................................................................658
23.3.4 根节点 compatible 属性........................................................................................................662
23.3.5 向节点追加或修改内容........................................................................................................667
23.4 创建小型模板设备树 ...................................................................................................................670
23.5 设备树在系统中的体现 ...............................................................................................................674
23.6 特殊节点.......................................................................................................................................676
23.6.1 aliases 子节点.........................................................................................................................676
23.6.2 chosen 子节点 ........................................................................................................................676
23.7 LINUX 内核解析 DTB 文件...............................................................................................................679
23.8 绑定信息文档 ...............................................................................................................................679
23.9 设备树常用 OF 操作函数.............................................................................................................681
23.9.1 查找节点的 OF 函数 .............................................................................................................682
23.9.2 查找父/子节点的 OF 函数....................................................................................................683
23.9.3 提取属性值的 OF 函数 .........................................................................................................684
23.9.4 其他常用的 OF 函数 .............................................................................................................687
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
17
STM32MP1
嵌入式 Linux 驱动开发指南
第二十四章 设备树下的 LED 驱动实验 .............................................................................................691
24.1 设备树 LED 驱动原理 ...................................................................................................................692
24.2 硬件原理图分析 ...........................................................................................................................692
24.3 实验程序编写 ...............................................................................................................................692
24.3.1 修改设备树文件....................................................................................................................692
24.3.2 LED 灯驱动程序编写..............................................................................................................693
24.3.3 编写测试 APP ........................................................................................................................702
24.4.1 编译驱动程序和测试 APP ....................................................................................................702
24.4.2 运行测试................................................................................................................................702
第二十五章 PINCTRL 和 GPIO 子系统实验.........................................................................................704
25.1 PINCTRL 子系统 ................................................................................................................................705
25.1.1 pinctrl 子系统简介 .................................................................................................................705
25.1.2 STM32MP1 的 pinctrl 子系统驱动.........................................................................................705
25.1.3 设备树中添加 pinctrl 节点模板 ...........................................................................................713
25.2 GPIO 子系统.....................................................................................................................................715
25.2.1 gpio 子系统简介.....................................................................................................................715
25.2.2 STM32MP1 的 gpio 子系统驱动............................................................................................715
25.2.3 gpio 子系统 API 函数 .............................................................................................................717
25.2.4 设备树中添加 gpio 节点模板...............................................................................................719
25.2.5 与 gpio 相关的 OF 函数 ........................................................................................................719
25.3 硬件原理图分析 ...........................................................................................................................720
25.4 实验程序编写 ...............................................................................................................................720
25.4.1 修改设备树文件....................................................................................................................720
25.4.2 LED 灯驱动程序编写..............................................................................................................721
25.4.3 编写测试 APP ........................................................................................................................728
25.5 运行测试.......................................................................................................................................728
25.5.1 编译驱动程序和测试 APP ....................................................................................................728
25.5.2 运行测试................................................................................................................................728
第二十六章 LINUX 蜂鸣器实验..........................................................................................................730
26.1 蜂鸣器驱动原理 ...........................................................................................................................731
26.2 硬件原理图分析 ...........................................................................................................................731
26.3 实验程序编写 ...............................................................................................................................732
26.3.1 修改设备树文件....................................................................................................................732
26.3.2 蜂鸣器驱动程序编写............................................................................................................733
26.3.3 编写测试 APP ........................................................................................................................739
26.4 运行测试.......................................................................................................................................741
26.4.1 编译驱动程序和测试 APP ....................................................................................................741
26.4.2 运行测试................................................................................................................................741
第二十七章 LINUX 并发与竞争..........................................................................................................743
27.1 并发与竞争...................................................................................................................................744
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
18
STM32MP1
嵌入式 Linux 驱动开发指南
27.2 原子操作.......................................................................................................................................745
27.2.1 原子操作简介........................................................................................................................745
27.2.2 原子整形操作 API 函数 ........................................................................................................746
27.2.3 原子位操作 API 函数 ............................................................................................................747
27.3 自旋锁...........................................................................................................................................748
27.3.1 自旋锁简介............................................................................................................................748
27.3.2 自旋锁 API 函数 ....................................................................................................................749
27.3.3 其他类型的锁........................................................................................................................751
27.3.4 自旋锁使用注意事项............................................................................................................752
27.4 信号量...........................................................................................................................................753
27.4.1 信号量简介............................................................................................................................753
27.4.2 信号量 API 函数 ....................................................................................................................754
27.5 互斥体...........................................................................................................................................754
27.5.1 互斥体简介............................................................................................................................754
27.5.2 互斥体 API 函数 ....................................................................................................................755
第二十八章 LINUX 并发与竞争实验..................................................................................................756
28.1 原子操作实验 ...............................................................................................................................757
28.1.1 实验程序编写........................................................................................................................757
28.1.2 运行测试................................................................................................................................766
28.2 自旋锁实验...................................................................................................................................767
28.2.1 实验程序编写........................................................................................................................767
28.2.2 运行测试................................................................................................................................771
28.3 信号量实验...................................................................................................................................772
28.3.1 实验程序编写........................................................................................................................772
28.3.2 运行测试................................................................................................................................775
28.4 互斥体实验...................................................................................................................................776
28.4.1 实验程序编写........................................................................................................................776
28.4.2 运行测试................................................................................................................................779
第二十九章 LINUX 按键输入实验......................................................................................................781
29.1 LINUX 下按键驱动原理...................................................................................................................782
29.2 硬件原理图分析 ...........................................................................................................................782
29.3 实验程序编写 ...............................................................................................................................782
29.3.1 修改设备树文件....................................................................................................................782
29.3.2 按键驱动程序编写................................................................................................................783
29.3.3 编写测试 APP ........................................................................................................................790
29.4 运行测试.......................................................................................................................................791
29.4.1 编译驱动程序和测试 APP ....................................................................................................791
29.4.2 运行测试................................................................................................................................792
第三十章 LINUX 内核定时器实验.....................................................................................................793
30.1 LINUX 时间管理和内核定时器简介 ...............................................................................................794
30.1.1 内核时间管理简介................................................................................................................794
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
19
STM32MP1
嵌入式 Linux 驱动开发指南
30.1.2 内核定时器简介....................................................................................................................797
30.1.3 Linux 内核短延时函数 ...........................................................................................................799
30.2 硬件原理图分析 ...........................................................................................................................800
30.3 实验程序编写 ...............................................................................................................................800
30.3.1 修改设备树文件....................................................................................................................800
30.3.2 定时器驱动程序编写............................................................................................................800
30.3.3 编写测试 APP ........................................................................................................................808
30.4 运行测试.......................................................................................................................................810
30.4.1 编译驱动程序和测试 APP ....................................................................................................810
30.4.2 运行测试................................................................................................................................811
第三十一章 LINUX 中断实验..............................................................................................................812
31.1 LINUX 中断简介...............................................................................................................................813
31.1.1 Linux 中断 API 函数................................................................................................................813
31.1.2 上半部与下半部....................................................................................................................815
31.1.3 设备树中断信息节点............................................................................................................821
31.1.4
获取中断号.......................................................................................................................830
31.2 硬件原理图分析 ...........................................................................................................................831
31.3 实验程序编写 ...............................................................................................................................831
31.3.1 修改设备树文件....................................................................................................................831
31.3.2 按键中断驱动程序编写........................................................................................................832
31.3.2 编写测试 APP ........................................................................................................................840
31.4 运行测试.......................................................................................................................................842
31.4.1 编译驱动程序和测试 APP ....................................................................................................842
31.4.2 运行测试................................................................................................................................843
第三十二章 LINUX 阻塞和非阻塞 IO 实验.........................................................................................844
32.1 阻塞和非阻塞 IO...........................................................................................................................845
32.1.1 阻塞和非阻塞简介................................................................................................................845
32.1.2 等待队列................................................................................................................................846
32.1.3 轮询 .......................................................................................................................................848
32.1.4 Linux 驱动下的 poll 操作函数 ...............................................................................................852
32.2 阻塞 IO 实验 .................................................................................................................................853
32.2.1 硬件原理图分析....................................................................................................................853
32.2.2 实验程序编写........................................................................................................................853
32.2.3 运行测试................................................................................................................................856
32.3 非阻塞 IO 实验 .............................................................................................................................858
32.3.1 硬件原理图分析....................................................................................................................858
32.3.2 实验程序编写........................................................................................................................858
32.3.3 运行测试................................................................................................................................862
第三十三章 异步通知实验.................................................................................................................864
33.1 异步通知.......................................................................................................................................865
33.1.1 异步通知简介........................................................................................................................865
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
20
STM32MP1
嵌入式 Linux 驱动开发指南
33.1.2 驱动中的信号处理................................................................................................................867
33.1.3 应用程序对异步通知的处理................................................................................................869
33.2 硬件原理图分析 ...........................................................................................................................869
33.3 实验程序编写 ...............................................................................................................................869
33.3.1 修改设备树文件....................................................................................................................870
33.3.2 程序编写................................................................................................................................870
33.3.3 编写测试 APP ........................................................................................................................872
33.4 运行测试.......................................................................................................................................874
33.4.1 编译驱动程序和测试 APP ....................................................................................................874
33.4.2 运行测试................................................................................................................................875
第三十四章 PLATFORM 设备驱动实验 ..............................................................................................876
34.1 LINUX 驱动的分离与分层...............................................................................................................877
34.1.1 驱动的分隔与分离................................................................................................................877
34.1.2 驱动的分层............................................................................................................................879
34.2 PLATFORM 平台驱动模型简介 .........................................................................................................879
34.2.1 platform 总线..........................................................................................................................879
34.2.2 platform 驱动..........................................................................................................................881
34.2.3 platform 设备..........................................................................................................................886
34.3 硬件原理图分析 ...........................................................................................................................889
34.4 试验程序编写 ...............................................................................................................................889
34.4.1 platform 设备与驱动程序编写..............................................................................................889
34.4.2 测试 APP 编写 .......................................................................................................................899
34.5 运行测试.......................................................................................................................................901
34.5.1 编译驱动程序和测试 APP ....................................................................................................901
34.4.2 运行测试................................................................................................................................902
第三十五章 设备树下的 PLATFORM 驱动编写..................................................................................904
35.1 设备树下的 PLATFORM 驱动简介 ...................................................................................................905
35.1.1 修改 pinctrl-stm32.c 文件 .....................................................................................................905
35.1.2 创建设备的 pinctrl 节点 .......................................................................................................906
35.1.3 在设备树中创建设备节点....................................................................................................906
35.1.4 编写 platform 驱动的时候要注意兼容属性........................................................................907
35.2 检查引脚复用配置 .......................................................................................................................908
35.2.1 检查引脚 pinctrl 配置 ...........................................................................................................908
35.2.2 检查 GPIO 占用 .....................................................................................................................909
35.3 硬件原理图分析 ...........................................................................................................................909
35.4 实验程序编写 ...............................................................................................................................909
35.4.1 修改设备树文件....................................................................................................................910
35.4.2 platform 驱动程序编写..........................................................................................................910
35.4.3 编写测试 APP ........................................................................................................................916
35.5 运行测试.......................................................................................................................................916
35.5.1 编译驱动程序和测试 APP ....................................................................................................916
35.5.2 运行测试................................................................................................................................917
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
21
STM32MP1
嵌入式 Linux 驱动开发指南
第三十六章 LINUX 自带的 LED 灯驱动实验.......................................................................................918
36.1 LINUX 内核自带 LED 驱动使能.......................................................................................................919
36.2 LINUX 内核自带 LED 驱动简介.......................................................................................................920
36.2.1 LED 灯驱动框架分析..............................................................................................................920
36.2.2 module_platform_driver 函数简析 ........................................................................................921
36.2.3 gpio_led_probe 函数简析 ......................................................................................................922
36.3 设备树节点编写 ...........................................................................................................................925
36.4 运行测试.......................................................................................................................................926
第三十七章 LINUX MISC 驱动实验.....................................................................................................928
37.1 MISC 设备驱动简介.......................................................................................................................929
37.2 硬件原理图分析 ...........................................................................................................................930
37.3 实验程序编写 ...............................................................................................................................930
37.3.1 修改设备树............................................................................................................................930
37.3.2 beep 驱动程序编写................................................................................................................931
37.3.3 编写测试 APP ........................................................................................................................936
37.4 运行测试.......................................................................................................................................938
37.4.1 编译驱动程序和测试 APP ....................................................................................................938
37.4.2 运行测试................................................................................................................................938
第三十八章 LINUX INPUT 子系统实验...............................................................................................940
38.1 INPUT 子系统...................................................................................................................................941
38.1.1 input 子系统简介 ...................................................................................................................941
38.1.2 input 驱动编写流程 ...............................................................................................................941
38.1.3 input_event 结构体 ................................................................................................................947
38.2 硬件原理图分析 ...........................................................................................................................948
38.3 实验程序编写 ...............................................................................................................................948
38.3.1 修改设备树文件....................................................................................................................949
38.3.2 按键 input 驱动程序编写 .....................................................................................................949
38.3.3 编写测试 APP ........................................................................................................................955
38.4 运行测试.......................................................................................................................................957
38.4.1 编译驱动程序和测试 APP ....................................................................................................957
38.4.2 运行测试................................................................................................................................957
38.5 LINUX 自带按键驱动程序的使用 ...................................................................................................959
38.5.1 自带按键驱动程序源码简析................................................................................................959
38.5.2 自带按键驱动程序的使用....................................................................................................964
第三十九章 LINUX PWM 驱动实验....................................................................................................967
39.1 PWM 驱动简析..............................................................................................................................968
39.1.1 设备树下的 PWM 控制器节点.............................................................................................968
39.1.2 PWM 子系统...........................................................................................................................971
39.1.3 PWM 驱动源码分析...............................................................................................................972
39.2 PWM 驱动编写..............................................................................................................................978
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
22
STM32MP1
嵌入式 Linux 驱动开发指南
39.2.1 修改设备树............................................................................................................................978
39.2.2 使能 PWM 驱动.....................................................................................................................981
39.3 PWM 驱动测试..............................................................................................................................981
第四十章 LINUX LCD 驱动实验...........................................................................................................984
40.1 LCD 和 LTDC 简介...........................................................................................................................985
40.1.1 LCD 简介 .................................................................................................................................985
40.1.2 LTDC 接口................................................................................................................................991
40.2 DRM 驱动框架...............................................................................................................................992
40.2.1 DRM 简介................................................................................................................................992
40.2.2 ST 官方的 DRM 驱动框架介绍..............................................................................................993
40.3 RGB LCD 驱动分析(屏的驱动).......................................................................................................999
40.4 硬件原理图分析 .........................................................................................................................1004
40.5 LCD 驱动程序编写.......................................................................................................................1005
40.5.1 修改设备树..........................................................................................................................1005
40.5.2 在 panel-simple.c 文件里面添加屏幕参数.........................................................................1008
40.5.3 LCD 屏幕背光节点信息........................................................................................................1009
40.6 运行测试.....................................................................................................................................1012
40.6.1 LCD 屏幕的 DRM 基本测试..................................................................................................1012
40.6.2 LCD 屏幕的 FB 基本测试......................................................................................................1015
40.6.3 设置 LCD 作为终端控制台..................................................................................................1018
40.6.4 LCD 背光调节........................................................................................................................1020
第四十一章 LINUX I2C 驱动实验...................................................................................................... 1022
41.1 I2C & AP3216C 简介.....................................................................................................................1023
41.1.1 I2C 简介 ................................................................................................................................1023
41.1.2 STM32MP1 I2C 简介............................................................................................................1025
41.1.3 AP3216C 简介.......................................................................................................................1026
41.2 LINUX I2C 总线框架简介...............................................................................................................1027
41.2.1 I2C 总线驱动........................................................................................................................1028
41.2.2 I2C 总线设备.........................................................................................................................1031
41.2.3 I2C 设备和驱动匹配过程....................................................................................................1034
41.3 STM32MP1 I2C 适配器驱动分析................................................................................................1036
41.4 I2C 设备驱动编写流程................................................................................................................1042
41.4.1 I2C 设备信息描述.................................................................................................................1042
41.4.2 I2C 设备数据收发处理流程.................................................................................................1043
41.5 硬件原理图分析 .........................................................................................................................1046
41.6 实验程序编写 .............................................................................................................................1047
41.6.1 修改设备树..........................................................................................................................1047
41.6.2 AP3216C 驱动编写 ...............................................................................................................1049
41.6.3 编写测试 APP ......................................................................................................................1059
41.7 运行测试.....................................................................................................................................1060
41.7.1 编译驱动程序和测试 APP ..................................................................................................1060
41.7.2 运行测试..............................................................................................................................1061
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
23
STM32MP1
嵌入式 Linux 驱动开发指南
第四十二章 RGB 转 HDMI 实验 ....................................................................................................... 1062
42.1 RGB 转 HMDI 简介.......................................................................................................................1063
42.2 硬件原理图分析 .........................................................................................................................1063
42.3 实验驱动编写 .............................................................................................................................1064
42.3.1 修改设备树..........................................................................................................................1064
42.3.2 使能内核自带的 sii902x 驱动.............................................................................................1067
42.4 RGB 转 HDMI 测试.......................................................................................................................1067
第四十三章 LINUX RTC 驱动实验..................................................................................................... 1069
43.1 LINUX 内核 RTC 驱动简介.............................................................................................................1070
43.2 STM32MP1 内部 RTC 驱动分析 ..................................................................................................1074
43.3 RTC 时间查看与设置...................................................................................................................1078
43.3.1 使能内部 RTC.......................................................................................................................1078
43.3.2 查看时间..............................................................................................................................1078
第四十四章 外置 RTC 芯片 PCF8563 实验 ....................................................................................... 1080
44.1 PCF8563 简介...............................................................................................................................1081
44.1.1 PCF8563 简介........................................................................................................................1081
44.1.2 PCF8563 寄存器详解............................................................................................................1082
44.2 硬件原理图分析 .........................................................................................................................1084
44.3 实验驱动编写 .............................................................................................................................1084
44.3.1 修改设备树..........................................................................................................................1084
44.3.2 PCF8563 驱动使能................................................................................................................1086
44.4 运行测试.....................................................................................................................................1087
44.5 PCF8563 驱动分析.......................................................................................................................1087
第四十五章 LINUX SPI 驱动实验...................................................................................................... 1092
45.1 SPI & ICM-20608 简介..................................................................................................................1093
45.1.1 SPI 简介.................................................................................................................................1093
45.1.2 STM32MP1 SPI 简介 .............................................................................................................1094
45.1.3 ICM-20608 简介....................................................................................................................1095
45.2 LINUX 下 SPI 驱动框架 ..................................................................................................................1098
45.2.1 SPI 主机驱动.........................................................................................................................1098
45.2.2 SPI 设备驱动.........................................................................................................................1101
45.2.3 SPI 设备和驱动匹配过程.....................................................................................................1103
45.3 STM32MP1 SPI 主机驱动分析.....................................................................................................1104
45.4 SPI 设备驱动编写流程 ................................................................................................................1107
45.4.1 SPI 设备信息描述.................................................................................................................1107
45.4.2 SPI 从机设备数据收发处理流程.........................................................................................1108
45.5 硬件原理图分析 .........................................................................................................................1111
45.6 实验程序编写 .............................................................................................................................1111
45.6.1 修改设备树..........................................................................................................................1112
45.6.2 编写 ICM20608 驱动...........................................................................................................1113
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
24
STM32MP1
嵌入式 Linux 驱动开发指南
45.6.3 编写测试 APP ......................................................................................................................1125
45.7 运行测试.....................................................................................................................................1127
45.7.1 编译驱动程序和测试 APP ..................................................................................................1127
45.7.2 运行测试..............................................................................................................................1129
第四十六章 LINUX RS232/485/GPS 驱动实验.................................................................................. 1131
46.1 LINUX 下 UART 驱动框架 ..............................................................................................................1132
46.2 STM32MP1 UART 驱动分析.........................................................................................................1135
46.3 硬件原理图分析 .........................................................................................................................1141
46.4 RS232 驱动编写...........................................................................................................................1142
46.5 移植 MINICOM ...............................................................................................................................1144
46.6 RS232 驱动测试...........................................................................................................................1146
46.6.1 RS232 连接设置....................................................................................................................1146
46.6.2 minicom 设置........................................................................................................................1147
46.6.3 RS232 收发测试....................................................................................................................1150
46.7 RS485 测试...................................................................................................................................1151
46.7.1 RS485 连接设置....................................................................................................................1151
46.7.2 RS485 收发测试....................................................................................................................1152
46.8 GPS 测试.......................................................................................................................................1153
46.8.1 GPS 连接设置 .......................................................................................................................1153
46.8.2 GPS 数据接收测试 ...............................................................................................................1155
第四十七章 多点电容触摸屏实验 ................................................................................................... 1156
47.1 多点电容触摸简介 .....................................................................................................................1157
47.2 LINUX 下电容触摸屏驱动框架简介 .............................................................................................1158
47.2.1 多点触摸(MT)协议详解......................................................................................................1158
47.2.2 Type A 触摸点信息上报时序...............................................................................................1160
47.2.3 Type B 触摸点信息上报时序 ...............................................................................................1162
47.2.4 MT 其他事件的使用 ............................................................................................................1164
47.2.5 多点触摸所使用到的 API 函数 ..........................................................................................1164
47.2.6 多点电容触摸驱动框架......................................................................................................1166
47.3 硬件原理图分析 .........................................................................................................................1170
47.4 试验程序编写 .............................................................................................................................1171
47.4.1 添加 FT5426 设备节点........................................................................................................1171
47.4.2 编写多点电容触摸驱动......................................................................................................1172
47.5 运行测试.....................................................................................................................................1180
47.5.1 编译驱动程序......................................................................................................................1180
47.5.2 运行测试..............................................................................................................................1181
47.5.3 将驱动添加到内核中..........................................................................................................1182
47.6 TSLIB 移植与使用 ..........................................................................................................................1183
47.6.1 tslib 移植...............................................................................................................................1183
47.6.2 tslib 测试...............................................................................................................................1184
47.7 使用内核自带的驱动 .................................................................................................................1186
47.8 4.3 寸屏触摸驱动实验................................................................................................................1188
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
25
STM32MP1
嵌入式 Linux 驱动开发指南
第四十八章 LINUX 音频驱动实验................................................................................................... 1190
48.1 音频接口简介 .............................................................................................................................1191
48.1.1 为何需要音频编解码芯片?..............................................................................................1191
48.1.2 CS42L51 简介.......................................................................................................................1191
48.1.3 I2S 总线接口.........................................................................................................................1192
48.1.4 STM32MP1 SAI 总线接口.....................................................................................................1194
48.2 硬件原理图分析 .........................................................................................................................1194
48.3 音频驱动使能 .............................................................................................................................1195
48.3.1 修改设备树..........................................................................................................................1195
48.3.2 使能或修改内核的 CS42L51 驱动 ......................................................................................1201
48.4 ALSA-LIB 和 ALSA-UTILS 移植.............................................................................................................1204
48.5 声卡设置与测试 .........................................................................................................................1205
48.5.1 amixer 使用方法...................................................................................................................1205
48.5.2 音乐播放测试......................................................................................................................1208
48.5.3 MIC 录音测试 .......................................................................................................................1209
48.5.4 PHONE 录音测试..................................................................................................................1210
48.6 开机自动配置声卡 .....................................................................................................................1210
48.7 ALSAMIXER 简介 ..............................................................................................................................1211
第四十九章 LINUX CAN 驱动实验.................................................................................................... 1213
49.1 CAN 协议简析..............................................................................................................................1214
49.1.1 何为 CAN?..........................................................................................................................1214
49.1.2 CAN 电气属性.......................................................................................................................1215
49.1.3 CAN 协议...............................................................................................................................1216
49.1.4 CAN 速率...............................................................................................................................1222
49.1.5 CAN FD 简介 .........................................................................................................................1224
49.1.6 STM32MP1 FDCAN 简介.......................................................................................................1225
49.2 硬件原理图分析 .........................................................................................................................1226
49.3 实验程序编写 .............................................................................................................................1227
49.3.1 修改设备树..........................................................................................................................1227
49.3.2 修复 m_can_platform.c .......................................................................................................1228
49.3.3 使能 Linux 内核自带的 FDCAN 驱动 ..................................................................................1228
49.4 CAN 测试......................................................................................................................................1230
49.4.1 检查 CAN 网卡设备是否存在.............................................................................................1230
49.4.2 移植 iproute2 和 can-utils 工具 ..........................................................................................1230
49.4.3 CAN 通信测试.......................................................................................................................1232
49.4.4 CAN 500K 收发异常处理方法..............................................................................................1234
第五十章 LINUX USB 驱动实验 ........................................................................................................ 1235
50.1 USB 接口简介 ..............................................................................................................................1236
50.1.1 什么是 USB?......................................................................................................................1236
50.1.2 USB 电气特性.......................................................................................................................1237
50.1.3 USB 拓扑结构.......................................................................................................................1238
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
26
STM32MP1
嵌入式 Linux 驱动开发指南
50.1.4 什么是 USB OTG? ..............................................................................................................1239
50.1.5 STM32MP1 USB 接口简介....................................................................................................1240
50.1.6 USB TYPEC 电气属性...................................................................................................................1241
50.2 硬件原理图分析 .........................................................................................................................1243
50.2.1 USB HUB 原理图分析...........................................................................................................1244
50.2.2 USB OTG 原理图分析 ...........................................................................................................1245
50.3 USB 协议简析 ..............................................................................................................................1246
50.3.1 USB 描述符...........................................................................................................................1246
50.3.2 USB 数据包类型 ...................................................................................................................1249
50.3.3 USB 传输类型.......................................................................................................................1251
50.3.4 USB 枚举...............................................................................................................................1252
50.4 STM32MP1 USB HOST 驱动编写..................................................................................................1252
50.5 LINUX 内核自带 HOST 实验 ..........................................................................................................1255
50.5.1 USB 鼠标键盘测试 ...............................................................................................................1255
50.5.2 U 盘实验...............................................................................................................................1258
50.6 LINUX 内核自带 USB OTG 实验.....................................................................................................1260
50.6.1 STUSB1600 设备树编写 .......................................................................................................1260
50.6.2 FUSB302 驱动移植 ...............................................................................................................1264
50.6.3 OTG 主机实验.......................................................................................................................1266
50.6.4 OTG 从机实验.......................................................................................................................1266
第五十一章 LINUX 块设备驱动实验................................................................................................ 1271
51.1 什么是块设备 .............................................................................................................................1272
51.2 块设备驱动框架 .........................................................................................................................1272
51.2.1 block_device 结构体.............................................................................................................1272
51.2.2 gendisk 结构体 ....................................................................................................................1274
51.2.3 block_device_operations 结构体..........................................................................................1276
51.2.4 块设备 I/O 请求过程 ..........................................................................................................1277
51.3 使用请求队列实验 .....................................................................................................................1284
51.3.1 实验程序编写......................................................................................................................1284
51.3.2 运行测试..............................................................................................................................1292
51.4 不使用请求队列实验 .................................................................................................................1294
51.4.1 实验程序编写......................................................................................................................1294
51.4.2 运行测试..............................................................................................................................1296
第五十二章 LINUX 网络设备驱动实验 ............................................................................................ 1297
52.1 嵌入式网络简介 .........................................................................................................................1298
52.1.1 嵌入式下的网络硬件接口..................................................................................................1298
52.1.2 MII/RMII、GMII/RGMII 接口................................................................................................1300
52.1.3 MDIO 接口 ............................................................................................................................1302
52.1.4 RJ45 接口..............................................................................................................................1302
52.1.5 STM32MP1 GMAC 接口简介................................................................................................1303
52.2 PHY 芯片详解 ..............................................................................................................................1304
52.2.1 PHY 基础知识简介 ...............................................................................................................1304
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
27
STM32MP1
嵌入式 Linux 驱动开发指南
52.2.2 RTL8211F-CG 详解 ................................................................................................................1305
52.2.3 YT8511C 详解........................................................................................................................1311
52.3 LINUX 内核网络驱动框架.............................................................................................................1313
52.3.1 net_device 结构体 ................................................................................................................1313
52.3.2 net_device_ops 结构体.........................................................................................................1319
52.3.3 sk_buff 结构体......................................................................................................................1321
52.3.4 网络 NAPI 处理机制............................................................................................................1327
52.4 原理图介绍.................................................................................................................................1329
52.5 STM32MP1 网络驱动简介 ..........................................................................................................1330
52.5.1 STM32MP1 网络外设设备树 ...............................................................................................1330
52.5.2 STM32MP1 网络驱动源码简析 ...........................................................................................1332
52.5.3 stmmac_netdev_ops 操作集 ................................................................................................1345
52.5.4 Linux 内核 PHY 子系统与 MDIO 总线简析..........................................................................1352
52.5.5 RTL8211F PHY 驱动...............................................................................................................1359
52.5.6 YT8511 PHY 驱动 ..................................................................................................................1361
52.6 网络驱动实验测试 .....................................................................................................................1363
52.6.1 RTL8211F PHY 驱动测试.......................................................................................................1363
52.6.2 YT8511C PHY 驱动测试 ........................................................................................................1363
52.6.3 千兆以太网网速测试..........................................................................................................1364
第五十三章 LINUX WIFI 驱动实验.................................................................................................... 1367
53.1 硬件原理图分析 .........................................................................................................................1368
53.2 WIFI 驱动添加与编译..................................................................................................................1368
53.2.1 向 Linux 内核添加 WIFI 驱动..............................................................................................1369
53.2.2 配置 USB 支持设备.............................................................................................................1370
53.2.3 设备树的配置......................................................................................................................1372
53.2.4 编译 WIFI 驱动 ....................................................................................................................1374
53.2.5 驱动加载测试......................................................................................................................1375
53.3 WIFI 联网测试..............................................................................................................................1378
53.3.1 buildroot WIFI 工具配置.......................................................................................................1378
53.3.2 WIFI 工具测试 ......................................................................................................................1379
53.3.3 RTL8723 SDIO WIFI 联网测试...............................................................................................1381
53.3.4 RTL8188 USB WIFI 联网测试 ................................................................................................1383
第五十四章 LINUX 4G 通信实验 ...................................................................................................... 1385
54.1 4G 网络连接简介 ........................................................................................................................1386
54.2 高新兴 ME3630 4G 模块实验.....................................................................................................1388
54.2.1 ME3630 4G 模块简介...........................................................................................................1388
54.2.2 ME3630 4G 模块驱动修改...................................................................................................1389
54.2.3 ME3630 4G 模块 ppp 联网测试...........................................................................................1393
54.2.4 ME3630 4G 模块 ECM 联网测试..........................................................................................1398
54.2.5 ME3630 4G 模块 GNSS 定位测试 ........................................................................................1400
54.3 EC20 4G 模块实验........................................................................................................................1401
54.3.1 EC20 4G 模块简介 ................................................................................................................1401
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
28
STM32MP1
嵌入式 Linux 驱动开发指南
54.3.2 EC20 4G 模块驱动修改 ........................................................................................................1402
54.3.3 EC20 ppp 拨号上网...............................................................................................................1405
54.3.4 移远 GobiNET 驱动移植......................................................................................................1408
54.3.4 EC20 上网测试......................................................................................................................1410
第五十五章 REGMAP API 实验......................................................................................................... 1412
55.1 REGMAP API 简介...........................................................................................................................1413
55.1.1 什么是 Regmap ...................................................................................................................1413
55.1.2 Regmap 驱动框架 ................................................................................................................1413
55.1.3 Regmap 操作函数 ................................................................................................................1418
55.1.4 regmap_config 掩码设置 .....................................................................................................1420
55.2 实验程序编写 .............................................................................................................................1421
55.3 运行测试.....................................................................................................................................1425
第五十六章 LINUX IIO 驱动实验...................................................................................................... 1427
56.1 IIO 子系统简介 ............................................................................................................................1428
56.1.1 iio_dev ...................................................................................................................................1428
56.1.2 iio_info ..................................................................................................................................1431
56.1.3 iio_chan_spec........................................................................................................................1433
56.2 IIO 驱动框架创建 ........................................................................................................................1436
56.2.1 基础驱动框架建立..............................................................................................................1436
56.2.2 IIO 设备申请与初始化 .........................................................................................................1438
56.3 实验程序编写 .............................................................................................................................1442
56.3.1 ICM20608 的 IIO 驱动框架搭建...........................................................................................1442
56.3.2 完善 icm20608_read_raw 函数 ..........................................................................................1454
56.3.3 完善 icm20608_write_raw 函数 .........................................................................................1461
56.4 测试应用程序编写 .....................................................................................................................1465
56.4.1 linux 文件流读取..................................................................................................................1465
56.4.2 编写测试 APP ......................................................................................................................1467
56.4.3 运行测试..............................................................................................................................1472
56.5 IIO 触发缓冲区 ............................................................................................................................1473
56.5.1 IIO 触发器.............................................................................................................................1473
56.5.2 IIO 缓冲区.............................................................................................................................1475
56.6 向驱动程序添加触发缓冲功能 .................................................................................................1476
56.6.1 修改设备树..........................................................................................................................1476
56.6.2 驱动程序编写......................................................................................................................1476
56.7 触发缓冲测试 .............................................................................................................................1480
56.7.1 缓冲区接口文件..................................................................................................................1481
56.7.2 触发器接口文件..................................................................................................................1482
56.7.3 缓冲区数据读取..................................................................................................................1483
56.7.4 触发缓冲测试 APP 编写测试 .............................................................................................1484
第五十七章 LINUX ADC 驱动实验.................................................................................................... 1491
57.1 ADC 简介......................................................................................................................................1492
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
29
STM32MP1
嵌入式 Linux 驱动开发指南
57.1.1 什么是 ADC..........................................................................................................................1492
57.1.2 STM32MP157 ADC 简介 .......................................................................................................1492
57.2 ADC 驱动源码简析 ......................................................................................................................1493
57.2.1 设备树下的 ADC 节点.........................................................................................................1493
57.2.2 ADC 驱动源码分析...............................................................................................................1495
57.3 硬件原理图分析 .........................................................................................................................1500
57.4 ADC 驱动编写..............................................................................................................................1500
57.4.1 修改设备树..........................................................................................................................1500
57.4.2 使能 ADC 驱动.....................................................................................................................1501
57.4.3 编写测试 APP ......................................................................................................................1502
57.5 运行测试.....................................................................................................................................1506
57.5.1 编译驱动程序和测试 APP ..................................................................................................1506
57.5.2 运行测试..............................................................................................................................1506
第五十八章 LINUX DAC 驱动实验 .................................................................................................... 1508
58.1 DAC 简介 ......................................................................................................................................1509
58.2 DAC 驱动源码分析 ......................................................................................................................1510
58.2.1 设备树下的 DAC 节点.........................................................................................................1510
58.2.2 DAC 驱动源码分析...............................................................................................................1512
58.3 硬件原理图分析 .........................................................................................................................1514
58.4 DAC 驱动编写 ..............................................................................................................................1515
58.4.1 修改设备树..........................................................................................................................1515
58.4.2 使能 DAC 驱动.....................................................................................................................1516
58.4.3 编写测试 APP ......................................................................................................................1516
58.5 运行测试.....................................................................................................................................1523
58.5.1 编译驱动程序和测试 APP ..................................................................................................1523
58.5.2 运行测试..............................................................................................................................1523
第五十九章 LINUX 单总线驱动实验................................................................................................ 1525
59.1 DS18B20 及工作时序简介...........................................................................................................1526
59.1.1 DS18B20 简介.......................................................................................................................1526
59.1.2 DS18B20 时序简介 ...............................................................................................................1527
59.2 DHT11 及工作时序简介 ..............................................................................................................1528
59.2.1 DHT11 简介...........................................................................................................................1528
59.2.2 DHT11 工作时序简介...........................................................................................................1529
59.3 硬件原理图分析 .........................................................................................................................1530
59.4 DS18B20 实验编写 ......................................................................................................................1531
59.4.1 设备树的配置......................................................................................................................1531
59.4.2 ds18b20 驱动编写................................................................................................................1532
59.4.3 编写测试 APP ......................................................................................................................1540
59.5 DHT11 实验编写..........................................................................................................................1541
59.5.1 设备树的配置......................................................................................................................1541
59.5.2 dht11 驱动编写 ....................................................................................................................1541
59.5.3 编写测试 APP ......................................................................................................................1544
原子哥在线教学:www.yuanzige.com
论坛:www.openedv.com
30
STM32MP1
嵌入式 Linux 驱动开发指南
59.6 DS18B20 运行测试 ......................................................................................................................1545
59.6.1 编译驱动程序和 APP ..........................................................................................................1545
59.6.2 运行测试..............................................................................................................................1545
59.7 DHT11 运行测试 ...........................................................................................................................1546
59.7.1 编译驱动程序和 APP ..........................................................................................................1546
59.7.2 运行测试..............................................................................................................................1546

实例下载地址

STM32MP1嵌入式Linux驱动开发指南V2.0

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

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

查看所有0条评论>>

小贴士

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

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

关于好例子网

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

;
报警