资源简介
很好的东西和大家分享,是基于linux2.6内核的。很好用的!

代码片段和文件信息
//模块定义
#include
#include
#include
#include
#include
#include
#include
MODULE_LICENSE(“GPL“);
static int chdr_major = 150;//主设备号
static int chdr_minor = 0;//次设备号
static int chdr_nr_devs = 1;
static int open_nr=0;//打开设备的进程数
static struct cdev *chdr_cdev;//设备定义声明
static char buffer[100];//缓冲区
//函数声明
static int chdr_open(struct inode *inode struct file *filp);
static int chdr_release(struct inode *inode struct file* filp);
static ssize_t chdr_read(struct file *file char __user *buf size_t count loff_t *f_pos);
static ssize_t chdr_write(struct file *file const char __user *buf size_t count loff_t *f_pos);
//设备模块接口
static struct file_operations chdr_fops = {
.owner = THIS_MODULE
.read = chdr_read
.write = chdr_write
.open = chdr_open
.release = chdr_release
};
//打开函数
static int chdr_open(struct inode *inode struct file *filp)
{
if (open_nr == 0) {
open_nr++;
} else {
printk(KERN_ALERT “Another process open the char device.\n“);//进程挂起
return -1;
}
return 0;
}
//阅读函数
static ssize_t chdr_read(struct file *file char __user *buf size_t count loff_t *f_pos)
{
if (buf == NULL)
return 0;
if (count > 100)
count = 100;
copy_to_user(buf buffer count);//读缓冲
return count;
}
//写入函数
static ssize_t chdr_write(struct file *file const char __user *buf size_t count loff_t *f_pos)
{
if (buf == NULL)
return 0;
if (count > 100)
count = 100;
copy_from_user(buffer buf count);//写缓冲
return count;
}
//释放设备函数
static int chdr_release(struct inode *inode struct file* filp)
{
open_nr--;//进程数减1
return 0;
}
//注册设备函数
static int __init chdr_init(void)
{
int result err;
dev_t dev = 0;
printk(KERN_ALERT “Begin to init Char Device!\n%d“open_nr);
//注册设备
if (chdr_major) {
dev = MKDEV(chdr_major chdr_minor);
result = register_chrdev_region(dev chdr_nr_devs “chdr“);
} else {
result = alloc_chrdev_region(&dev chdr_minor chdr_nr_devs “chdr“);
chdr_major = MAJOR(dev);
}
if (result < 0) {
printk(KERN_WARNING “chdr: cannot get major %d\n“ chdr_major);
return result;
}
chdr_cdev = cdev_alloc();
if (chdr_cdev == NULL) {
printk(KERN_WARNING “chdr: alloc cdev failed.\n“);
return -1;
}
//初始化设备
chdr_cdev->owner = THIS_MODULE;
chdr_cdev->ops = &chdr_fops;
cdev_init(chdr_cdev &chdr_fops);
err = cdev_add(chdr_cdev dev 1);
if (err) {
printk(KERN_NOTICE “Error %d adding chdr.\n“ err);
}
open_nr = 0;
printk(“%d“open_nr);
return 0;
}
//注销设备函数
static void __exit chdr_exit(void)
{
dev_t dev;
printk(KERN_ALERT “Unloading...\n“);
dev = MKDEV(chdr_major chdr_minor);
unregister_chrdev_region(dev chdr_nr_devs);//注销设备
cdev_del(chdr_cd
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 206 2009-06-03 13:21 驱动设计\Makefile
文件 3294 2009-06-03 13:31 驱动设计\mydrive.c
文件 875 2009-06-03 13:32 驱动设计\test.c
文件 24251 2009-06-15 23:34 驱动设计\设备驱动实习报告.docx
目录 0 2009-06-15 23:35 驱动设计
----------- --------- ---------- ----- ----
28626 5
相关资源
- bp神经网络源代码,可直接运行
- 随机森林R语言代码
- 计算机图形学 边填充算法实现代码
- 直流无刷电机方波驱动 stm32 例程代码
- 仿知乎界面小程序源代码
- 贪吃蛇源代码.fla
- 周立功开发板ProASIC3实验-syn_FIFO代码
- uboot到linux logo显示不间断 补丁
- IMX385驱动代码.zip
- UNIX/LINUX编程实践教程的源码
- dotnet 写字板 实验 源代码 不好请要不
- 图像二维小波变换的实现源代码
- 八三编码器设计 VHDL代码 简单,包附
- Linux任务管理器
- linux应用层的华容道游戏源代码
- 交通咨询模拟系统完整代码
- http请求状态代码
- 数值分析所有实验代码
- 网上拍卖系统完整源代码
- 音乐代码转换软件 单片机编程时用
- CSMA/CD等动画演示加源代码
- silicon lab公司的收音IC SI47XX全套开发工
- 用51单片机实现G代码翻译
- 合同管理系统的源代码(附数据库)
- 用VC 编写的仿QQ聊天室程序源代码
- web班级网站设计代码
- 38k单片机红外发送代码、keil
- STM32F103 串口程序(完整版)
- 网络唤醒代码
- VPC3_DPV1源代码,Profibus
评论
共有 条评论