⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skull.c

📁 一个Linux系统字符驱动的源代码
💻 C
字号:
#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/kernel.h>#include <asm/uaccess.h>unsigned int fs_major=0;static char *data;static ssize_t test_read(struct file*,char*,size_t,loff_t*);static ssize_t test_write(struct file*,char*,size_t,loff_t*);static int test_open(struct inode*,struct file*);static int test_release(struct inode*,struct file*);static struct file_operations chr_fops={	read: test_read,	write: test_write,	open: test_open,	release: test_release,};static ssize_t test_read(struct file *file,char *buf,size_t count,loff_t *f_pos){	int len;	if(count<0)		return -EINVAL;	len=strlen(data);	if(len<count)		count=len;	copy_to_user(buf,data,count+1);	return count;}static ssize_t test_write(struct file *file,char *buf,size_t count,loff_t *f_pos){	if(count<0)		return -EINVAL;	kfree(data);	data=(char *)kmalloc(sizeof(char)*(count+1),GFP_KERNEL);		if(!data)		return -ENOMEM;	copy_from_user(data,buf,count+1);	return count;}static ssize_t test_open(struct inode *inode,struct file *file){//	MOD_INC_USE_COUNT;	printk("This is open\n");	return 0;}static ssize_t test_release(struct inode *inode,struct file *file){//	MOD_INC_USE_COUNT;	printk("This is released\n");	return 0;}int skull_init(void){	int res;	res=register_chrdev(0,"szx",&chr_fops);	if(res<0)	{		printk("can't get major name!\n");		return res;	}		if(fs_major==0)		fs_major=res;             printk("module init!\n"); 	return 0;}void skull_exit(void){	unregister_chrdev(fs_major,"szx");        printk("module clean up!\n");}module_init(skull_init); module_exit(skull_exit);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -