设备树下Led驱动实验-向设备树文件添加Led设备节点

发布时间:2024年01月16日

一. 简介

前面简单学习了设备树文件的内容,语法,以及如何向设备树文件中添加设备节点信息。学习了驱动开发时,会使用到的设备树常用OF操作函数。本文我们就开始第一个基于设备树的 Linux 驱动实验-LED驱动实现。
本文具体学习在设备树文件添加设备节点信息,搭建 LED驱动代码框架。

二.? 设备树下Led驱动代码框架搭建

1. 向设备树文件中添加LED设备节点

打开 移植的 Linux内核源码(NXP官方提供的),因为这里所使用的开发板是 正点原子提供的 nand-Flash版的 ALPHA开发板。所以,对应设备树源文件为?imx6ull-alientek-nand.dts。

为了创建的设备节点更方便的在开发板的目录下找到,所以,这里打算将 Led灯的设备节点创建在设备树的根目录下。

打开 设备树源文件 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文件的设备树根节点最后。即在 "/ {};" 上面大括号的内部最下面。

添加如下设备节点:

/* LingXueWu/2024/01/16 */
    alpha_led{
        compatible = "alientek,alpha_led";
        #address-cells = <1>;
		#size-cells = <1>;
        status = "okay";
        reg = < 0X020C406C 0x04  /*CCM_CCGR1_BASE  */
                0X020E0068 0x04  /*SW_MUX_GPIO1_IO03_BASE */
                0X020E02F4 0x04  /*SW_PAD_GPIO1_IO03_BASE */
                0X0209C004 0x04  /*GPIO1_GDIR_BASE */
                0X0209C000 0x04>; /*GPIO1_DR_BASE */
    };

分析如下:

Led设备树节点需要写的是 所要操作的寄存器地址,即 设备节点的 "reg"参数值 。所以,就需要

"address-cells"参数与 "size-cells"参数 这两个参数,前者表示地址,后者表示地址所占用的字节长度。

"reg" 参数:前面表示 涉及 Led灯初始化需要操作的寄存器地址,后面 0x04表示地址所占用的字节长度为 4字节。

"compatible" 参数,表示设备树兼容的设备。

"status" 参数,表示设备节点的状态是:打开还是关闭。

编译设备树文件,即 dtb设备树文件,进入 以上 Linux内核源码的根目录下,输入如下命令:

make dtbs

确定重新生成 imx6ull-alientek-nand.dtb设备树文件后,拷贝 设备树文件到 tftp服务所设置的目录下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ sudo cp ./arch/arm/boot/dts/imx6ull-alientek-nand.dtb /home/wangtian/linux/tftp_file/ -f
[sudo] wangtian 的密码: 
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ 

2.? 开发板上电测试

开发板上电,进入系统下。进入 "/proc/device-tree" 目录,查看是否已经存在 Led设备节点:

可以看出,已经存在 led的设备节点 alpha_led。

进入 alpha_led目录下:

可以看出,led设备节点下的属性,寄存器灯信息已经创建成功。

接下来开始实现 Led驱动代码部分。

文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135624253
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。