第一个hello驱动

Linux驱动程序的分类

  • 字符设备驱动、块设备驱动和网络设备驱动。

Linux驱动程序运行方式

  • 把驱动程序编译进内核里面,这样内核启动后就会自动运行驱动程序了;
  • 把驱动程序编译成以.ko为后缀的模块文件,然后在Linux启动后,我们自己手动安装驱动程序。

驱动程序

#include <linux/module.h>	//包含初始化加载模块的头文件
#include <linux/init.h>		//包含宏定义的头文件static int hello_init(void)
{printk("hello_init\n");return 0;
}static void hello_exit(void)
{printk("hello_exit\n");
}module_init(hello_init);	//驱动入口
module_exit(hello_exit);	//驱动出口MODULE_LICENSE("GPL");	//许可声明
MODULE_AUTHOR("CMF");	//作者
MODULE_VERSION("V1.0");	//版本

Makefile

ARCH            ?= arm64
CROSS_COMPILE   ?= /home/cmf/debian/LubanCat_SDK/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-export ARCH
export CROSS_COMPILE
# -m表示编译成模块
obj-m += hello.o
KDIR:=/home/cmf/debian/LubanCat_SDK/kernel
PWD?=$(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules	#make modules 使用来编译成内核模块的echo $(PWD)clean:rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order

编译

这里我们使用把驱动程序编译成以.ko为后缀的模块文件的方式,首先要保证kernel已经被成功编译过的。再修改Makefile,其中CROSS_COMPILE,KDIR使用自己的目录。编译成功后会生成hello.ko文件。

把ko文件拷贝到开发板

scp hello.ko cat@192.168.31.110:	(省略远程目录默认为主机的家目录即: ~)

在这里插入图片描述

安装驱动模块

# 打印驱动模块信息
cat@lubancat:~$ modinfo hello.ko
filename:       /home/cat/hello.ko
version:        V1.0
author:         CMF
license:        GPL
srcversion:     AABA8E17AB5E10CE104D4C1
depends:
name:           hello
vermagic:       4.19.232 SMP mod_unload aarch64’
# 安装驱动模块
cat@lubancat:~$ sudo insmod hello.ko
[ 4616.557876] hello_init
# 查看已安装的驱动模块
cat@lubancat:~$ lsmod
Module                  Size  Used by
hello                  16384  0
iwlmvm                368640  0
iwlwifi               270336  1 iwlmvm
r8125                 143360  0
cat@lubancat:~$ cat /proc/modules
hello 16384 0 - Live 0x0000000000000000 (O)
iwlmvm 368640 0 - Live 0x0000000000000000
iwlwifi 270336 1 iwlmvm, Live 0x0000000000000000
r8125 143360 0 - Live 0x0000000000000000
# 卸载驱动模块
cat@lubancat:~$ sudo rmmod hello
[ 4634.443350] hello_exit

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

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

相关文章

微信小程序(二十一)css变量-定义页面主题色

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码&#xff1a; npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…

Linux多线程——线程池

本章Gitee仓库&#xff1a;线程池、单例模式 文章目录 1. 池化技术简述2. 线程池3. 单例模式3.1 单例模式特点3.2 饿汉方式和懒汉方式3.3 单例模式线程安全 1. 池化技术简述 C中的STL&#xff0c;当空间不够时&#xff0c;会自动扩容&#xff0c;这个并不是我们需要多少&#…

sqli-labs闯关

目录 1.安装靶场2.了解几个sql常用知识2.1联合查询union用法2.2MySQL中的通配符&#xff1a;2.3常用函数2.4数据分组 3.mysql中重要的数据库和表4.开始闯关4.1 Less-14.1.1 首先进行一次常规的注入4.1.2 深入解析 1.安装靶场 1.首先推荐使用github下载靶场源码 https://githu…

Matlab处理excel数据

我们新建个excel文档&#xff0c;用Matlab读取里面的内容&#xff0c;计算和判断里面的计算结果是否正确&#xff0c;并打印到另一个文档当中。 新建文档 新建输入文档&#xff0c;文件名TestExcel 编写脚本 [num,txt] xlsread(TestExcel.xlsx); SNcode num(:,1);%从序号中…

《微信小程序开发从入门到实战》学习九十六

7.2 基础内容组件 7.2.4 progress组件 progress组件的示例代码如下&#xff1a; <progress percent"20" show-info /> 7.3 表单组件 表单组件是用于收集信息的组件。第三章介绍了许多表单组件&#xff0c;包括form、input、textarea、picker、switch、butt…

eclipse启动Java服务及注意事项

1、导入项目 选择file——》import…——》Generate——》Exiting Projects into Workspace——》选择要导入的项目 2、添加tomcat 1&#xff09;点击Serves——》No servers are available. Click this link to create a new server… 2&#xff09;点击“Add…” 3&…

YOLO 全面回顾:从最初的YOLOv1到最新的YOLOv8、YOLO-NAS,以及整合了 Transformers 的 YOLO

YOLO 全面回顾 综述评估指标YOLO v1YOLO v2YOLO v3YOLO v4YOLOv5 与 Scaled-YOLOv4 YOLORYOLOXYOLOv6YOLOv7DAMO-YOLOYOLOv8PP-YOLO, PP-YOLOv2, and PP-YOLOEYOLO-NASYOLO with Transformers 综述 论文&#xff1a;https://arxiv.org/pdf/2304.00501.pdf 代码&#xff1a;gi…

MySQL知识点总结(一)——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推

MySQL知识点总结&#xff08;一&#xff09;——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推 一条SQL的执行过程索引底层数据结构为什么不使用二叉树&#xff1f;为什么不使用红黑树?为什么不使用hash表&#xff1f;为什么不使用…

Windows Qt C++ VTK 绘制三维曲线

Qt 自带数据可视化从文档上看&#xff0c;只能实现三维曲面。 QwtPlot3D在Qt6.6.0上没编译通过。 QCustomPlot 只能搞二维。 VTK~搞起。抄官网demo。 后续需求&#xff1a; 1、对数轴 2、Y轴逆序 3、Z轴值给色带&#xff0c;类似等高线图的色带 期待各位大佬多多指导。…

ad18学习笔记十六:v割

所谓“V割”是印刷电路板&#xff08;PCB&#xff09;厂商依据客户的图纸要求&#xff0c;事先在PCB的特定位置用转盘刀具切割好的一条条分割线&#xff0c;其目的是为了方便后续SMT电路板组装完成后的分板之用&#xff0c;因为其切割后的外型看起来就像个英文的“V”字型&…

C++从初级工程师到中级工程师【个人学习笔记】

目录 1 背景2 要点2.1 内存分区模型2.1.1 程序运行前2.1.2 代码 2.2.1 程序运行后栈区代码 1 背景 从这一章开始&#xff0c;开始学习C的面向对象编程&#xff0c;是C中的核心。 2 要点 2.1 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&…

vue3项目+TypeScript前端项目—— vue3搭建项目+eslint+husky

今天来带大家从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinst…

智能音箱喇叭杂音问题

智能音箱喇叭杂音问题 智能音箱生厂或出货过程会遇到多种喇叭播放有杂音的问题&#xff0e; 螺丝不匹配 智能音箱设备在生产过程&#xff0c;会有SPL测试喇叭失真&#xff0c;发现不良率8%的杂音问题&#xff0e; 分析原因是来料导入了新螺丝&#xff0c; 使用过程进入异物…

Python笔记15-实战小游戏飞机大战(中)

文章目录 创建第一个敌机创建一群敌机创建多行敌机让敌机移动射杀敌机生成新的敌机群结束游戏有敌机到达屏幕底端游戏结束 在上一篇基础上继续 本示例源码地址 点击下载 创建第一个敌机 在屏幕上放置外星人与放置飞船类似。每个外星人的行为都由Alien 类控制&#xff0c;我们…

docker 部署xxl-job

docker 部署xxl-job XXL-JOB github地址 https://github.com/xuxueli/xxl-job XXL-JOB 文档地址 https://www.xuxueli.com/xxl-job/ XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品…

利用ChatGPT提升工作效率的专业指南

利用ChatGPT提升工作效率的专业指南 一、引言 在数字化时代&#xff0c;人工智能助手已经成为提高工作效率的必备工具。其中&#xff0c;ChatGPT以其强大的自然语言处理能力&#xff0c;为我们提供了全新的工作方式。本文将深入探讨如何利用ChatGPT在各个工作领域中提升效率&a…

ChatGPT与文心一言:智能回复与语言准确性的较量

在当今数字化时代&#xff0c;随着人们对智能化技术的需求不断增长&#xff0c;智能回复工具也成为了日常生活中不可或缺的一部分。ChatGPT和文心一言作为两个备受瞩目的智能回复工具&#xff0c;在智能回复、语言准确性以及知识库丰富度等方面各有卓越之处。 本文将对这两者进…

LPC系列一个定时器不同频率

1.背景 最近研究的LPC804里只有一个ctimer&#xff0c;很多时候用的捉襟见肘的&#xff0c;官方给了一份双匹配的参考例程&#xff0c;不过实际用处不大。不过我花了一晚上的时间&#xff0c;终于研究出来将一个定时器拆成四个定时器用的办法了。这个方法适用于用回调函数的LP…

贪吃蛇游戏的实现

一.技术要点: 贪吃蛇需要掌握: c语言函数,枚举,结构体,动态内存管理,预处理指令,链表,Win32 API等 二.Win32 API 1.Win32 API简介 windows可以帮应用程序卡其视窗,描绘图案,使用周边设备,,Win32 API就是windows32位平台上的应用程序编程接口 2.控制台程序 (1).使用cmd命令…

Pycharm连接云算力远程服务器(AutoDL)训练深度学习模型全过程

前言&#xff1a;在上一篇windows搭建深度学习环境中&#xff0c;我试图使用笔记本联想小新air14的mx350显卡训练一个图像检测的深度学习模型&#xff0c;但是训练时长大概需要几天时间远超我的预期&#xff0c;所以我便选择租用GPU进行训练&#xff0c;在对多家平台对比后找到…