04_device_bus_driverLinux内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读45次。环境ID=ubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136157384%22%2C%22source%22%3A%22m0_37132481%22%7D

device_bus_driver.c

root@T:/media/sf_D_DRIVE/kmodule/04_device_bus_driver# cat device_bus_driver.c
#include <linux/module.h>
#include <linux/device.h>
#include <linux/slab.h>

#define TAG "HELLO# "

struct device *dev = NULL;
struct device_driver *drv = NULL;

static int my_bus_match(struct device *_dev, struct device_driver *_drv)
{
        printk(TAG "%s called\n", __func__);
        return !strcmp(dev_name(dev), drv->name);
}

static int my_bus_probe(struct device *dev)
{
        printk(TAG "%s called\n", __func__);
        printk(TAG "hello drv_%s, dev_%s, Happy Marriage!\n", dev->driver->name, dev_name(dev));
        return 0;
}

static void my_bus_remove(struct device *dev)
{
        printk(TAG "%s called\n", __func__);
}

struct bus_type my_bus_type = {
        .name           = "my-bus",
        .match          = my_bus_match,
        .probe          = my_bus_probe,
        .remove         = my_bus_remove,
};

static int device_bus_driver_init(void)
{
        printk(TAG "%s called\n", __func__);

        /* register bus */
        bus_register(&my_bus_type);

        /* register device */
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        dev->init_name = "hello";
        dev->bus = &my_bus_type;
        device_register(dev);
        dev = get_device(dev);

        /* register driver */
        drv = kzalloc(sizeof(*drv), GFP_KERNEL);
        drv->name = "hello";
        drv->bus = &my_bus_type;
        driver_register(drv);

        return 0;
}
static void device_bus_driver_exit(void)
{
        printk(TAG "%s called\n", __func__);
        /* unregister driver */
        driver_unregister(drv);
        /* unregister device */
        device_unregister(dev);
        /* unregister bus */
        bus_unregister(&my_bus_type);
        /* free resource */
        kfree(dev);
        kfree(drv);
}

module_init(device_bus_driver_init);
module_exit(device_bus_driver_exit);
MODULE_LICENSE("GPL");

效果

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c高级 函数+Makefile

一、作业 1.写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果 #!/bin/bash function fun(){retid -uret1id -gecho $ret $ret1 } retfun echo $ret二、练习回顾 1.分文件编译&#xff08;实现冒泡排序&#xff09; 正确的&#xff1a;将数组的…

<网络安全>《35 网络攻防专业课<第一课 - 网络攻防准备>》

1 主要内容 认识黑客 认识端口 常见术语与命令 网络攻击流程 VMWare虚拟环境靶机搭建 2 认识黑客 2.1 白帽、灰帽和黑帽黑客 白帽黑客是指有能力破坏电脑安全但不具恶意目的黑客。 灰帽黑客是指对于伦理和法律态度不明的黑客。 黑帽黑客经常用于区别于一般&#xff08;正面…

【性能测试】分布式压测之locust和Jmeter的使用

受限于单台机器的配置问题&#xff0c;我们在单台机器上达不到一个很高的压测并发数&#xff0c;那这个时候就需要引入分布式压测 分布式压测原理&#xff1a; 一般通过局域网把不同测试计算机链接到一起&#xff0c;达到测试共享、分散操作、集中管理的目的。 选择一台作为…

二叉树(4)——链式二叉树

1 二叉树的概念 二叉树是&#xff1a; 空树非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右子树组成的。 二叉树定义是递归式的&#xff0c;因此后序基本操作中基本都是按照该概念实现的。 2 二叉树的遍历 2.1 前序、中序以及后序遍历 学习二叉树结构&#xf…

单片机学习笔记---AD模数转换DA数模转换

目录 AD模数转换 XPT2046.c XPT2046.h main.c DA数模转换 main.c 上一篇博客讲了AD/DA转换的工作原理&#xff0c;也介绍了运算放大器的工作原理&#xff0c;这节开始代码演示&#xff01; AD模数转换 新创建一个工程&#xff1a;AD模数转换 第一个工程将用到LCD1602和…

Day20 -- learning english

一、积累 1.gulp 2.clog 3.artery 4.bloat 5.kidnap 6.groom 7.prey 8.cargo 9. jerk 10.treadmill 11.shatter 12. acrobatic 13. aggravate 14.moldy 15.curl 16.manual 17.slay 18.sibling 19.hatch 20.dense 二、练习 1.牛津原译 Gulp /ɡʌlp 1.~ sth (down)to swallow …

[计算机网络]深度学习传输层TCP协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;深度学习传输层TCP协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 [计算机网络]深度学习传输层TCP协议 前提概括一: TCP协议段格式二:确认应答三:超时重传四:…

YOLO v5项目实战 P5 解决运行detect文件时设置了--view-img但是显示不出来的问题

up主讲的实时显示目标检测后的图片的两种方法&#xff1a; &#xff08;1&#xff09;在下面的Terminal中输入下列命令&#xff1a; python detect.py --view-img &#xff08;2&#xff09;点击进入右上方的detect的Edit Configurations 然后在这个参数这里输入 --view img…

企业建站用什么服务器,多线BGP线路服务器值得信赖

随着数字化时代的到来&#xff0c;很多企业会选择建立自己的网站&#xff0c;让企业网站成为对外展示、业务开展的平台。但是有的企业在建站时&#xff0c;选择了不适合的服务器&#xff0c;导致出现访问延迟、数据加载缓慢等问题&#xff0c;对企业的形象和业务造成很大影响。…

简析剩余电流动作继电器在油气田站场内监测路灯接地方式

安科瑞电气股份有限公司 上海嘉定 201801 【摘要】油气站站场内路灯接地方式多采用TT系统&#xff0c;部分采用TN-S系统&#xff0c;但无论TT系统还是TN-S系统均存在相应问题&#xff0c;为解决相应问题&#xff0c;本文建议油气田站场内路灯接地方式采用TN-S系统局部TT系统。…

SQL补充:窗口函数

SQL窗口函数 结合order by关键词和limit关键词是可以解决很多的topN问题&#xff0c;比如从二手房数据集中查询出某个地区的最贵的10套房&#xff0c;从电商交易数据集中查询出实付金额最高的5笔交易&#xff0c;从学员信息表中查询出年龄最小的3个学员等。 但是&#xff0c;…

C/C++数据结构——剖析排序算法

1. 排序的概念及其运用 1.1 排序的概念 https://en.wikipedia.org/wiki/Insertion_sorthttps://en.wikipedia.org/wiki/Insertion_sort 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的…

自然语言编程系列(一):自然语言和程序语言介绍

1.自然语言和程序语言 自然语言和程序语言是两种截然不同但又相互关联的语言体系&#xff0c;它们分别服务于人类日常交流和计算机指令执行。 自然语言&#xff1a; 定义&#xff1a;自然语言是指人类在日常生活中使用的语言&#xff0c;如英语、汉语、法语等。它是非正式且灵…

FPFH特征描述符、对应关系可视化以及ICP配准

一、FPFH特征描述符可视化 C #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/search/kdtree.h> #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d_omp.h>//使用OMP需要添加的头文件 #include <boo…

Python一级考试笔记

Python一级考试笔记【源源老师】 前置知识&#xff1a;&#xff08;了解即可&#xff09; Python常见的几种编程环境&#xff1a;IDLE&#xff08;自带&#xff09;、Visual Studio Code、Jupyter、pyCharm&#xff1b; python版本&#xff1a;python3 和 python2&#xff08;…

开源模型应用落地-工具使用篇-向量数据库(三)

一、前言 通过学习"开源模型应用落地"系列文章&#xff0c;我们成功地建立了一个完整可实施的AI交付流程。现在&#xff0c;我们要引入向量数据库&#xff0c;作为我们AI服务的二级缓存。本文将详细介绍如何使用Milvus Lite来为我们的AI服务部署一个前置缓存。 二、术…

论文阅读_用模型模拟记忆过程

英文名称: A generative model of memory construction and consolidation 中文名称: 记忆构建和巩固的生成模型 文章: https://www.nature.com/articles/s41562-023-01799-z 代码: https://github.com/ellie-as/generative-memory 作者: Eleanor Spens, Neil Burgess&#xff…

python+pytest自动化测试函数测试类测试方法的封装

前言 今天呢&#xff0c;笔者想和大家聊聊pythonpytest接口自动化中将代码进行封装&#xff0c;只有将测试代码进行封装&#xff0c;才能被测试框架识别执行。 例如单个接口的请求代码如下&#xff1a; 1 2 3 4 5 6 import requests headers { "user-agent":…

证明之三条看似显然实则需要证明的陈述

三条看似显然实则需要证明的陈述 “表面显然的数学定理&#xff1a;隐藏的证明之谜” 较高等的数学中&#xff0c;有一点让很多人感到费解&#xff1a;其中有一些定理看上去非常显然&#xff0c;简直无须证明。遇到这样的定理时&#xff0c;人们常常会问&#xff1a;“如果这…

海外媒体发稿:掌握这8个东南亚媒体发稿的技巧-华媒舍

在如今的数字化时代&#xff0c;媒体的地位越来越重要&#xff0c;尤其在东南亚地区。了解如何在关键时刻掌握东南亚媒体发稿的技巧是非常重要的。本文将介绍8个在东南亚地区重要的媒体发稿技巧&#xff0c;帮助您更好地传达信息。 1. 熟悉目标媒体 要掌握东南亚媒体发稿的技巧…