蚂蚁S9矿板PS 蜂鸣器驱动
参考蚂蚁S9矿板引脚定义.csdn蚂蚁S9矿板PS led驱动的四个实验-第1课 字符设备驱动.csdn蚂蚁S9矿板PS led驱动的四个实验-第2课 设备树下的led驱动.csdn蚂蚁S9矿板PS led驱动的四个实验-第3课 gpio子系统下的led驱动.csdn蚂蚁S9矿板PS led驱动的四个实验-第4课 设备驱动框架下的led驱动.csdn设备树system-user.dtsi#include dt-bindings/gpio/gpio.h#include dt-bindings/input/input.h#include dt-bindings/media/xilinx-vip.h#include dt-bindings/phy/phy.h/{modelz7 Board ant111;compatiblexlnx,zynq-zc702,xlnx,zynq-7000;chosen{bootargsconsolettyPS0,115200 earlyconcdns,mmio,0xe0000000,115200n8 keep_bootcon earlyprintk root/dev/mmcblk0p2 rw rootwait;stdout-pathserial0:115200n8;};beeper{compatibleming,beeper;statusokay;default-stateoff;beeper-gpiogpio037GPIO_ACTIVE_HIGH;};};驱动 beeper.kobeeper.c#includelinux/types.h#includelinux/kernel.h#includelinux/delay.h#includelinux/ide.h#includelinux/init.h#includelinux/module.h#includelinux/errno.h#includelinux/gpio.h#includeasm/mach/map.h#includeasm/uaccess.h#includeasm/io.h#includelinux/cdev.h#includelinux/of.h#includelinux/of_address.h#includelinux/of_gpio.h#defineBEEPER_CNT1/* 设备号个数 */#defineBEEPER_NAMEbeeper/* 名字 *//* dtsled设备结构体 */structbeeper_dev{dev_tdevid;/* 设备号 */structcdevcdev;/* cdev */structclass*class;/* 类 */structdevice*device;/* 设备 */intmajor;/* 主设备号 */intminor;/* 次设备号 */structdevice_node*nd;/* 设备节点 */intgpio;/* LED所使用的GPIO编号 */};staticstructbeeper_devbeeper;/* led设备 *//* * description : 打开设备 * param – inode : 传递给驱动的inode * param – filp : 设备文件file结构体有个叫做private_data的成员变量 * 一般在open的时候将private_data指向设备结构体。 * return : 0 成功;其他 失败 */staticintbeeper_open(structinode*inode,structfile*filp){return0;}/* * description : 从设备读取数据 * param – filp : 要打开的设备文件(文件描述符) * param – buf : 返回给用户空间的数据缓冲区 * param – cnt : 要读取的数据长度 * param – offt : 相对于文件首地址的偏移 * return : 读取的字节数如果为负值表示读取失败 */staticssize_tbeeper_read(structfile*filp,char__user*buf,size_tcnt,loff_t*offt){return0;}/* * description : 向设备写数据 * param – filp : 设备文件表示打开的文件描述符 * param – buf : 要写给设备写入的数据 * param – cnt : 要写入的数据长度 * param – offt : 相对于文件首地址的偏移 * return : 写入的字节数如果为负值表示写入失败 */staticssize_tbeeper_write(structfile*filp,constchar__user*buf,size_tcnt,loff_t*offt){charvalue;printk(KERN_INFObeeper_write: cnt%zu\n,cnt);/* 只接受 1 个字节 */if(cnt!1){printk(KERN_ERRinvalid count%zu\n,cnt);return-EINVAL;}/* 从用户空间读取 1 字节 */if(copy_from_user(value,buf,1)){printk(KERN_ERRcopy_from_user failed\n);return-EFAULT;}printk(KERN_INFObeeper_write: value%d\n,value);gpio_set_value(beeper.gpio,value?1:0);/* 返回实际写入的字节数 */return1;}/* * description : 关闭/释放设备 * param – filp : 要关闭的设备文件(文件描述符) * return : 0 成功;其他 失败 */staticintbeeper_release(structinode*inode,structfile*filp){return0;}/* 设备操作函数 */staticstructfile_operationsbeeper_fops{.ownerTHIS_MODULE,.openbeeper_open,.readbeeper_read,.writebeeper_write,.releasebeeper_release,};staticint__initbeeper_init(void){constchar*str;intret;/* 1.获取beeper设备节点 */beeper.ndof_find_node_by_path(/beeper);if(NULLbeeper.nd){printk(KERN_ERRbeeper: Failed to get beeper node\n);return-EINVAL;}/* 2.读取status属性 */retof_property_read_string(beeper.nd,status,str);if(!ret){if(strcmp(str,okay))return-EINVAL;}/* 2、获取compatible属性值并进行匹配 */retof_property_read_string(beeper.nd,compatible,str);if(0ret){printk(KERN_ERRbeeper: Failed to get compatible property\n);returnret;}if(strcmp(str,ming,beeper)){printk(KERN_ERRbeeper: Compatible match failed\n);return-EINVAL;}printk(KERN_INFObeeper: device matching successful!\r\n);/* 4.获取设备树中的beeper-gpio属性得到蜂鸣器所使用的GPIO编号 */beeper.gpioof_get_named_gpio(beeper.nd,beeper-gpio,0);if(!gpio_is_valid(beeper.gpio)){printk(KERN_ERRbeeper: Failed to get beeper-gpio\n);return-EINVAL;}printk(KERN_INFObeeper: beeper-gpio num %d\r\n,beeper.gpio);/* 5.向gpio子系统申请使用GPIO */retgpio_request(beeper.gpio,Beeper gpio);if(ret){printk(KERN_ERRbeeper: Failed to request gpio num %d\n,beeper.gpio);returnret;}/* 6.将gpio管脚设置为输出模式 */gpio_direction_output(beeper.gpio,0);/* 7.设置蜂鸣器的初始状态 */retof_property_read_string(beeper.nd,default-state,str);if(!ret){if(!strcmp(str,on))gpio_set_value(beeper.gpio,1);elsegpio_set_value(beeper.gpio,0);}elsegpio_set_value(beeper.gpio,0);/* 8.注册字符设备驱动 *//* 创建设备号 */if(beeper.major){beeper.devidMKDEV(beeper.major,0);retregister_chrdev_region(beeper.devid,BEEPER_CNT,BEEPER_NAME);if(ret)gotoout1;}else{retalloc_chrdev_region(beeper.devid,0,BEEPER_CNT,BEEPER_NAME);if(ret)gotoout1;beeper.majorMAJOR(beeper.devid);beeper.minorMINOR(beeper.devid);}printk(beeper: major%d,minor%d\r\n,beeper.major,beeper.minor);/* 初始化cdev */beeper.cdev.ownerTHIS_MODULE;cdev_init(beeper.cdev,beeper_fops);/* 添加一个cdev */retcdev_add(beeper.cdev,beeper.devid,BEEPER_CNT);if(ret)gotoout2;/* 创建类 */beeper.classclass_create(THIS_MODULE,BEEPER_NAME);if(IS_ERR(beeper.class)){retPTR_ERR(beeper.class);gotoout3;}/* 创建设备 */beeper.devicedevice_create(beeper.class,NULL,beeper.devid,NULL,BEEPER_NAME);if(IS_ERR(beeper.device)){retPTR_ERR(beeper.device);gotoout4;}return0;out4:class_destroy(beeper.class);out3:cdev_del(beeper.cdev);out2:unregister_chrdev_region(beeper.devid,BEEPER_CNT);out1:gpio_free(beeper.gpio);returnret;}staticvoid__exitbeeper_exit(void){/* 注销设备 */device_destroy(beeper.class,beeper.devid);/* 注销类 */class_destroy(beeper.class);/* 删除cdev */cdev_del(beeper.cdev);/* 注销设备号 */unregister_chrdev_region(beeper.devid,BEEPER_CNT);/* 释放GPIO */gpio_free(beeper.gpio);}/* 驱动模块入口和出口函数注册 */module_init(beeper_init);module_exit(beeper_exit);MODULE_AUTHOR(ming);MODULE_DESCRIPTION(ZYNQ GPIO LED Driver);MODULE_LICENSE(GPL);测试rootant:~# insmod beeper.kobeeper: loading out-of-tree module taints kernel. beeper: device matching successful!beeper: beeper-gpio num943beeper:major244,minor0rootant:~# ls /dev/beeper/dev/beeper rootant:~# printf \x01 /dev/beeperbeeper_write:cnt1beeper_write:value1rootant:~# printf \x00 /dev/beeperbeeper_write:cnt1rootant:~# rmmod beeperrootant:~# ls /dev/beeperls: /dev/beeper: No suchfileor directory

相关新闻

SpringBoot整合Mybatis-Plus实现高效分页查询实战

SpringBoot整合Mybatis-Plus实现高效分页查询实战

1. 项目概述在Web应用开发中,分页查询是最基础也最常用的功能之一。最近接手一个后台管理系统项目时,我发现很多新人对SpringBoot整合Mybatis-Plus实现分页存在不少困惑。本文将分享我在电商平台开发中总结的分页实现方案,从配置到实战完整走…

2026/7/28 22:21:11 阅读更多 →
卡美德生物科普|SLT-IIE(志贺样毒素IIE型)靶点结构与科研应用探析

卡美德生物科普|SLT-IIE(志贺样毒素IIE型)靶点结构与科研应用探析

SLT-IIE是微生物科研领域极具研究意义的经典功能性蛋白靶点,属于志贺样毒素家族的重要亚型,广泛存在于致病性大肠杆菌等微生物中。该蛋白具备典型的AB型毒素结构特征,依靠独特的结构构型实现宿主细胞识别、结合与内化调控,是研究微…

2026/7/28 22:20:10 阅读更多 →
卡美德生物科普|SLITRK6(神经跨膜调控蛋白)靶点功能与科研应用详解

卡美德生物科普|SLITRK6(神经跨膜调控蛋白)靶点功能与科研应用详解

在神经发育生物学与膜蛋白分子调控研究领域,SLITRK6是具备高研究价值的特异性功能靶点。作为SLITRK家族的经典跨膜蛋白,其依托独特的蛋白结构,深度参与神经细胞黏附、细胞分化、神经微环境稳态调控等多项核心生命活动。相较于普通膜蛋白&…

2026/7/28 22:20:10 阅读更多 →

最新新闻

维修工程师的示波器实战:序章:柜门一打开,波形突然安静了

维修工程师的示波器实战:序章:柜门一打开,波形突然安静了

序章:柜门一打开,波形突然安静了 ——看见那些原本“看不见”的高频战争 凌晨一点,车间只剩下设备低沉的运转声。 包装线又停了。不是第一次,也不会是最后一次。过去一个月,这条线几乎每到夜班都会出现同一个问题:通讯掉线、PLC报警、设备停机。白天正常,夜班必发。 …

2026/7/28 22:33:18 阅读更多 →
Caddy WAF性能优化:动态规则更新与Prometheus监控实战

Caddy WAF性能优化:动态规则更新与Prometheus监控实战

Caddy WAF性能优化:动态规则更新与Prometheus监控实战 【免费下载链接】caddy-waf Caddy WAF (Regex Rules, IP and DNS filtering, Rate Limiting, GeoIP, Tor, Anomaly Detection) 项目地址: https://gitcode.com/gh_mirrors/ca/caddy-waf Caddy WAF是一款…

2026/7/28 22:33:18 阅读更多 →
Python复刻超级玛丽:从零到一掌握2D游戏开发与Pygame实战

Python复刻超级玛丽:从零到一掌握2D游戏开发与Pygame实战

1. 项目概述:为什么用Python复刻经典?几年前,我为了给一个编程兴趣小组做演示,决定用Python复刻一个简化版的超级玛丽。当时想法很简单:用大家熟悉的语言,做一个大家都有童年记忆的游戏,既能展示…

2026/7/28 22:33:18 阅读更多 →
MCP协议流式生成中的降熵技术与实践

MCP协议流式生成中的降熵技术与实践

1. MCP协议与流式生成的核心挑战MCP(Modular Control Protocol)作为一种模块化控制协议,在AI工具链和自动化流程中扮演着重要角色。当它应用于流式生成场景时,系统需要持续处理动态变化的Token序列,这个过程面临着几个…

2026/7/28 22:33:18 阅读更多 →
转型AI应用的路上,这7个坑别踩

转型AI应用的路上,这7个坑别踩

下面这七个坑,有的是我自己踩过的,有的是这两年看着身边转行的人一个一个掉进去的。它们有个共同点:踩进去的时候,当事人往往觉得自己在做正确的事。这才是坑最可怕的地方。 坑一:把"学AI"理解成啃算法和论文…

2026/7/28 22:33:18 阅读更多 →
【信息科学与工程学】【产品体系】第三十九篇 IT产品系列需求01 互联网行业的需求

【信息科学与工程学】【产品体系】第三十九篇 IT产品系列需求01 互联网行业的需求

需求评级的通用方程式 每条需求都按下面这个方程评级(R 越高越 urgent): R=MPIC​ 符号 含义 取值范围 P 发生概率(漏洞被利用 / 供应中断 / 人为恶意) 0–1 I 影响面(受影响用户数 / 业务规模,归一化 0–1) 0–1 C 合规权重(对应法规的强制等级:等保二级…

2026/7/28 22:32:17 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻