当前位置: 首页 > news >正文

RK3568笔记三十三: helloworld 驱动测试

若该文为原创文章,转载请注明原文出处。

报着学习态度,接下来学习驱动是如何使用的,从简单的helloworld驱动学习起。

开始编写第一个驱动程序—helloworld 驱动。

一、环境

1、开发板:正点原子的ATK-DLRK3568
2、系统: buildroot
3、内核:正点原子提供的虚拟机和rk3568_linux_sdk

二、驱动的基本框架

Linux 驱动的基本框架主要由模块加载函数,模块卸载函数,模块许可证声明,模块参数, 模块导出符号,模块作者信息等几部分组成,其中模块参数,模块导出符号,模块作者信息是 可选的部分,也就是可要可不要。剩余部分是必须有的。
1. 模块加载函数
当使用加载驱动模块时,内核会执行模块加载函数,完成模块加载函数中的初始化工作。
2.模块卸载函数
当卸载某模块时,内核会执行模块卸载函数,完成模块卸载函数中的退出工作。
3.模块许可证声明
许可证声明描述了内核模块的许可权限,如果不声明模块许可,模块在加载的时候,会收到“内核被污染(kernel tainted)”的警告。可接受的内核模块声明许可包括“GPL”“GPL v2”。
4.模块参数(可选择)
模块参数是模块被加载的时候可以传递给它的值。
5.模块导出符号(可选择)
内核模块可以导出的符号,如果导出,其他模块可以使用本模块中的变量或函数。
6.模块作者信息等说明(可选择)

三、helloworld 驱动代码

#include <linux/module.h>
#include <linux/kernel.h>static int __init helloworld_init(void) //驱动入口函数
{printk(KERN_EMERG "helloworld_init\r\n");//注意:内核打印用 printk 而不是 printfreturn 0;
}static void __exit helloworld_exit(void) //驱动出口函数
{printk(KERN_EMERG "helloworld_exit\r\n");
}module_init(helloworld_init); //注册入口函数module_exit(helloworld_exit); //注册出口函数MODULE_LICENSE("GPL v2"); //同意 GPL 开源协议MODULE_AUTHOR("yifeng"); //作者信息

根据驱动的基本框架,编写了最简单的helloworld程序,加载驱动和卸载驱动时直接打印信息。

编译驱动需要内核代码,环境自行编译。

根据正点原子的手册编译需要设置环境变量,这里直接填写到makefile里

makefile:

# 内核目录
KERNELDIR := /home/alientek/rk3568_linux_sdk/kernel
# rk3568是arm64架构
ARCH=arm64
# 交叉工具链
CROSS_COMPILE=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-
export  ARCH  CROSS_COMPILECURRENT_PATH := $(shell pwd)
obj-m := helloworld.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

在这里插入图片描述直接make会生成helloworld.ko文件 ,这就是编译生成的内核驱动模块

四、测试

启动开发板,把生成的helloworld.ko文件拷贝到板子上。

加载ko文件

insmod helloworld.ko

在这里插入图片描述

查看当前加载的内核模块

lsmod

在这里插入图片描述
查看当前系统中有没有 helloworld这个设备

cat /proc/devices

结果查询不到,因为没注册。

卸载驱动模块

rmmod helloworld.ko

在这里插入图片描述

这个模块是最基础的模板,下面大部分驱动都以此模板编写。

如有侵权,或需要完整代码,请及时联系博主。

相关文章:

RK3568笔记三十三: helloworld 驱动测试

若该文为原创文章&#xff0c;转载请注明原文出处。 报着学习态度&#xff0c;接下来学习驱动是如何使用的&#xff0c;从简单的helloworld驱动学习起。 开始编写第一个驱动程序—helloworld 驱动。 一、环境 1、开发板&#xff1a;正点原子的ATK-DLRK3568 2、系统&#xf…...

【智能制造-14】机器视觉软件

CCD相机和COMS相机? CCD&#xff08;Charge-Coupled Device&#xff09;相机和CMOS&#xff08;Complementary Metal-Oxide-Semiconductor&#xff09;相机是两种常见的数字图像传感器技术&#xff0c;用于捕捉和处理图像。 CCD相机&#xff1a; CCD相机使用一种称为CCD的光电…...

MVC分页

public ActionResult Index(int ? page){IPagedList<EF.ACCOUNT> userPagedList;using (EF.eMISENT content new EF.eMISENT()){第几页int pageNumber page ?? 1;每页数据条数&#xff0c;这个可以放在配置文件中int pageSize 10;//var infoslist.C660List.OrderBy(…...

webGL可用的14种3D文件格式,但要具体问题具体分析。

hello&#xff0c;我威斯数据&#xff0c;你在网上看到的各种炫酷的3d交互效果&#xff0c;背后都必须有三维文件支撑&#xff0c;就好比你网页的时候&#xff0c;得有设计稿源文件一样。WebGL是一种基于OpenGL ES 2.0标准的3D图形库&#xff0c;可以在网页上实现硬件加速的3D图…...

HybridCLR原理中的重点总结

序言 该文章以一个新手的身份&#xff0c;讲一下自己学习的经过&#xff0c;大家更快的学习HrbirdCLR。 我之前的两个Unity项目中&#xff0c;都使用到了热更新功能&#xff0c;而热更新的技术栈都是用的HybridCLR。 第一个项目本身虽然已经集成好了热更逻辑&#xff08;使用…...

昇思学习打卡-14-ResNet50迁移学习

文章目录 数据集可视化预训练模型的使用部分实现 推理 迁移学习&#xff1a;在一个很大的数据集上训练得到一个预训练模型&#xff0c;然后使用该模型来初始化网络的权重参数或作为固定特征提取器应用于特定的任务中。本章学习使用的是前面学过的ResNet50&#xff0c;使用迁移学…...

软件开发面试题C#,.NET知识点(续)

1.C#中的封装是什么&#xff0c;以及它的重要性。 封装&#xff08;Encapsulation&#xff09; 是面向对象编程&#xff08;OOP&#xff09;的一个基本概念。它指的是将对象的状态&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;绑定在一起&#xff0c;并且将…...

2019年美赛题目Problem A: Game of Ecology

本题分析&#xff1a; 本题想要要求从实际生物角度出发&#xff0c;对权力游戏中龙这种虚拟生物的生态环境和生物特性进行建模&#xff0c;感觉属于比较开放类型的题目&#xff0c;重点在于参考生物的选择&#xff0c;龙虽然是虚拟的但是龙的生态特性可以参考目前生物圈里存在…...

沙龙回顾|MongoDB如何充当企业开发加速器?

数据不仅是企业发展转型的驱动力&#xff0c;也是开发者最棘手的问题。前日&#xff0c;MongoDB携手阿里云、NineData在杭州成功举办了“数据驱动&#xff0c;敏捷前行——MongoDB企业开发加速器”技术沙龙。此次活动吸引了来自各行各业的专业人员&#xff0c;共同探讨MongoDB的…...

云端编码:将您的技术API文档安全存储在iCloud的最佳实践

云端编码&#xff1a;将您的技术API文档安全存储在iCloud的最佳实践 作为一名技术专业人士&#xff0c;管理不断增长的API文档库是一项挑战。iCloud提供了一个无缝的解决方案&#xff0c;允许您在所有设备上存储、同步和访问您的个人技术API文档。本文将指导您如何在iCloud中高…...

在Spring Boot项目中集成单点登录解决方案

在Spring Boot项目中集成单点登录解决方案 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代的企业应用中&#xff0c;单点登录&#xff08;Single Sign-On, SSO&#xff09;解决方案是确保用户…...

Java-常用API

1-Java API &#xff1a; 指的就是 JDK 中提供的各种功能的 Java类。 2-Scanner基本使用 Scanner&#xff1a; 一个简单的文本扫描程序&#xff0c;可以获取基本类型数据和字符串数据 构造方法&#xff1a; Scanner(InputStream source)&#xff1a;创建 Scanner 对象 Sy…...

Python从Excel表中查找指定数据填入新表

#读取xls文件中的数据 import xlrd file "原表.xls" wb xlrd.open_workbook(file) #读取工作簿 ws wb.sheets()[0] #选第一个工作表 data [] for row in range(7, ws.nrows): name ws.cell(row, 1).value.strip() #科室名称 total1 ws.cell(row, 2…...

从零开始实现大语言模型(三):Token Embedding与位置编码

1. 前言 Embedding是深度学习领域一种常用的类别特征数值化方法。在自然语言处理领域&#xff0c;Embedding用于将对自然语言文本做tokenization后得到的tokens映射成实数域上的向量。 本文介绍Embedding的基本原理&#xff0c;将训练大语言模型文本数据对应的tokens转换成Em…...

视频怎么压缩变小?最佳视频压缩器

即使在云存储和廉价硬盘空间时代&#xff0c;大视频文件使用起来仍然不方便。无论是存储、发送到电子邮件帐户还是刻录到 DVD&#xff0c;拥有最好的免费压缩软件可以确保您快速缩小文件大小&#xff0c;而不必担心视频质量下降。继续阅读以探索一些顶级最佳 免费视频压缩器选项…...

LLM - 绝对与相对位置编码 与 RoPE 旋转位置编码 源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140281680 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Transformer 是基于 MHSA (多头自注意力),然而,MHSA 对于位置是不敏感…...

B3917 [语言月赛 202401] 小跳蛙

OK 挠~ stop here~ 好啊&#xff0c;现在呢&#xff0c;把手头的事情先放一放啊&#xff0c;我们来做道练习 OK&#xff1f; 好啊来&#xff1a; 小跳蛙 题目描述 有 &#x1d45b;−1 只小跳蛙在池塘中&#xff0c;依次被编号为 1,2,⋯ ,&#x1d45b;−1。池塘里有 &am…...

Bash ——shell

Bash作为用户与操作系统之间的接口&#xff0c;让用户通过命令行输入各种指令来控制和操作计算机系统。 shell的两种解释&#xff1a; 1.linux命令解释器 Terminal 终端 ——》shell命令 ——》 Linux kernel &#xff08;内核&#xff09; Linux内核的作用&#xff1a; 1.…...

PyTorch复现PointNet——模型训练+可视化测试显示

因为项目涉及到3D点云项目&#xff0c;故学习下PointNet这个用来处理点云的神经网络 论文的话&#xff0c;大致都看了下&#xff0c;网络结构有了一定的了解&#xff0c;本博文主要为了下载调试PointNet网络源码&#xff0c;训练和测试调通而已。 我是在Anaconda下创建一个新的…...

分享五款软件,成为高效生活的好助手

​ 给大家分享一些优秀的软件工具,是一件让人很愉悦的事情&#xff0c;今天继续带来5款优质软件。 1.图片放大——Bigjpg ​ Bigjpg是一款图片放大软件&#xff0c;采用先进的AI算法&#xff0c;能够在不损失图片质量的前提下&#xff0c;将低分辨率图片放大至所需尺寸。无论…...

网盘直链下载助手完整教程:告别限速,解锁九大网盘真实下载链接

网盘直链下载助手完整教程&#xff1a;告别限速&#xff0c;解锁九大网盘真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / …...

系统设计:四叉树与 GeoHash

原文&#xff1a;towardsdatascience.com/system-design-quadtrees-geohash-5b896b975262 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5979ffdcbfe489e84bc8f684cde2911e.png 简介 Google Maps 和 Uber 只是众多处理地理数据的最流行…...

通过curl命令直接测试taotoken平台api接口的详细步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令直接测试Taotoken平台API接口的详细步骤 对于需要在无SDK环境、进行快速功能验证或排查网络问题的开发者而言&#xf…...

ContextMenuManager终极指南:如何快速清理Windows右键菜单提升系统效率

ContextMenuManager终极指南&#xff1a;如何快速清理Windows右键菜单提升系统效率 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否厌倦了每次右键点击文件…...

如何永久保存微信聊天记录?WeChatMsg开源工具让你的数字记忆永不丢失

如何永久保存微信聊天记录&#xff1f;WeChatMsg开源工具让你的数字记忆永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tre…...

【仅限奇点大会注册参会者解锁】:AIGC平台安全基线检查清单v2.6(含GDPR/网信办AIGC新规/生成溯源链三重校验),附自动扫描CLI工具下载链接(时效48小时)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生内容生成平台&#xff1a;2026奇点智能技术大会AIGC系统搭建 在2026奇点智能技术大会上&#xff0c;主办方构建了一套面向多模态协同创作的AI原生内容生成平台&#xff08;AIGC-OS&#xff09;&a…...

Unity UGUI点击事件避坑指南:为什么你的Image点了没反应?

Unity UGUI点击事件避坑指南&#xff1a;为什么你的Image点了没反应&#xff1f; 当你信心满满地在Unity中为Image组件添加了IPointerClickHandler接口&#xff0c;点击运行时却发现无论如何点击屏幕都没有反应——这种挫败感每个Unity开发者都经历过。本文将深入剖析UGUI事件系…...

Agent 应用时代将至,传统基础设施面临挑战,openYuanrong 等系统或成破局关键

Agent 应用时代已至自本轮大模型技术爆发以来&#xff0c;Agent 得到了广泛关注。进入 2026 年后&#xff0c;伴随 OpenClaw 的现象级爆火&#xff0c;Agent 更是彻底破圈&#xff0c;进入了更广阔的大众视野。同时&#xff0c;如果说以往的 Agent 更多用于 Demo 或一些相对定制…...

TikTok评论采集工具:如何轻松获取海量用户反馈数据?

TikTok评论采集工具&#xff1a;如何轻松获取海量用户反馈数据&#xff1f; 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 在社交媒体分析领域&#xff0c;TikTok评论数据蕴含着丰富的用户洞察价值&#x…...

Vue项目里用Video.js播m3u8直播流,我踩过的那些坑(videojs-contrib-hls版)

Vue项目中Video.js集成m3u8直播流的深度排坑指南 1. 引言&#xff1a;当流媒体遇上Vue生态 在Vue项目中实现m3u8直播流播放&#xff0c;看似只是简单的播放器集成&#xff0c;实则暗藏玄机。作为经历过多个企业级视频平台开发的老手&#xff0c;我必须坦言&#xff1a;官方文档…...