id="code_img_closed_e8b0dbbf-6f60-43e1-8292-d206b09f646b" class="code_img_closed"
class="code_img_opened" Onclick="cnblogs_code_hide(‘e8b0dbbf-6f60-43e1-8292-d206b09f646b‘,event)"
#include
#include
#include
#include /* COPY_TO_USER */
#include
#define DEV_NAME "rwtest"
static int major=0;
static int MAX_BUF_LEN=1024;
static char drv_buf[1024];
static int WRI_LENGTH=0;
/************************************写入*************************************************/
static ssize_t dx_write(struct file *file, const char __user *buffer, size_t count, loff_t * ppos)
{
if(count > MAX_BUF_LEN)count = MAX_BUF_LEN;
copy_from_user(drv_buf , buffer, count);
WRI_LENGTH = count;
printk("write data to driver\n");
return count;
}
/**************************************读取***********************************************/
static ssize_t dx_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)
{
int i=0,j=0;
if(count > MAX_BUF_LEN)
count=MAX_BUF_LEN;
for(i=strlen(drv_buf);i>0;i--)
{
buffer[j]=drv_buf[i-1];
j++;
}
//copy_to_user(buffer,drv_buf,count);
printk("read data from driver\n");
return count;
}
//===========================打开=========================================
static int dx_open(struct inode *inode, struct file *filp)
{
printk("device open sucess!\n");
return 0;
}
/**********************************release***************************************************/
static int dx_release(struct inode *inode, struct file *filp)
{
printk("device release\n");
return 0;
}
//======================结构体,驱动各属性==================================================
static struct file_operations file_opt = {
owner: THIS_MODULE,
write: dx_write,
read: dx_read,
open: dx_open,
release:dx_release,
};
//----------------------------------------------------------------------
static int __init qudong_init(void)
{
int ret;
ret = register_chrdev(0, DEV_NAME, &file_opt);
if(ret<0)
{
printk(DEV_NAME " can‘t get major number\n");
return 0;
}
major=ret;
printk("dx module major number is %d\n", ret);
return 0;
}
//-----------------------------------------------------------------------
static void __exit qudong_exit(void)
{
unregister_chrdev(major,DEV_NAME);
printk("exit\n");
}
module_init(qudong_init);
module_exit(qudong_exit);
MODULE_LICENSE("GPL");