📄 leddrv.c
字号:
#ifdef MODULE#include <linux/module.h>#include <linux/version.h>#else#define MOD_INC_USE_COUNT#define MOD_DEC_USE_COUNT#endif#define MODULE#define __KERNEL__//#include <linux/config.h>//#include <linux/types.h>//#include <linux/tty.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/sched.h>#include <linux/fs.h>//#include <linux/mm.h>//#include <linux/poll.h>//#include <linux/slab.h>#include <linux/ioport.h>//#include <linux/fcntl.h>#include <asm/uaccess.h>#include <asm/io.h>#include <linux/fcntl.h>#define IOPDATA (*(volatile unsigned *)0x03FF5008)#define IOMOD (*(volatile unsigned *)0x03FF5000)#define GET_DATA 0x4800static int led_write(struct file *,char *,int,loff_t *);static int led_ioctl(struct inode *s_node,struct file *s_file,unsigned int cmd,unsigned int arg);static int major=0;static struct file_operations led_fops={ write:(void(*))led_write, ioctl:(void(*))led_ioctl,};char led_name[]="leddrv";static int __init leddrv_init_module(void){ int retv; retv=register_chrdev(major,led_name,&led_fops); if(retv<0) { printk("<1>register fail!\n"); return retv; } printk("<1>reginster ok!\n"); if(major==0) major=retv; return 0;}static void __exit leddrv_cleanup(void){ int retv; retv=unregister_chrdev(major,led_name); if(retv<0) { printk("<1>unreginster fail!\n"); return; } printk("<1>leddrv:good_bye!\n");}static int led_write(struct file *led_file,char *buf,int len,loff_t *loff){ unsigned long iopdata; IOMOD=0xf0; if(copy_from_user((char *)&iopdata,buf,len)) return -EFAULT; IOPDATA=iopdata; return len;}static int led_ioctl(struct inode *s_node,struct file *s_file,unsigned int cmd,unsigned int arg){ int retv; switch(cmd) { case GET_DATA: retv=copy_to_user((void *)arg,(char *)&IOMOD,sizeof(int)); if(retv<0) return -1; printk("<1>get timer0 flag ok\n"); break; default: break; } return 0;}module_init(leddrv_init_module);module_exit(leddrv_cleanup);MODULE_LICENSE("GPL");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -