RK3568驱动指南|第十四篇 单总线-第158章DS18B20编写字符设备驱动框架

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。


【公众号】迅为电子

【粉丝群】824412014(加群获取驱动文档+例程)

【视频观看】嵌入式学习之Linux驱动(第十四篇 单总线_全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板


第158章 DS18B20编写字符设备驱动框架

接着上个章节的驱动编写,本章节实现DS18b20编写字符设备驱动框架。

158.1 驱动程序的编写

本实验对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\94_ds18b20_02

编写完成的ds18b20.c代码如下所示。

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/kdev_t.h>
#include <linux/slab.h>struct ds18b20_data
{dev_t dev_num;                  // 设备号struct cdev ds18b20_cdev;       // 字符设备结构struct class *ds18b20_class;    // 设备类struct device *ds18b20_device;  // 设备
};struct ds18b20_data *ds18b20;       // 全局设备数据指针// 设备打开函数
int ds18b20_open(struct inode *inode, struct file *file)
{return 0;
}// 设备读取函数
ssize_t ds18b20_read(struct file *file, char __user *buf, size_t size, loff_t *offs)
{return 0;
}// 设备释放函数
int ds18b20_release(struct inode *inode, struct file *file)
{return 0;
}// 定义设备文件操作结构
struct file_operations ds18b20_fops = {.open = ds18b20_open,.read = ds18b20_read,.release = ds18b20_release,.owner = THIS_MODULE,
};// 设备探测函数
int ds18b20_probe(struct platform_device *dev)
{int ret;printk("This is probe \n");// 分配设备数据结构内存ds18b20 = kzalloc(sizeof(*ds18b20), GFP_KERNEL);if (ds18b20 == NULL){printk("kzalloc error\n");ret = -ENOMEM;goto error_0;}// 分配字符设备号ret = alloc_chrdev_region(&ds18b20->dev_num, 0, 1, "myds18b20");if (ret < 0){printk("alloc_chrdev_region error\n");ret = -EAGAIN;goto error_1;}// 初始化字符设备并添加到系统cdev_init(&ds18b20->ds18b20_cdev, &ds18b20_fops);ds18b20->ds18b20_cdev.owner = THIS_MODULE;cdev_add(&ds18b20->ds18b20_cdev, ds18b20->dev_num, 1);// 创建设备类ds18b20->ds18b20_class = class_create(THIS_MODULE, "sensors");if (IS_ERR(ds18b20->ds18b20_class)){printk("class_create error\n");ret = PTR_ERR(ds18b20->ds18b20_class);goto error_2;}// 创建设备ds18b20->ds18b20_device = device_create(ds18b20->ds18b20_class, NULL, ds18b20->dev_num, NULL, "ds18b20");if (IS_ERR(ds18b20->ds18b20_device)){printk("device_create error\n");ret = PTR_ERR(ds18b20->ds18b20_device);goto error_3;}return 0;error_3:class_destroy(ds18b20->ds18b20_class);error_2:cdev_del(&ds18b20->ds18b20_cdev);unregister_chrdev_region(ds18b20->dev_num, 1);error_1:kfree(ds18b20);error_0:return ret;
}// 定义设备匹配表
const struct of_device_id ds18b20_match_table[] = {{ .compatible = "ds18b20" },{ },
};// 定义平台驱动
struct platform_driver ds18b20_driver = {.driver = {.owner = THIS_MODULE,.name = "ds18b20",.of_match_table = ds18b20_match_table,},.probe = ds18b20_probe,
};// 模块初始化函数
static int __init ds18b20_init(void)
{int ret;ret = platform_driver_register(&ds18b20_driver);if (ret < 0){printk("platform_driver_register error\n");return -1;}return 0;
}//模块退出函数
static void __exit ds18b20_exit(void)
{// 销毁设备device_destroy(ds18b20->ds18b20_class, ds18b20->dev_num);// 销毁设备类class_destroy(ds18b20->ds18b20_class);// 删除字符设备cdev_del(&ds18b20->ds18b20_cdev);// 注销字符设备号unregister_chrdev_region(ds18b20->dev_num, 1);// 释放设备数据结构内存kfree(ds18b20);// 注销平台驱动platform_driver_unregister(&ds18b20_driver);
}// 注册模块初始化和退出函数
module_init(ds18b20_init);
module_exit(ds18b20_exit);MODULE_LICENSE("GPL");

158.2 编译驱动程序

在上一小节中的ds18b20.c代码同一目录下创建 Makefile 文件,Makefile 文件内容如下所示:

export ARCH=arm64#设置平台架构
export CROSS_COMPILE=aarch64-linux-gnu-#交叉编译器前缀
obj-m +=ds18b20.o    #此处要和你的驱动源文件同名
KDIR :=/home/topeet/Linux/linux_sdk/kernel    #这里是你的内核目录                                                                                                                            
PWD ?= $(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules    #make操作
clean:make -C $(KDIR) M=$(PWD) clean    #make clean操作

对于Makefile的内容注释已在上图添加,保存退出之后,来到存放ds18b20.c和Makefile文件目录下,如下图所示:

然后使用命令“make”进行驱动的编译,编译完成如下图所示:

编译完生成ds18b20.ko目标文件,如下图所示:

至此DS18b20字符设备驱动框架编写完成了,并且编译驱动模块成功了。

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

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

相关文章

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

鸿蒙OS元服务开发:【WebGL网页图形库开发概述】

WebGL的全称为Web Graphic Library(网页图形库)&#xff0c;主要用于交互式渲染2D图形和3D图形。目前HarmonyOS中使用的WebGL是基于OpenGL裁剪的OpenGL ES&#xff0c;可以在HTML5的canvas元素对象中使用&#xff0c;无需使用插件&#xff0c;支持跨平台。WebGL程序是由JavaScr…

《信息技术服务 智能运维 第2部分:数据治理》国家标准2024年第一次线下编写会议成功召开

2024年3月13日~15日&#xff0c;由运维数据治理国标编制组主办的运维数据治理国家标准2024年第一次编写工作会议在上海成功召开。 本次会议由云智慧&#xff08;北京&#xff09;科技有限公司承办&#xff0c;来自南网数字集团信通公司、太保科技、平安银行、广发银行、广东农…

什么是AIGC,AIGC的应用领域有哪些,以及对AIGC的未来展望有什么值得关注的方向

AIGC:人工智能生成内容的深度解析 在数字技术的浪潮中,AIGC(ArtificialIntelligenceGeneratedContent,人工智能生成内容)逐渐崭露头角,成为继专业生产内容(PGC)和用户生产内容(UGC)之后的新型内容创作方式。它不仅改变了内容生产的传统模式,更在多个行业中展现出…

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议&#xff0c;包括功能、边界、异常、链路、上下游和并发等方面&#xff1a; 通过综合考虑这些测试维度&#xff0c;并设计相应的测试用例&#xff0c;可以更全面地评…

CCF-B推荐会议 ICSME’24 4月11日截稿 速来参与

会议之眼 快讯 第40届ICSME 2024 (IEEE International Conference on Software Maintenance and Evolution)即IEEE软件维护与发展国际会议将于 2024 年 10月6日-11日在美国弗拉格斯塔夫阿兹举行&#xff01;ICSME是学术界、工业界和政府研究人员和从业者的首要国际论坛&#x…

阿里AI编码助手“通义灵码”安装及使用

1.介绍 “通义灵码”是一款基于阿里云通义代码大模型打造的智能编码助手&#xff0c;产品于2023年10月31日云栖大会上&#xff0c;正式对外发布。 核心使用场景&#xff1a;代码智能生成和研发智能问答。 主要功能点&#xff1a; &#xff08;1&#xff09;行级/函数级实时…

PSDK 102S V3:航测领域的革新者

在航测领域&#xff0c;精确、高效的数据获取一直是行业追求的目标。PSDK 102S V3&#xff0c;作为SHAR三赛尔推出的一款高性能倾斜摄影相机&#xff0c;凭借其先进的技术和卓越的性能&#xff0c;正在成为航测领域的革新者。 自研三轴智能稳定云台&#xff1a;PSDK 102S V3配备…

Canal1.1.5整Springboot在MQ模式和TCP模式监听mysql

canal本实验使用的是1.1.5&#xff0c;自行决定版本&#xff1a;[https://github.com/alibaba/canal/releases] canal 涉及的几个角色 canal-admin&#xff1a;canal 后台管理系统&#xff0c;管理 canal 服务canal-deployer&#xff1a;即canal-server&#xff08;客户端&…

市场瞭望杂志市场瞭望杂志社市场瞭望编辑部2024年第2期目录

福山福水 拼经济&#xff0c;2024福建这样布局 林先昌 ;谢何平 ;余燕芳 ;陈强 ;王茜 ;刘星; 3-5 财经搜要 人民银行宣布“降准定向降息” 6《市场瞭望》投稿&#xff1a;cnqikantg126.com 两部门印发《意见》促进制造业中试创新发展 6 首部《中国企业信用年鉴》…

AI提速 OpenAI 新模型GPT-5今年上线?

这两天&#xff0c;有关OpenAI新模型 GPT-5的消息又多了起来。有知情人士称&#xff0c;OpenAI将在今年年中的某个时候发布GPT-5&#xff0c;很可能是在今年夏天期间。OpenAI CEO 萨姆奥特曼在一次播客采访中透露“GPT-5的智能水平得到提升”。 有趣的是&#xff0c;播客的主理…

阿里云免费证书过期更换证书操作步骤:

阿里云证书过期更换证书操作步骤&#xff1a; 登录阿里云控制台&#xff0c;搜索ssl证书&#xff0c;选择免费证书 点击创建证书&#xff0c;输入域名点确定&#xff0c;然后点击证书申请 选择文件验证方式&#xff0c;提交申请 下载验证文件fileauth.text到&#xff0c;解压后…

OpenHarmony实战:命令行工具hdc安装应用指南

一、工具概述 hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。 简言之&#xf…

XenCenter 2024 导出虚拟机

选择导出 选择需要导出的虚拟机 导出位置&#xff0c;导出格式&#xff0c;名称 EULA 文档&#xff0c;根据自己需求配置 OVA是否需要加密验证&#xff0c;自己需要看&#xff0c;是否单独的OVA 确认导出配置&#xff0c;等待导出完成。 本地目录查看导出完成

Isaac sim的一些例程

一、standalone_examples 里面有AMR自主导航的例子&#xff0c;jetbot强化学习的例子等等&#xff1b; 二、 Simulated -> Demo Scenes &#xff08;physics demo scenes&#xff09; 这个里面有很多物理场景演示&#xff0c;如各种形态车辆&#xff0c;关节机器人&#xf…

亚远景科技-ASPICE评估输入

评估输入应在评估的数据收集阶段之前确定&#xff0c;并得到评估发起人的批准。 评估输入的任何更改都应征得发起人或发起人授权人的同意&#xff0c;并记录在评估记录中。 评估输入至少应明确以下内容&#xff1a; 原文链接&#xff1a;ASPICE评估-ASPICE评估输入-亚远景

拼多多跨境电商Temu:1688选品进货新思路

Temu&#xff0c;作为拼多多推出的跨境电商平台&#xff0c;自2022年9月正式上线以来&#xff0c;迅速在全球市场上崭露头角。这个平台秉承了拼多多的理念&#xff0c;致力于通过社交电商模式&#xff0c;为全球消费者提供物美价廉的商品。它不仅是一个购物平台&#xff0c;更是…

inBuilder 低代码平台新特性推荐 - 第十七期

今天来给大家带来的是 inBuilder 低代码平台特性推荐系列第十七期——如何在列表上添加图片。 一、 场景介绍 在表单开发的业务场景中&#xff0c;会有需要在列表上显示图片的场景&#xff0c;本文以车辆登记信息场景为例&#xff0c;介绍如何在列表上添加图片的开发过程。 …

linux离线安装NodeJs

一、官方下载 地址&#xff1a;Node.js — Download Node.js 选择linux系统版本 为了防止安装过程出现一些适配问题&#xff0c;我没有选择下载最新版&#xff0c;实际应该下载你的前端所用的nodejs版本 未完待续。。

GPT-5:更强的ChatGPT!将在高级推理功能上实现重大进步!GPT-5有哪些功能作用?

自 Claude 3 发布以来&#xff0c;外界对 GPT-5 的期待越来越强。毕竟Claude 3已经全面超越了 GPT-4&#xff0c;成为迄今为止最强大模型。 对于即将发布的GPT-5&#xff0c;有哪些期待&#xff1f; 目前来说&#xff0c;GPT-5的将具备哪些新能力&#xff1f; GPT-5性能进步…