字符设备驱动框架代码的编写
程序员文章站
2022-03-22 20:22:17
...
命令:lsmod —— 查看当前内核中加载了那些模块
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#define BASEMINOR 0
#define COUNT 3
#define NAME "cdev_demo"
dev_t devno = 0;
struct cdev *cdevp = NULL;
int demo_open(struct inode *inode, struct file *filp)
{
printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__);
return 0;
}
int demo_release(struct inode *inode, struct file *filp)
{
printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__);
return 0;
}
struct file_operations fops = {
.owner = THIS_MODULE,
.open = demo_open,
.release = demo_release,
};
int __init demo_init(void)
{
int ret = 0;
//0.申请设备号-内核分配主设备号,次设备好从0开始,共三个(0,1,2)
ret = alloc_chrdev_region(&devno,BASEMINOR,COUNT, NAME);
if(ret < 0){
printk(KERN_ERR "alloc_chrdev_region failed...\n");
goto err0;
}
printk(KERN_INFO "---major:%d---\n",MAJOR(devno));
//1.分配cdev结构体
cdevp = cdev_alloc();
if(cdevp == NULL){
printk(KERN_ERR "cdev_alloc failed...\n");
ret = -ENOMEM;
goto err1;
}
//2.初始化cdev结构体
cdev_init(cdevp, &fops);
//3.将cdev结构体添加到内核中,由内核对驱动进行统一的管理
ret = cdev_add(cdevp, devno, COUNT);
if(ret < 0){
printk(KERN_ERR "cdev_add failed...\n");
goto err1;
}
printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__);
return 0;
err1:
unregister_chrdev_region(devno, COUNT);
err0:
return ret;
}
void __exit demo_exit(void)
{
cdev_del(cdevp);
unregister_chrdev_region(devno, COUNT);
printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__);
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
上一篇: Angular10如何配置webpack打包?方法介绍
下一篇: 可视化展示——查询论文
推荐阅读
-
[编写高质量iOS代码的52个有效方法](十一)系统框架
-
Linux 块设备驱动代码编写
-
使用Python的Twisted框架编写非阻塞程序的代码示例
-
用ReactJS和Python的Flask框架编写留言板的代码示例
-
linux 驱动编写之虚拟字符设备的编写实例详解
-
嵌入式Linux开发: 编写EEPROM驱动_采用杂项字符设备框架
-
韦东山uboot_内核_根文件系统学习笔记5.8-第005课_字符设备驱动_第008节_第008节_字符设备驱动程序之中断方式的按键驱动_编写代码
-
SylixOS字符设备驱动框架
-
11-S3C2440驱动学习(七)嵌入式linux-字符设备的另一种写法及RTC驱动程序分析和字符设备驱动框架总结
-
字符设备驱动开发 Linux 设备号 字符设备驱动开发步骤 open 函数调用流程 设备号的组成 设备号的分配 Linux 应用程序对驱动程序的调用 字符设备注册与注销 实现设备的具体操作函数