社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
国产芯片交流
›
在全志D1-H的MQ_Pro开发板上添加Tina下的GPIO驱动
返回列表
发新帖
回复
阅
486
|
回
1
aleksib
当前离线
纯净的硅(中级)
最后登录
2025-1-6
在线时间
40 小时
威望
998分
芯积分
511分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
aleksib
287
帖子
0
TA的资源
纯净的硅(中级)
+ 好友
私信
楼主
发表于2024-5-27 09:53
只看该作者
在全志D1-H的MQ_Pro开发板上添加Tina下的GPIO驱动
[复制链接]
设备树根目录添加 ``` led: gpioled{ device_type = "gpioled"; compatible = "gpio-led"; gpios = <&pio PD 18 GPIO_ACTIVE_HIGH>; status = "okay"; }; ``` linxu系统操作 编译 Lina : 1. 首先执行 source build/envsetup.sh 提示Setup env done! Please run lunch next. 2. 输入 lunch d1-h_nezha-tina 3. make -j32 4. 执行 pack打包 MQ_pro操作 1.下载至SD卡启动 2.通过ls /proc/device-tree/ 命令查看是否有 “gpioled”节点 ![在这里插入图片描述](https://mangopi.org/_media/img_0363_-2048.jpg?w=800&tok=39dc16) gpioled.c如下 该文件直接复制 正点原子历程 ``` #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*************************************************************** Copyright © ALIENTEK Co., Ltd. 1998-2029. All rights reserved. 文件名 : gpioled.c 作者 : 左忠凯 版本 : V1.0 描述 : 采用pinctrl和gpio子系统驱动LED灯。 其他 : 无 论坛 : www.openedv.com 日志 : 初版V1.0 2019/7/13 左忠凯创建 ***************************************************************/ #define GPIOLED_CNT 1 /* 设备号个数 */ #define GPIOLED_NAME "gpioled" /* 名字 */ #define LEDOFF 0 /* 关灯 */ #define LEDON 1 /* 开灯 */ /* gpioled设备结构体 */ struct gpioled_dev{ dev_t devid; /* 设备号 */ struct cdev cdev; /* cdev */ struct class *class; /* 类 */ struct device *device; /* 设备 */ int major; /* 主设备号 */ int minor; /* 次设备号 */ struct device_node *nd; /* 设备节点 */ int led_gpio; /* led所使用的GPIO编号 */ }; struct gpioled_dev gpioled; /* led设备 */ /* *
@description
: 打开设备 * @param - inode : 传递给驱动的inode * @param - filp : 设备文件,file结构体有个叫做private_data的成员变量 * 一般在open的时候将private_data指向设备结构体。 *
@return
: 0 成功;其他 失败 */ static int led_open(struct inode *inode, struct file *filp) { filp->private_data = &gpioled; /* 设置私有数据 */ return 0; } /* * @description : 从设备读取数据 * @param - filp : 要打开的设备文件(文件描述符) * @param - buf : 返回给用户空间的数据缓冲区 * @param - cnt : 要读取的数据长度 * @param - offt : 相对于文件首地址的偏移 * @return : 读取的字节数,如果为负值,表示读取失败 */ static ssize_t led_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt) { return 0; } /* * @description : 向设备写数据 * @param - filp : 设备文件,表示打开的文件描述符 * @param - buf : 要写给设备写入的数据 * @param - cnt : 要写入的数据长度 * @param - offt : 相对于文件首地址的偏移 * @return : 写入的字节数,如果为负值,表示写入失败 */ static ssize_t led_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offt) { int retvalue; unsigned char databuf[1]; unsigned char ledstat; struct gpioled_dev *dev = filp->private_data; retvalue = copy_from_user(databuf, buf, cnt); if(retvalue < 0) { printk("kernel write failed!\r\n"); return -EFAULT; } ledstat = databuf[0]; /* 获取状态值 */ if(ledstat == LEDON) { gpio_set_value(dev->led_gpio, 0); /* 打开LED灯 */ } else if(ledstat == LEDOFF) { gpio_set_value(dev->led_gpio, 1); /* 关闭LED灯 */ } return 0; } /* * @description : 关闭/释放设备 * @param - filp : 要关闭的设备文件(文件描述符) * @return : 0 成功;其他 失败 */ static int led_release(struct inode *inode, struct file *filp) { return 0; } /* 设备操作函数 */ static struct file_operations gpioled_fops = { .owner = THIS_MODULE, .open = led_open, .read = led_read, .write = led_write, .release = led_release, }; /* * @description : 驱动出口函数 * @param : 无 * @return : 无 */ static int __init led_init(void) { int ret = 0; ret = ret; /* 设置LED所使用的GPIO */ /* 1、获取设备节点:gpioled */ gpioled.nd = of_find_node_by_path("/gpioled"); if(gpioled.nd == NULL) { printk("gpioled node not find!\r\n"); return -EINVAL; } else { printk("gpioled node find!\r\n"); } /* 2、 获取设备树中的gpio属性,得到LED所使用的LED编号 */ gpioled.led_gpio = of_get_named_gpio(gpioled.nd, "gpios", 0); if(gpioled.led_gpio < 0) { printk("can't get led-gpio"); return -EINVAL; } printk("led-gpio num = %d\r\n", gpioled.led_gpio); /* 3、设置GPIO1_IO03为输出,并且输出高电平,默认关闭LED灯 */ ret = gpio_direction_output(gpioled.led_gpio, 0); if(ret < 0) { printk("can't set gpio!\r\n"); } /* 注册字符设备驱动 */ /* 1、创建设备号 */ if (gpioled.major) { /*定义了设备号 */ gpioled.devid = MKDEV(gpioled.major, 0); register_chrdev_region(gpioled.devid, GPIOLED_CNT, GPIOLED_NAME); } else { /* 没有定义设备号 */ alloc_chrdev_region(&gpioled.devid, 0, GPIOLED_CNT, GPIOLED_NAME); /* 申请设备号 */ gpioled.major = MAJOR(gpioled.devid); /* 获取分配号的主设备号 */ gpioled.minor = MINOR(gpioled.devid); /* 获取分配号的次设备号 */ } printk("gpioled major=%d,minor=%d\r\n",gpioled.major, gpioled.minor); /* 2、初始化cdev */ gpioled.cdev.owner = THIS_MODULE; cdev_init(&gpioled.cdev, &gpioled_fops); /* 3、添加一个cdev */ cdev_add(&gpioled.cdev, gpioled.devid, GPIOLED_CNT); /* 4、创建类 */ gpioled.class = class_create(THIS_MODULE, GPIOLED_NAME); if (IS_ERR(gpioled.class)) { return PTR_ERR(gpioled.class); } /* 5、创建设备 */ gpioled.device = device_create(gpioled.class, NULL, gpioled.devid, NULL, GPIOLED_NAME); if (IS_ERR(gpioled.device)) { return PTR_ERR(gpioled.device); } return 0; } static void __exit led_exit(void) { /* 注销字符设备驱动 */ cdev_del(&gpioled.cdev);/*删除cdev */ unregister_chrdev_region(gpioled.devid, GPIOLED_CNT); /* 注销设备号 */ device_destroy(gpioled.class, gpioled.devid); class_destroy(gpioled.class); } module_init(led_init); module_exit(led_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("zuozhongkai"); ``` Makefile 文件编写 如下: ``` KERNELDIR := /home/tina-d1-h/lichee/linux-5.4/ CURRENT_PATH := $(shell pwd) CFLAGS= ARCH=riscv CROSS_COMPILE=/home/tina-d1-h/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu- obj-m := gpioled.o build: kernel_modules kernel_modules: $(MAKE) $(CFLAGS) -C $(KERNELDIR) M=$(CURRENT_PATH) modules clean: $(MAKE) $(CFLAGS) -C $(KERNELDIR) M=$(CURRENT_PATH) cleanmake ``` KERNELDIRCFLAGS 路径需要根据自己的路径设置 ledAPP.c 正点原子原封不动的例程 ``` #include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "stdlib.h" #include "string.h" /*************************************************************** Copyright © ALIENTEK Co., Ltd. 1998-2029. All rights reserved. 文件名 : ledApp.c 作者 : 左忠凯 版本 : V1.0 描述 : chrdevbase驱测试APP。 其他 : 无 使用方法 :./ledtest /dev/led0 关闭LED ./ledtest /dev/led1 打开LED 论坛 : www.openedv.com 日志 : 初版V1.0 2019/1/30 左忠凯创建 ***************************************************************/ #define LEDOFF 0 #define LEDON 1 /* * @description : main主程序 * @param - argc : argv数组元素个数 * @param - argv : 具体参数 * @return : 0 成功;其他 失败 */ int main(int argc, char *argv[]) { int fd, retvalue; char *filename; unsigned char databuf[1]; if(argc != 3){ printf("Error Usage!\r\n"); return -1; } filename = argv[1]; /* 打开led驱动 */ fd = open(filename, O_RDWR); if(fd < 0){ printf("file %s open failed!\r\n", argv[1]); return -1; } databuf[0] = atoi(argv[2]); /* 要执行的操作:打开或关闭 */ /* 向/dev/led文件写入数据 */ retvalue = write(fd, databuf, sizeof(databuf)); if(retvalue < 0){ printf("LED Control Failed!\r\n"); close(fd); return -1; } retvalue = close(fd); /* 关闭文件 */ if(retvalue < 0){ printf("file %s close failed!\r\n", argv[1]); return -1; } return 0; } ``` linux系统操作: 1.通过make 编译出gpioled.ko文件 2.通过 /home/tina-d1-h/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc- thead_20200702/bin/riscv64-unknown-linux-gnu-gcc -o ledapp ledApp.c 编译出ledgpio 软件 MQpro: 1.通过insmod gpioled.ko加载gpioled驱动,通过ls /dev 查看是否有gpioled 2.通过 chmod 777 ledapp 添加权限 3.通过 ./ledapp /dev/gpioled 0 点亮LED 4.通过 ./ledapp /dev/gpioled 1 熄灭LED 注:以上命令没有跟LED高低电平相对应可以通过修改 gpioled.c led_write函数进行修改就好了
此帖出自
国产芯片交流论坛
最新回复
lugl4313820
介绍非常详细了,一切皆文件,操作就是一个样。
详情
回复
发表于 2024-6-1 11:22
点赞
关注
(0)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
lugl4313820
lugl4313820
当前离线
版主
最后登录
2025-1-24
在线时间
171 小时
威望
12392分
芯积分
11149分
(兑换)
E金币
868枚
(兑换)
(兑换)
好友
25
7003
帖子
11
TA的资源
版主
+ 好友
私信
沙发
发表于2024-6-1 11:22
只看该作者
介绍非常详细了,一切皆文件,操作就是一个样。
此帖出自
国产芯片交流论坛
回复
举报
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
有奖直播 | ADI 超低功耗 MCU MAX326xx 系列介绍
走近 AI 重磅新品 STM32N6,解锁在 MCU 部署高性能、节能型边缘 AI!答题有好礼~还有开发板等你拿!
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
安世半导体智能工业应用探索站,闯关赢好礼!
24年年终盘点来啦!精选强推:原创、测评、拆解、视频、资料
PI 电源小课堂:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
Microchip喊你探索dsPIC33A 芯片,70份好礼等你赢!
【瓜分2500元红包】票选2024 DigiKey “感知万物,乐享生活”创意大赛人气作品TOP3!
开源项目
更多>>
TP4056充电加保护 MP2144同步整流降压
TWR-MCF51QM-KIT,基于 MCF51QM128 MCU 的 ColdFire+ MCF51QM 塔式系统模块
LTC2946HDE 6V 至 300V 高端电源、电荷和能量监视器的典型应用
使用 Analog Devices 的 LT3089ER 的参考设计
LT6656BIS6-1.25、1.25V 扩展电源范围电压基准的典型应用
带有 EM3585 和 PCB 天线的 ZigBee 照明参考设计
LTC1412、12 位、3 Msps、采样 A/D 转换器的典型应用
原神pcb周年纪念尺
R1223N PWM/Vfm降压DC/DC转换器控制器典型应用电路
用于精密电流源的 ADR361A、2.5V 低功耗、低噪声电压基准的典型应用
随便看看
【 STM32MP135F-DK测评】+ (1) 重刷系统
【STM32MP135F-DK测评】+(1)重刷系统今天收到了回炉的STM32MP135F-DK,不错。只可以上电没显示,而且tf卡片里面内容没有,只好重新刷系统。[attach]884124[/attach] 准备好板子的电源(我搞了个2.5A带树莓派的那种)插到CN12供电,不要插到电脑的usb口,带不 ...
【复旦微车规MCU FM32FT0A测评】触摸功能检测
ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法
【创龙TL570x-EVM】解决ping 域名不通问题
求助:ccs3.3开发f28027时,程序编译通过,但是导入失败,用的是仿真器件
【Silicon Labs BG22-EK4108A 蓝牙开发评测】二:新建工程并通过手机控制及日志打印
CXimage类库
零基础学单片机视频教程——04讲 中断仿真实例
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
静电感应晶体管
光致发光材料
超级微电池
数据中心
汽车电子
模拟计算
导轨电源
数字钟
三电平
光电眼
相关文章
更多>>
德州仪器 2024年Q4财报解析:中国市场增长亮眼,目前没有收到反垄断调查通知
在 2024 年第四季度收益电话会议上,德州仪器(TI)向外界展示了一些好消息,尤其是凸显了中国市场在其全球布局中的关键地位。 第四季度,TI 收入为 40 亿美元,环比下降 3%,比去年同期下
欧盟提议成立高级研究机构:专注于AI等战略技术以加强竞争力
据彭博社报道,欧盟将提议仿照美国政府实体建立一个高级研究项目机构,对战略技术进行投资,以此作为提高欧盟竞争力的更广泛努力的一部分。 欧盟还将呼吁为 AI 建设新的超级计算基础设施。知情人士及文件显示
传台积电报废三万片晶圆,三万片受损
晶圆代工龙头厂台积电位于南科的晶圆厂,受地震影响的机台设备移位、晶圆破损经过抢修后,供应链传出,3、 5纳米的先进制程晶圆十八厂,预计将于23日达100%复机,准备恢复正常生产,晶圆十四厂复机还没有
中国芯片出口连续14个月增长
特朗普退出巴黎协定,芯片业碳中和完了没?
汇顶科技 2024 年业绩亮眼,展现强劲发展韧性
谷歌母公司:美国AI难保证对华领先 不少方面是落后
消息称三星电子砍半晶圆代工部门 2025 年设备投资预算,陡降至 5 万亿韩元
史上最佳表现:SK 海力士 2024 年营业利润 23.5 万亿韩元
宇树发布“踢足球”机器人G1-Comp,网友:国足有救了
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
开发板申请:拥有 AI 加持的 STM32N6570-DK 免费试用 !
申请时间:即日起-3月2日
查看 »
安世半导体智能工业应用探索站,闯关赢好礼!
点击页面内“开始探索”按钮,填写并提交表单;
请根据序号依次完成3个安世半导体智能工业应用的探索,并根据给出的资料完成共计9题(每个应用3题),答对5题以上的玩家即可获得抽奖资格;
每人仅有一次参与答题的机会,请慎重作答,活动结束后,我们将抽取30位玩家赠送礼品。
查看 »
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
直播主题:多相降压电源控制技术的发展与探讨
直播时间:2025年2月25日(星期二)上午10:30-11:30
快来报名!
查看 »
回帖赢好礼 | 关于无线技术的那些事儿
【活动时间】即日起—2025年1月31日
【活动好礼】50元京东卡
查看 »
答题赢好礼,PI电源小课堂第3期来啦!
本期内容:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
活动时间:即日起-2月28日
看视频答题即可赢取京东卡!
查看 »
Microchip喊你探索 dsPIC33A 芯片,70份好礼等你赢!
活动时间:即日起-1月26日
活动奖励:随身Wi-Fi、家用多功能电烤箱、20000mAh充电宝、50元京东卡
查看 »
DigiKey应用探索站重磅上线!潮流应用,硬核技术探秘,N多干货,一站get!
当月好物、热门技术资源、潮流应用技术、特色活动、DigiKey在线实用工具,干货多多~
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/8
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
边缘AI
嵌入式系统
单片机
国产芯片交流
电机控制
FPGA/CPLD
模拟电子
电源技术
无线连接
传感器
PCB设计
综合技术交流
下载中心专版
大学堂专版
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛