LV09-01-pinctrl和gpio子系统-05-虚拟GPIO控制器实例
来写一个虚拟的GPIO控制器?若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
PC端开发环境 | Windows | Windows11 |
Ubuntu | Ubuntu20.04.2的64位版本 | |
VMware® Workstation 17 Pro | 17.6.0 build-24238078 | |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) | |
Win32DiskImager | Win32DiskImager v1.0 | |
Linux开发板环境 | Linux开发板 | 正点原子 i.MX6ULL Linux 阿尔法开发板 |
uboot | NXP官方提供的uboot,使用的uboot版本为U-Boot 2019.04 | |
linux内核 | linux-4.19.71(NXP官方提供) |
点击查看本文参考资料
分类 | 网址 | 说明 |
官方网站 | https://www.arm.com/ | ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档 |
https://www.nxp.com.cn/ | NXP官方网站 | |
https://www.nxpic.org.cn/ | NXP 官方社区 | |
https://u-boot.readthedocs.io/en/latest/ | u-boot官网 | |
https://www.kernel.org/ | linux内核官网 |
点击查看相关文件下载
分类 | 网址 | 说明 |
NXP | https://github.com/nxp-imx | NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库 |
nxp-imx/linux-imx/releases/tag/v4.19.71 | NXP linux内核仓库tags中的v4.19.71 | |
nxp-imx/uboot-imx/releases/tag/rel_imx_4.19.35_1.1.0 | NXP u-boot仓库tags中的rel_imx_4.19.35_1.1.0 | |
I.MX6ULL | i.MX 6ULL Applications Processors for Industrial Products | I.MX6ULL 芯片手册(datasheet,可以在线查看) |
i.MX 6ULL Applications ProcessorReference Manual | I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网) | |
Source Code | https://elixir.bootlin.com/linux/latest/source | linux kernel源码 |
kernel/git/stable/linux.git - Linux kernel stable tree | linux kernel源码(官网,tag 4.19.71) | |
https://elixir.bootlin.com/u-boot/latest/source | uboot源码 |
一、虚拟GPIO控制器
1. 硬件功能
假设这个虚拟的GPIO Controller有4个引脚,和前面的虚拟pinctrl硬件功能一样。

2. 编写设备树文件
2.1 GPIO控制器
1 | gpio_virt: virtual_gpiocontroller { |
- gpio-controller 属性用于标识一个设备节点作为 GPIO 控制器。 GPIO 控制器是负责管理和控制 GPIO 引脚的硬件模块或驱动程序。
- #gpio-cells 用于指定 GPIO 引脚描述符的编码方式。值是一个整数, 表示用于编码 GPIO 引脚描述符的单元数。 通常,这个值为 2,这样每个引脚描述属性中会有两个整数:
1 | client-gpios = <&gpio_virt 2 GPIO_ACTIVE_LOW>; // 2和GPIO_ACTIVE_LOW就是那两个整数 |
- ngpios 属性指定了 GPIO 控制器所支持的 GPIO 引脚数量。 它表示该设备上可用的 GPIO 引脚的总数。
2.2 client_node
再写一个节点使用上面的GPIO控制器:
1 | client-node { |
gpio 引脚描述属性个数由#gpio-cells 所决定, 因为 gpio0 节点中的#gpio-cells 属性设置为了2, 所以上面设备树 gpio 引脚描述属性个数也为 2。第一个表示gpio的编号,第二个表示gpio的电平状态。
3. 编写驱动程序
3.1 虚拟gpio控制器驱动
核心:分配/设s置/注册一个gpio_chip结构体。
3.2 led设备驱动
这个就是和之前一样,可以驱动led灯的那种就可以,前面设备树已经写了led的节点,就可以用平台设备驱动来写。
二、虚拟GPIO控制器调试
这里主要就是可以参考《LV09-01-pinctrl和gpio子系统-04-gpio控制与调试.md》了。