网站开发工程师代码,汽车网站代码,帮别人做网站多少钱,电子印章在线制作生成器一. 简介
前面几篇文章学习了 Linux内核中 针对 GPIO而言#xff0c;提供的pinctrl子系统与gpio子系统。
本文开始学习如何利用 Linux内核的 pinctrl子系统#xff0c;与 gpio子系统提供的 API函数#xff0c;开发 Led驱动实验。
本文首先来学习向设备树文件中添加Led设…一. 简介
前面几篇文章学习了 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节点信息 打开 imx6ull-14x14-evk.dts文件 同一个外设的 PIN 都放到一个节点里面在 iomuxc 节点 中的 “ imx6ul-evk ” 子节点下添加 “ pinctrl_gpioled ” 节点注意节点前缀一定要为 “ pinctrl_ ”。 注意这里可以仿照 “imx6ul-evk” 子节点下的其他设备节点进行更改 添 加完成以后如下所示 /*WeiWuXian//2024/01/25 */pinctrl_gpioled: ledgrp{fsl,pins MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0X10B0;}; 第 4 行将 GPIO1_IO03 这个 PIN 复用为 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;}; 第 5 行 pinctrl-0 属性设置 LED 灯所使用的 PIN 对应的 pinctrl 节点。 第 6 行 led-gpio 属性指定了 LED 灯所使用的 GPIO 在这里就是 GPIO1 的 IO03低电平有效硬件原理图中Led所使用的 IO为 GPIO01-03。 三. 编译 设备树文件
ubuntu终端进入 以上的 Linux内核源码根目录输入 make dtbs 命令编译设备树文件
wangtianwangtian-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
wangtianwangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ 可以看出设备树文件已重新编译成功下一篇文章对编译好的设备树文件进行测试。