IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 一般字符驱动框架 -> 正文阅读

[系统运维]一般字符驱动框架

driver c文件:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/err.h>

#define MMAP_DEV_NAME "mmapdev"

static dev_t mmap_dev_no = 0;
static struct cdev mmap_dev_cdev;
static struct class *mmap_dev_cls;
static struct device *mmap_device;

static struct file_operations mmapdrv_fops = 
{
	.owner = THIS_MODULE,
};

static int __init mmapdrv_init(void)
{
	int ret = -1;

	printk("mmapdrv init...\n");

	ret = alloc_chrdev_region(&mmap_dev_no,0,1,MMAP_DEV_NAME);//动态注册设备号
	if(ret < 0)
	{
		printk("alloc mmap dev no fail!\n");
		return ret;
	}

	cdev_init(&mmap_dev_cdev,&mmapdrv_fops);
	mmap_dev_cdev.owner = THIS_MODULE;

	ret = cdev_add(&mmap_dev_cdev,mmap_dev_no,1);
	if(ret != 0)
	{
		printk("cdev add faild!\n");
		goto cdev_add_err;
	}
#if 1
	mmap_dev_cls = class_create(THIS_MODULE, MMAP_DEV_NAME);//自动创建设备节点
	if(IS_ERR(mmap_dev_cls))//判断指针是否有错
	{
		printk("class create failed!\n");
		goto cdev_class_err;
	}

	mmap_device = device_create(mmap_dev_cls,NULL,mmap_dev_no,NULL,MMAP_DEV_NAME);
	if(IS_ERR(mmap_device))//判断指针是否有错
	{
		printk("device create failed!\n");
		goto device_create_err;
	}
#endif
	return 0;

device_create_err:
	class_destroy(mmap_dev_cls);
cdev_class_err:
	cdev_del(&mmap_dev_cdev);
cdev_add_err:
	unregister_chrdev_region(mmap_dev_no,1);
	return ret;
}

static void __exit mmapdrv_exit(void)
{
	printk("mmapdrv exit...\n");
	device_destroy(mmap_dev_cls,mmap_dev_no);
	class_destroy(mmap_dev_cls);	
	cdev_del(&mmap_dev_cdev);
	unregister_chrdev_region(mmap_dev_no,1);
}



module_init(mmapdrv_init);
module_exit(mmapdrv_exit);

MODULE_LICENSE("GPL");

Makefile 文件:

obj-m:=mmap_driver.o
PWD:=$(shell pwd)
KERNELDIR:=/lib/modules/$(shell uname -r)/build

all:
	make -C $(KERNELDIR) M=$(PWD) modules
clean:
	@rm -rf *.o *.mod.c *.mod.o *.ko *.order *.symvers .*cmd .tmp_versions *.mod


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 14:09:05  更:2022-02-06 14:09:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:22:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码