1,318
社区成员
发帖
与我相关
我的任务
分享
//#include<linux/config.h>
#include<linux/kernel.h>
//#include<linux/init.h>
#include<linux/fs.h>
//#include<linux/devfs_fs_kernel.h>
//#include<linux/module.h>
#define Demo_MAJOR 98
#define Demo_DEBUG
#define VERSION "Demo_Driver"
void showversin(void)
{
printk("******************\n");
printk("\t %s \t\n", VERSION);
printk("******************\n\n");
}
static int Demo_temp_count=0;
ssize_t Demo_read(struct file *file,char *buf,size_t count,loff_t *f_ops)
{
#ifdef Demo_DEBUG
printk("Demo_read[--kernel--]\n");
#endif
return count;
}
ssize_t Demo_write(struct file *file,const char *buf,size_t count,loff_t *f_ops)
{
#ifdef Demo_DEBUG
printk("Demo_write[--kernel--]\n");
#endif
return count;
}
int Demo_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long data)
{
#ifdef Demo_DEBUG
printk("Demo_ioctl[--kernel--]\n");
#endif
return 0;
}
int Demo_open(struct inode * inode,struct file * file)
{
#ifdef Demo_DEBUG
printk("Demo_open[--kernel--]\n");
#endif
MOD_INC_USE_COUNT;
return 0;
}
int Demo_release(struct inode *inode,struct file *file)
{
#ifdef Demo_DEBUG
printk("Demo_release[-kernel-]\n");
#endif
MOD_DEC_USE_COUNT;
return 0;
}
struct file_operations Test_ctl_ops={
open: Demo_open,
read: Demo_read,
write: Demo_write,
ioctl: Demo_ioctl,
release: Demo_release,
};
static int HW_Test_CTL_init(void)
{
int ret = -ENODEV;
ret =devfs_register_chrdev(Demo_MAJOR,"demo_drv",&Test_ctl_ops);
showversion();
if(ret<0)
{
printk("Demo_module failed with %d\n[--kernel--]",ret);
return ret;
}
else
{
printk("Demo_driver register success!!![--kernel--]\n");
}
printk("\n...\nret=%x\n...\n",ret);
return ret;
}
static int __init Demo_Test_CTL_init(void)
{
int ret = -ENODEV;
#ifdef Demo_DEBUG
printk("Demo_Test_CTL_init[--kernel--]\n");
#endif
ret = HW_Test_CTL_init();
if(ret)
return ret;
return 0;
}
static void __exit cleanup_Test_ctl(void)
{
#ifdef Demo_DEBUG
printk("cleanup_INT_CTL[--kernel--]\n");
#endif
devfs_unregister_chrdev(Demo_MAJOR,"demo_drv");
}
MODULE_DESCRIPTION("simple int drive module");
MODULE_LICENSE("GPL");
module_init(Demo_Test_CTL_init);
module_exit(cleanup_Test_ctl);