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

03_添加一个简单的字符设备并支持read操作


register_chrdev()
第一个参数为0 则会自行动态分配主设备号,否则分配传入主设备号,0-255的子设备号;
第二个参数为标签
第三个为文件操作的指针,file_operations 表示这个字符设备支持的文件操作

返回值为注册主设备号,若返回值小于0则代表注册失败了;需要注意的时如果注册时指定的主设备号,那么返回值会变成0

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>

static int major;
static ssize_t  read(struct file *f, char __user *u, size_t l, loff_t *o)
{
        printk("read func called here\n");
        return 0;
}

static struct   file_operations fops = {
        .read = read /* 这里只提供一个read方法 */
};

// enter character print something
int character_init(void)
{
        major = register_chrdev(0, "my_test_cdev", &fops);
        if (major < 0) {
                printk("error happens while register my cdev\n");
                return major;
        }
        printk("cdev register success, dev mahor is %d\n", major);
        printk("this is character dev register enter\n");
        return 0;
}

// exit character print something
void character_exit(void)
{
        printk("this is character exit\n");
}

// func register
module_init(character_init);
module_exit(character_exit);

// add license
MODULE_LICENSE("GPL");
MODULE_AUTHOR("krifood");
MODULE_DESCRIPTION("driver for registering a cdev");

编译这个模块,在日志中找到系统分配的主设备号,然后通过mknod命令新增一个节点

sudo mknod myread c 240 0
新增成功后 可以通过myread进行访问操作 其中参数c指是一个字符设备 240是我们之前申请出来的主设备号

ps: 我这里在模块加载期间是可以直接使用myread访问的,我在卸载了驱动模块后,再次尝试进行访问时,我的WSL崩溃了 不知道其他环境上是什么现象。。。

在这里插入图片描述

http://www.dtcms.com/a/62161.html

相关文章:

  • OpenManus测出死循环bug
  • 球衣号码选几号最好·棒球1号位
  • GStreamer —— 2.16、Windows下Qt加载GStreamer库后运行 - “播放教程 2:字幕管理“(附:完整源码)
  • 文摘:关于提问
  • maven的项目构建
  • iOS中的设计模式(八)- 桥接模式
  • 前端如何发布npm包
  • 【力扣刷题实战】查找总价格为目标值的两个商品
  • C++从零实现Json-Rpc框架
  • Flink测试环境Standalone模式部署实践
  • Java17中LinkedList类介绍、应用场景和示例代码
  • 《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》
  • Yashan DB 文件管理
  • Linux 进程控制:创建、终止、等待与程序替换全解析
  • 网页打印很简单!用web打印插件lodop轻松实现文件打印
  • mac 本地 docker 安装 kafka
  • [多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现
  • Windows11日志文件位置Linux下的目录简介
  • 深度解读:OpenAI发布GPT-5的技术突破与商业影响
  • AI科技公司招聘一位后端开发工程师
  • Git的命令学习——适用小白版
  • 菜鸟之路Day23一一JavaScript 入门
  • go的”ambiguous import in multiple modules”
  • Ubuntu开荒
  • 专题三二分算法
  • 工作记录 2017-01-04
  • 人工智能直通车系列15【机器学习基础】(决策树算法原理(ID3、C4.5、CART)决策树模型实现)
  • CENTOS7虚拟机硬盘不停机扩容
  • 【NLP 29、项目 Ⅰ:电商评论分类(好评 / 差评) 】
  • 基于MCAL的S32K3 GPIO外部中断使用