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");

效果

 

 

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

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

相关文章

实习日志15

1.大改了一下界面 1.1.识别与验真 1.2.历史记录 2.改了几个bug 2.1.改json格式用JSON.stringify(value,null,2); 2.2.内嵌页面值与原页面值重复 2.3.验真条件判断 if (isVerifyCell.getValue() "不需要") {if (verifyResultCell.getValue() ! "未查验")…

树和二叉树的基本知识

一、树的概念及结构 1.树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个 特殊…

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…

Linux系统的历史记录添加时间和IP信息

1 为什么要优化系统历史记录 对于linux系统&#xff0c;默认情况下&#xff0c;系统记录的历史命令比较简单。某些历史记录可能也无法正常保存&#xff0c;因此当服务器出现异常&#xff0c;希望通过历史命令来了解曾经做了哪些操作时&#xff0c;往往非常被动&#xff0c;下面…

挑战杯 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于CNN实现谣言检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&am…

宜昌博物馆龙文物展,以数据为盾完成文物保护

​一、湖北宜昌博物馆龙文物精品展的独特魅力 近日&#xff0c;在湖北宜昌博物馆举行的甲辰年龙文物精品展上&#xff0c;多件包含“龙元素”的文物正式向社会展出。龙自古以来就是中华民族象征&#xff0c;带有“龙图案”或“龙元素”的物件&#xff0c;广泛存在于中国人“吃…

vue-productionSourceMap作用

当其设置为false时(productionSourceMap: false) 当其设置为true时(productionSourceMap: true) 注:1.当设置为true时,打包后每个文件都有一个.map文件,其目的是为了精确定位代码错误 2.当设置为false时,可减少项目打包大小 3.正式环境禁止使用true,因为其可通过反编译.map文件…

固定资产与总账对账,业务系统出不来数据?

1、【财务会计】-【固定资产】-【与总账对账】 2、【财务会计】-【总账】-【对账执行】 以上两个节点都可以进行 “固定资产与总账” 对账执行 操作。 问题: 固定资产与总账对账,业务系统出不来数据?如下图 : 原因: 固定资产对账要确保,对账月是最早对账月才行,即…

圆筒形正压式采样器

一个人不愿意努力的时候&#xff0c;你怎样帮他也没有用&#xff01;一个人不愿意被点燃的时候&#xff0c;你怎样燃烧也没有用&#xff01;自己想醒&#xff0c;没有闹铃也能够醒来&#xff01;自己想努力&#xff0c;没有帮助也能够成功&#xff01;自己想点燃梦想&#xff0…

12.QT文件对话框 文件的弹窗选择-QFileDialog

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 3.其他函数 参考&#xff1a; 前言&#xff1a; 通过按钮实现文件弹窗选择以及关联的操作 效果图就和平时用电脑弹出的选文件对话框一样 技能&#xff1a; QString filename QFileDialog::ge…

多租户SaaS平台的数据库方案

多租户SaaS平台的数据库方案 1.1 多租户是什么1.2 需求分析1.3 多租户的数据库方案分析1.3.1 独立数据库1.3.2 共享数据库、独立 Schema什么是Schema 1.3.3 共享数据库、共享数据表 1.1 多租户是什么 多租户技术&#xff08;Multi-TenancyTechnology&#xff09;又称多重租赁技…

RK3568驱动指南|驱动基础进阶篇-进阶6 内核运行ko文件实验——系统调用

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…