博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux字符设备驱动程序框架(老方法)
阅读量:5858 次
发布时间:2019-06-19

本文共 2236 字,大约阅读时间需要 7 分钟。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define xxx_DEVICE_COUNT 1 /*自己主动创建设备节点类*/static struct class *xxx_dev_class;static struct class_device *xxx_dev_class_dev;/* xxx设备相关的相关操作函数:open、read、write、close、ioctl等*/static int xxx_dev_open(struct inode *inode, struct file *filp){ printk("Open xxx device OK.\n"); return 0;}static int xxx_dev_close(struct inode *inode, struct file *filp){ printk("Close xxx device OK.\n"); return 0;}static int xxx_dev_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos){ printk("Write xxx device OK.\n"); return 0;}static int xxx_dev_read(struct file *file, const char __user *buf, size_t count, loff_t ppos){ printk("Read xxx device OK.\n"); return 0;}static int xxx_dev_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg){ printk("DRIVER : Get cmd %d.\n", cmd); return 0;}/* xxx设备操作函数结构体*/struct file_operations xxx_fops = { .owner = THIS_MODULE, .open = xxx_dev_open, .release = xxx_dev_close, .read = xxx_dev_read, .write = xxx_dev_write, .ioctl = xxx_dev_ioctl,};/* xxx设备驱动模块的注冊和卸载*/int xxx_major = 0;static int __init initialization_xxx_dev(void){ /* 注冊设备号 */ printk("Before register xxx Major = %d\n", xxx_major); if (xxx_major) { register_chrdev(xxx_major, "xxx", &xxx_fops); } else { xxx_major = register_chrdev(0, "xxx", &xxx_fops); } printk("After register xxx Major = %d\n", xxx_major); /* 自己主动生成设备节点 */ xxx_dev_class = class_create(THIS_MODULE, "xxx_dev"); xxx_dev_class_dev = class_device_create(xxx_dev_class, NULL, MKDEV(xxx_major, 0), NULL, "xxx"); /* 模块初始化成功必须返回0 */ printk("Module register OK.\n"); return 0;}static void __exit cleanup_xxx_dev(void){ /* 删除设备文件 */ unregister_chrdev(xxx_major, "xxx"); class_device_unregister(xxx_dev_class_dev); class_destroy(xxx_dev_class); printk("Module unregister OK.\n");}/* 模块注冊与卸载*/module_init(initialization_xxx_dev);module_exit(cleanup_xxx_dev);/* 模块传參:insmod char_driver_frame_old.ko xxx_major=xxx*/module_param(xxx_major, int, S_IRUGO);/* 模块的相关声明*/MODULE_AUTHOR("lhbo");MODULE_DESCRIPTION("GPIO Driver for xxx");MODULE_LICENSE("GPL");

转载地址:http://iwljx.baihongyu.com/

你可能感兴趣的文章
Centos 6.5 搭建NFS服务器笔记
查看>>
运维职业生涯
查看>>
JSONObject 全知道
查看>>
励志诗词
查看>>
FSB与QPI的区别
查看>>
(20120802)JDBC数据库连接查询,封装类
查看>>
【APP】Linux网络基础总结(常用配置文件&常用命令)
查看>>
VMware 安装 提示 the msi failed 解决办法
查看>>
11st, Jan 2012 回家,效率以及其他
查看>>
canvas绘制五角形
查看>>
linux下权限的设置。
查看>>
Scrapy at a glance预览
查看>>
centos如何安装metasploit
查看>>
我的友情链接
查看>>
翻译中常见的单词5
查看>>
8.SpringMVC注解式开发-HelloWorld
查看>>
关于DataTable的GetChanges()方法
查看>>
使用优盘模拟软驱为服务器阵列卡安装驱动
查看>>
编程中,static的用法详解
查看>>
Mb(全称为Mbps)与MB(Mbytes)的区别
查看>>