gpio的使用,---->使用sysfs 控制gpio(第二节)

目的: 在 linux 文件系统上使用 sysfs 来控制 ,gpio的高低的变化。

逻辑;我只在 内核中是能 gpio 的pinctrl ,并不设置 gpio ,看看能不能使用 sysfs

pinctrl 的设备树的配置。 关键是 pinctrl 的配置。

284     //topeet wang added
285      alphaled {
286         #address-cells = <1>;
287         #size-cells = <1>;
288         compatible = "atkalpha-led";
289         status = "okay";
290         pinctrl-names = "default";
291         pinctrl-0=<&hym8563_int>;
292          };

字符设备驱动的编写:

驱动,没有作用。

  1 #include <linux/types.h>2 #include <linux/kernel.h>3 #include <linux/delay.h>4 #include <linux/ide.h>5 #include <linux/init.h>6 #include <linux/module.h>7 #include <linux/errno.h>8 #include <linux/gpio.h>9 #include <linux/cdev.h>10 #include <linux/device.h>11 #include <linux/of.h>12 #include <linux/of_address.h>13 #include <asm/mach/map.h>14 #include <asm/uaccess.h>15 #include <asm/io.h>16171819202122 #define DTSLED_CNT          1           /* 设备号个数 */23 #define DTSLED_NAME         "dtsled"    /* 名字 */24 #define LEDOFF                  0           /* 关灯 */25 #define LEDON                   1           /* 开灯 */2627 /* 映射后的寄存器虚拟地址指针 */28 static void __iomem *IMX6U_CCM_CCGR1;29 static void __iomem *SW_MUX_GPIO1_IO03;30 static void __iomem *SW_PAD_GPIO1_IO03;31 static void __iomem *GPIO1_DR;32 static void __iomem *GPIO1_GDIR;3334 /* dtsled设备结构体 */35 struct dtsled_dev{36     dev_t devid;            /* 设备号    */37     struct cdev cdev;       /* cdev     */38     struct class *class;        /* 类       */39     struct device *device;  /* 设备      */40     int major;              /* 主设备号   */41     int minor;              /* 次设备号   */42     struct device_node  *nd; /* 设备节点 */43 };4445 struct dtsled_dev dtsled;   /* led设备 */4650 static int __init led_init(void)51 {5253 /* 获取设备树中的属性数据 */54     /* 1、获取设备节点:alphaled */55     dtsled.nd = of_find_node_by_path("/alphaled");56     if(dtsled.nd == NULL) {57         printk("alphaled node nost find!\r\n");58         return -EINVAL;59     } else {60         printk("alphaled node find!\r\n");61     }6263     /* 2、获取compatible属性内容 */64     proper = of_find_property(dtsled.nd, "compatible", NULL);65     if(proper == NULL) {66         printk("compatible property find failed\r\n");67     } else {68         printk("compatible = %s\r\n", (char*)proper->value);69     }7071     /* 3、获取status属性内容 */72     ret = of_property_read_string(dtsled.nd, "status", &str);73     if(ret < 0){74         printk("status read failed!\r\n");75     } else {76         printk("status = %s\r\n",str);77     }78798081     /* 注册字符设备驱动 */82     /* 1、创建设备号 */83     if (dtsled.major) {     /*  定义了设备号 */84         dtsled.devid = MKDEV(dtsled.major, 0);85         register_chrdev_region(dtsled.devid, DTSLED_CNT, DTSLED_NAME);86     } else {                        /* 没有定义设备号 */87         alloc_chrdev_region(&dtsled.devid, 0, DTSLED_CNT, DTSLED_NAME); /* 申请设备号 */88         dtsled.major = MAJOR(dtsled.devid); /* 获取分配号的主设备号 */89         dtsled.minor = MINOR(dtsled.devid); /* 获取分配号的次设备号 */90     }91     printk("dtsled major=%d,minor=%d\r\n",dtsled.major, dtsled.minor);9293     /* 2、初始化cdev */94     dtsled.cdev.owner = THIS_MODULE;95     cdev_init(&dtsled.cdev, &dtsled_fops);9697     /* 3、添加一个cdev */98     cdev_add(&dtsled.cdev, dtsled.devid, DTSLED_CNT);100     /* 4、创建类 */
101     dtsled.class = class_create(THIS_MODULE, DTSLED_NAME);
102     if (IS_ERR(dtsled.class)) {
103         return PTR_ERR(dtsled.class);
104     }
105
106     /* 5、创建设备 */
107     dtsled.device = device_create(dtsled.class, NULL, dtsled.devid, NULL, DTSLED_NAME);
108     if (IS_ERR(dtsled.device)) {
109         return PTR_ERR(dtsled.device);
110     }
111
112
113
114
115
116     printk("wang test driver init\n");
117     return 0;
118 }
119
120
121
122
123 static void __exit led_exit(void)
124 {
125 }
126
127
128
129 module_init(led_init);
130 module_exit(led_exit);
131 MODULE_LICENSE("GPL");
132 MODULE_AUTHOR("zuozhongkai");

修改 makefile

编译+烧写测试。

系统之后, 通过sysfs文件系统,验证了我的猜想。

是可以控制 gpio的高低电平的。

总结:

1 我写的驱动 没什么用。只是一个打印。

2 主要是 驱动 匹配上之后,pinctrl 子系统,会配置 ,设备树中的 pinctrl-0=xxx 的配置。

这个是比较重要的。

3 也就是说,我要想在 sysfs 文件系统中,来控制, gpio ,是需要提前配置好pinctlr 的,至于 gpio 配置不配置,是不重要的。

但是如果真是这样才能 配置pinctrl 的话,那也太麻烦了。

sysfs 的测试。

首先是 瑞芯微的 gpio 的计算方式。

总结瑞芯微 gpio 的具体号码的计算方法。

先来看 gpio组, 一共4组,GPIO0,GPIO1,GPIO2,GPIO3,每组32个脚。  在一个 gpio组内又有 4个组 A,B,C,D,每个小组 8个脚,从0到7 。

比如 gpio0 的 B0  怎么计算呢,  那就是 8+1=9  第九个脚,但是 表示为 GPIO8 ,为什么呢? 因为是从零开始的。  GPIOA--> 0,1,2,3,4,5,6,7,   GPIOB --->0,1,2,3,4,5,6,7,  所以表示为GPIOB_0,实际为第九脚。

这样在去看他的公式: 

pin=bank*32 + number, 

number=group*n + x.

bank 是从0 开始的,代表的是 GPIO0,GPIO1,GPIO2 , GPIO3 ,

group 也是从0 开始的,代表的是A,B,C,D 。

如果上来就看公式,一定是懵逼的。他公式的产生过程,也是先理解了逻辑,然后在套一个形式化的公式。

然后是我需要测试的gpio 的计算。

这个脚实际上是 第9脚, 但是 表示为 gpio8

然后是 一般来说 在 sys 文件系统下, 测试 gpio 的常用的命令。

cat /sys/kernel/debug/gpio  ,查看的是所有配置的gpio 的设置。

echo 13 > /sys/class/gpio/export  导出某个gpio

echo out > /sys/class/gpio/gpio13/direction   配置输入还是输出

echo 1 > /sys/class/gpio/gpio13/value     配置输出高低电平。

总结:

1 我使用 sys fs 的前提应该是  首先要在内核中 配置好 pinctrl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/389206.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA开发——状态机的使用

一、概述 我们在使用FPGA进行开发的过程当中&#xff0c;实现一个东西用得最多的实现方法就是状态机的实现方法&#xff0c;用一句话总结就是万物皆可状态机&#xff0c;这和我们在学习Linux时常说的在Linux中万物都是文件差不多&#xff0c;这里就主要就是突出状态机的应用范…

使用模版完成不同数据类型的数组的选择排序

目录 6.模版(167-263) 6.1函数模板 6.1.1函数模版注意事项 6.1.2函数模版案例--选择排序 1. 比较排序的基本概念 2. 决策树 3. 决策树的深度 4. 结论 5.选择排序示例: 6.模版(167-263) (项目先跳过) 模板不能直接使用,它只是一个框架. 模板不是万能的. 6.1函数模板…

JNPF全新V5.0版本!重磅升级——APP篇

尊敬的JNPF用户们&#xff1a; 我们非常高兴地宣布&#xff0c;经过团队数月的辛勤努力和不断的技术创新&#xff0c;JNPF快速开发平台终于迎来了里程碑式的全新升级——V5.0版本&#xff01;这一版本的更新发布&#xff0c;不仅代表着我们技术实力的进一步提升&#xff0c;是…

Office Tool Plus部署、激活

1、下载安装&#xff0c;安装图片红色数字操作步骤 2、安装完成&#xff0c;激活&#xff0c;点击新手教程 找到相关教程 复制链接&#xff0c;在Office Tool Plus激活

Prometheus 监控 Nginx

作者&#xff1a;琉璃 一、Nginx_exporter安装 下载链接&#xff1a; https://github.com/discordianfish/nginx_exporter 下载nginx_exporter的docker镜像。 ocker pull fish/nginx-exporter先run一下&#xff0c;执行之后&#xff0c;会hold住&#xff0c;先不要关闭窗口…

THS6011容器版docker使用说明(by why+lqw)

THS6011容器版有分x86和arrch64两种安装包&#xff0c;主要是针对ths节点&#xff0c;本身并没有控制台的安装包&#xff0c;请根据自己的系统的cpu架构进行选择&#xff0c;本次使用的是x86的安装包作为演示。 下图是arrch64的镜像&#xff08;PDMP-4980&#xff09;&#xf…

Codeforces Round 962 (Div. 3)

前言 势必要拿下的一场比赛&#xff0c;最后结果也算如愿。 Standings&#xff1a;300 重新回到蓝名了&#xff0c;也完成了之前 “ 早日在比赛切掉 6 题 ” 的期望。 题目链接&#xff1a;Dashboard - Codeforces Round 962 (Div. 3) - Codeforces A. Legs 第一次在第一分钟就…

Segment Anything Model 2:使用Ultralytics框架进行SAM2图像分割

Segment Anything Model 2&#xff1a;使用Ultralytics框架进行SAM2图像分割 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行SAM2图像分割参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容…

Vue进阶之Vue无代码可视化项目(九)

Vue无代码可视化项目—补充内容 背景介绍、方案设计Canvas Table创建一个新的vue项目普通表格的效果Canvas上手Canvas画表格-画基本表格CanvasTable处理事件系统CanvasTable表格滚动Vue组件封装思想拖拽组件 —smooth-dndDndDemo1.vueDndContainer.jsCanvasTable封装CanvasTabl…

运维工作中的事件、故障排查处理思路

一、运维工作中的事件 https://www.51cto.com/article/687753.html 二、运维故障排查 一&#xff09;故障排查步骤 1、明确故障 故障现象的直接表现故障发生的时间、频率故障发生影响哪些系统故障发生是否有明确的触发条件   故障举例&#xff1a;无法通过ssh登录系统 影响…

nginx 离线版本升级-停机

1. 最新版本下载 地址&#xff1a;https://nginx.org/en/download.html 2. 查看当前安装信息&#xff1a; which nginx (我获取的地址为/usr/local/nginx&#xff0c;之后用nginx-path代替) 2. 备份nginx执行文件 cp nginx-path/sbin/nginx nginx-path/sbin/nginx.bak …

redis的性能管理、主从复制和哨兵模式

redis的性能管理、主从复制和哨兵模式 一、redis的性能管理 redis的数据时缓存在内存中的 查看系统内存情况 info memory used_memory:853688 redis中数据占用的内存 used_memory_rss:10522624 redis向操作系统申请的内存 used_memory_peak:853688 redis使用内存的峰值 …

你看不上的“垃圾”——别人的赚钱“利器”

首先说一点&#xff0c;你认为是常识性的东西&#xff0c;也许还有4亿中国人不知道。 其次&#xff0c;你认为是遍地都有的、你看不上的、你瞧不起的这些“破烂玩意”&#xff0c;别人也许正拿来赚钱&#xff01; 不可思议吧&#xff0c;事实就是如此。 我在老家&#xff0c;…

word打印---doc转html后进行打印,window.print、print-js、vue-print-nb

提示&#xff1a;word预览方式—插件 文章目录 [TOC](文章目录) 前言一、vue-office-docx把docx转换html二、调取window.print三、print-js四、vue-print-nb总结 前言 word预览 一、vue-office-docx把docx转换html npm install vue-office-docx -S-DofficeDocx.vue <templ…

Python爬虫知识体系-----Selenium

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用二、元素定位三、访问元素信息四、自动化交互五、PhantomJS六、Chrome headless 一、安装和基本使用…

html+css 实现左平移背景按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

计网面试题

OSI七层模型 物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层 应用层&#xff08;Application Layer&#xff09;&#xff1a;这是网络体系结构中的最顶层&#xff0c;提供用户接口和应用程序之间的…

Mosh|SQL教程第六弹

一、视图 1、创建视图CREATE VIEW viewname AS 这样就可以在左侧导航栏看到新增的view了&#xff0c;如果没有的话刷新一下就好了 可以把视图当表格使用 或者 注意&#xff1a;视图不存储数据&#xff0c;数据存储在表中 练习&#xff1a;创建一个视图&#xff0c;叫做客户结…

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…

Python数值计算(1)——Numpy中数据的保存和加载

这里讨论一下在进行数值计算中&#xff0c;对计算数据的保存和加载。 1. 文本格式 这种方式可以采用文本的方式保存numpy数组&#xff0c;函数原型如下&#xff1a; numpy.savetxt(fname, X, fmt%.18e, delimiter , newline\n, header, footer, comments# , encodingNone) …