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

📄 leddrv.c

📁 gpio驱动 leddrv.c为驱动源程序 writeled.c为应用程序 writeled.c 编译方式 arm-elf-gcc -Wall -O2 -Wl,-elf2flt -o wri
💻 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 + -