#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include <linux/fs.h>
#include<linux/uaccess.h>
#define CHRDEVBASE_MAJOR 200
#define CHRDEVBASE_NAME "chrdevbase"
static char readbuf[100];
static char writebuf[100];
static char kerneldata[] = {"kernel data!"};
static int chrdevbase_open(struct inode *inode, struct file *filp)
{
printk("chrdevbase_open\r\n");
return 0;
}
static int chrdevbase_release(struct inode *inode, struct file *filp)
{
return 0;
}
static ssize_t chrdevbase_read(struct file *filp, __user char *buf, size_t count,
loff_t *ppos)
{
int ret = 0;
memcpy(readbuf, kerneldata, sizeof(kerneldata));
ret = copy_to_user(buf, readbuf, count);
if(ret == 0)
{
;
}
else
{
;
}
return 0;
}
static ssize_t chrdevbase_write(struct file *filp, const char __user *buf,
size_t count, loff_t *ppos)
{
int ret = 0;
ret = copy_from_user(writebuf, buf, count);
if(ret == 0)
{
printk("Kernel receive data : %s\r\n", writebuf);
}
else
{
;
}
return 0;
}
static struct file_operations chrdevbase_fops=
{
.owner = THIS_MODULE,
.open = chrdevbase_open,
.release = chrdevbase_release,
.read = chrdevbase_read,
.write = chrdevbase_write,
};
static int __init chrdevbase_init(void)
{
int ret = 0;
printk("chrdevbase_init\r\n");
ret = register_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME, \
&chrdevbase_fops);
if(ret < 0)
{
printk("chrdevbase init failed\r\n");
}
return 0;
}
static void __exit chrdevbase_exit(void)
{
unregister_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME);
printk("chrdevbase_exit\r\n");
}
module_init(chrdevbase_init);
module_exit(chrdevbase_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("JL<MAIL ADDRESS>");
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char **argv)
{
int ret = 0;
int fd = 0;
char *filename;
char readbuf[100], writebuf[100];
static char usrdata[] = {"user data!"};
if(argc != 3)
{
printf("Error usage!\r\n");
return -1;
}
filename = argv[1];
fd = open(filename, O_RDWR);
if(fd < 0)
{
printf("Can't open file \"%s\"\r\n", filename);
return -1;
}
if(atoi(argv[2]) == 1)
{
ret = read(fd, readbuf, 50);
if(ret < 0)
{
printf("Read file \"%s\" error!\r\n", filename);
return -1;
}
else
{
printf("App read data: %s\r\n", readbuf);
}
}
if(atoi(argv[2]) == 2)
{
memcpy(writebuf, usrdata, sizeof(usrdata));
ret = write(fd, writebuf, 50);
if(ret < 0)
{
printf("Write file \"%s\" error!\r\n", filename);
return -1;
}
else
{
;
}
}
ret = close(fd);
if(ret < 0)
{
printf("Close file \"%s\" error!\r\n", filename);
return -1;
}
else
{
;
}
return 0;
}