一. 简介
前面几篇文章学习了 Linux内核中 针对 GPIO而言,提供的pinctrl子系统与gpio子系统。
本文开始学习如何利用 Linux内核的 pinctrl子系统,与 gpio子系统提供的 API函数,开发 Led驱动实验。
本文首先来学习向设备树文件中添加Led设备节点信息。
二. 向设备树文件添加Led设备节点
因为我这里所使用的开发板是 正点原子提供的 nand-Flash版的 ALPHA开发板。所以,对应设备树源文件为(NXP官方的提供的 Linux内核源码) imx6ull-alientek-nand.dts。
打开 移植的 Linux内核源码(NXP官方提供的),为了创建的 Led设备节点更方便的在开发板启动后系统下找到,所以,这里打算将 Led灯的设备节点创建在设备树的根目录下。
1. 查找 设备树根节点
打开 设备树源文件 imx6ull-alientek-nand.dts,该文件调用了:
#include "imx6ull-14x14-evk-gpmi-weim.dts"
于是打开 imx6ull-14x14-evk-gpmi-weim.dts 文件,该文件中代码可以确定,依然没有到设备树的根目录。该文件调用了:
#include "imx6ull-14x14-evk.dts"
打开 imx6ull-14x14-evk.dts文件,该文件中可以看出,这里存在设备树的根目录。所以,可以在 imx6ull-14x14-evk.dts设备树文件下,添加 Led设备节点信息。
在 imx6ull-14x14-evk.dts文件的设备树根节点最后,位置如下:
/dts-v1/;#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"/ {
.........
};
imx6ull-14x14-evk.dts文件的设备树根节点最后。即在 "/ {};" 上面大括号的内部最下面。
2. 添加Led设备节点信息
经过以上的分析。确定在 imx6ull-14x14-evk.dts设备树文件中添加 Led设备节点。
(1) 添加 led灯的 pinctrl节点信息
注意:这里可以仿照 “imx6ul-evk” 子节点下的其他设备节点进行更改!
/*WeiWuXian//2024/01/25 */pinctrl_gpioled: ledgrp{fsl,pins = <MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0X10B0>;};
(2) 添加 led灯的 gpio节点信息
在imx6ull-14x14-evk.dts文件中,设备树的根节点 “/” 下创建 LED 灯节点,节点名为“gpioled”,节点内容如下:
/* WeiWuXian/2024/01/25*/gpioled{compatible = "alientek, gpioled";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpioled>;led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;status = "okay";};
三. 编译 设备树文件
ubuntu终端进入 以上的 Linux内核源码根目录,输入 "make dtbs" 命令编译设备树文件:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ make dtbsCHK include/config/kernel.releaseCHK include/generated/uapi/linux/version.hCHK include/generated/utsrelease.h
make[1]: “include/generated/mach-types.h”已是最新。CHK include/generated/bounds.hCHK include/generated/asm-offsets.hCALL scripts/checksyscalls.shDTC arch/arm/boot/dts/imx6ull-14x14-evk.dtbDTC arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dtbDTC arch/arm/boot/dts/imx6ull-14x14-evk-emmc.dtbDTC arch/arm/boot/dts/imx6ull-14x14-evk-gpmi-weim.dtbDTC arch/arm/boot/dts/imx6ull-alientek-nand.dtbDTC arch/arm/boot/dts/imx6ull-14x14-evk-usb-certi.dtb
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$
可以看出,设备树文件已重新编译成功,下一篇文章对编译好的设备树文件进行测试。