linux系统中利用设备树完成对LED的控制

这篇具有很好参考价值的文章主要介绍了linux系统中利用设备树完成对LED的控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

     大家好,今天主要和大家聊一聊,如何使用linux系统中的设备树控制led。

目录

第一:设备树LED基本驱动原理

第二:LED灯驱动程序的实现


linux系统中利用设备树完成对LED的控制

 

第一:设备树LED基本驱动原理

      本次实验采用设备树向linux内核传递相关的寄存器物理地址,linux驱动文件使用of函数从设备树中获取所需的属性值,然后使用获取到的属性值初始化相关的IO。

第二:修改设备树文件

      在根节点"/" 下创建一个名为alphaled的子节点,打开imx6ull-alientek-emmc.dts文件,在根节点“/”最后面输入如下所示的内容:

alphaled{
    #address-cells = <1>;
    #size-cells = <1>;
    compatible = "atkalpha-led";
    status = "okay";
    reg = <  0X020C406C 0X04 /* CCM_CCGR1_BASE */
             0X020E0068 0X04 /* SW_MUX_GPIO1_IO03_BASE */
             0X020E02F4 0X04 /* SW_PAD_GPIO1_IO03_BASE */
             0X0209C000 0X04 /* GPIO1_DR_BASE */
             0X0209C004 0X04 >; //GPIO1_GDIR_BASE 
};


        分析:属性#address-cells和#size-cells都为1,表示reg属性中起始地址占用一个32位长度,地址长度也占用一个32位长度。

                  属性compatbile设置alphaled节点兼容性为“atkalpa-led”

                  属性status设置状态为“okay”

                 reg属性,非常重要,reg属性设置了驱动里面所要使用的寄存器物理地址,比如第六行“0X020C406C 0X04”表示CCM_CCGR1寄存器,首地址,长度为4个字节。

         设备树修改完成以后需要重新编译一下,编译完成以后,重新启动linux进入到/proc/device-tree/目录中查看是否有"alphaled"这个节点。

              linux系统中利用设备树完成对LED的控制

       可以进入到alphaled目录中,查看一下都有哪些属性文件,如图所示:

    linux系统中利用设备树完成对LED的控制

        大家可以看下compatible,status等属性值是否和我们设置的一致。

第二:LED灯驱动程序的实现

#include <linux/types.h>
#include <linux/kernel.h>

//dtsled设备结构体
struct dtsled_dev{
    dev_t devid;         //设备号
    struct cdev cdev;    //cdev
    struct class *class;  //类
    struct device *device;  //设备
    int major;   //主设备号
    int minor;   //次设备号 
    struct device_node *nd;   //设备节点
};


struct dtsled_dev  dtsled;   //led设备




//linux驱动入口函数
static int __init led_init(void)
{
    u32 val = 0;
    int ret;
    u32 regdata[14];
    const char *str;
    struct property *proper;

   //获取设备树中的属性数据。
   dtsled.nd = of_find_node_by_path("/alphaled");
   

   //获取compatible属性内容的值
   proper =  of_find_property(dtsled.nd,"compatible",NULL);

   //获取status属性内容
   ret = of_property_read_string(dtsled.nd,"status",&str);


   //获取reg属性内容
   ret = of_property_read_u32_array(dtsled.nd,"reg",regdata,10);
   
   for(i = 0; i < 10; i++)
      printk("%#x", regdata[i]);
}

总结:利用设备树获取必要的信息,再进行虚拟的映射技术进行控制,第一次使用加载命令的时候,可以使用depmod   以及 modprobe dtsled.ko文章来源地址https://www.toymoban.com/news/detail-405923.html

到了这里,关于linux系统中利用设备树完成对LED的控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云iot haas Micropython连接esp32;esp32物联网设备上报信息及云端信息获取;远程控制设备自带led熄灭;网页界面交互远程控制

    参考:https://blog.csdn.net/HaaSTech/article/details/125975052 https://iot.console.aliyun.com/ https://www.bbsmax.com/A/x9J2X8nZd6/ 首先烧录阿里云iot haas固件: https://haas.iot.aliyun.com/haasapi/index.html#/Python/docs/zh-CN/startup/ESP32_startup ***直接下载后可以通过vscode插件烧录;烧录好后也可以在thony编辑运行代码

    2024年02月02日
    浏览(50)
  • 【AIGC】利用ChatGPT完成任务,迷你AGI控制世界来了

    多智能体代码库 CAMEL,提出了通过角色扮演框架来研究 LLM 智能体的行为和能力。 未来的社会会被通用人工智能(AGI)控制吗?当拥有多个 ChatGPT 智能体会有多可怕。 ChatGPT 已经初步展现了 AGI 的雏形,成为了各行各业工作人员的全能小助手,但如果任由其野蛮生长,不加于

    2024年02月07日
    浏览(41)
  • 笔记:linux中LED驱动设备树配置和用法

    设备树中的LED驱动一般是这样写,LED驱动可以控制GPIO的电平变化,生成文件节点很方便 compatible = \\\"gpio-leds\\\"; 对应了驱动中 drivers/leds/leds-gpio.c这个驱动文件 label = \\\"gpio_demo\\\"; 这个名字会在文件系统中生成对应的设备节点 /sys/class/leds/gpio_demo linux,default-trigger = \\\"default-off\\\"; 指的是

    2024年02月10日
    浏览(40)
  • 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

    之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个LED灯作为受控设备进

    2024年02月04日
    浏览(46)
  • Linux -- 字符设备驱动--LED的驱动开发(初级框架)

    看原理图确定引脚,确定引脚输出什么电平才能点亮 / 熄灭 LED 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?地址是? 编写驱动:先写框架,再写硬件操作的代码 注意 :在芯片手册中确定的寄存器地址被称为 物理地址 ,在 Linux 内核中无法直接使用。 需要使

    2024年04月28日
    浏览(32)
  • 合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

    之前发布的文章有采用合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个LED灯作为受控设备进行云端命令的控制,本期内容为使用了 阿里云 物联网平台完成同样

    2024年02月06日
    浏览(47)
  • 【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)

    git init 生成一个.git 目录 git config --global user.name 用户名 git config --global user.email 邮箱 vim .gitignore git status 查看状态 git add 文件名 git rm 文件名 git commit -m 说明 git log git branch git branch 分支名 git checkout 分支名 通过linux自带的gpio-leds驱动实现,改驱动通过调用Pinctrl子系统和GPIO子系

    2024年02月02日
    浏览(37)
  • Linux 驱动开发基础知识——LED 模板驱动程序的改造:设备树(十一)

     个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导航: 妄北y系列专栏导航: C/C++的基

    2024年02月21日
    浏览(43)
  • 【智能家居项目】裸机版本——设备子系统(LED && Display && 风扇)

    🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言: 你只管努力,剩下的交给时间! 输入子系统中目前仅实现了按键输入,剩下的网络输入和标准输入在以后会逐步实现,今天先来实现设备子系统,包含LED设备(GPIO控制),风扇设备,OLED设备。 不同内核下是访问设

    2024年02月08日
    浏览(44)
  • Linux驱动-基于QT控制LED灯

    平台 韦东山100ask imax6ull pro 大象嵌入式开发板 Build Root 使用Build root编译image,具体配置可参考《嵌入式Linux应用开发完全手册-IMX6ULL开发板(从零移植篇-预览版)-V0.1.pdf》,使用buildroot后仅需要配置menuconfig即可自动编译出完整的镜像,而且各种安装包也可以在 output/build 目录下拿

    2024年02月13日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包