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

📄 leddrv.c

📁 nano2410linux的led驱动
💻 C
字号:
#include<linux/config.h>#include<linux/module.h>#include<linux/kernel.h>#include<linux/init.h>#include<linux/miscdevice.h>#include<linux/sched.h>#include<linux/delay.h>#include<linux/poll.h>#include<linux/spinlock.h>#include<linux/irq.h>#include<asm/mach-types.h>#include<asm/hardware.h>#define DEVICE_NAME "ledtest" /*定义led设备名字*/#define LED_MAJOR 230         /*定义led设备主设备号*///适用于2.4与2.6内核的模块许可证声明模板MODULE_LICENSE("GPL");/*LED设备对应的硬件资源*/static unsigned long led_table[]={  GPIO_G2,  GPIO_E13,  GPIO_E12,  GPIO_E11,  };/*设备文件操作函数的实现*/static int nano2410av2_leds_ioctl(struct inode * inode,struct file * filp,unsigned int cmd,unsigned long arg){  switch(cmd){   case 0:   case 1:    if(arg>4){      return -EINVAL;           }    write_gpio_bit(led_table[arg],!cmd);   default:    return -EINVAL;                }}static struct file_operations nano2410av2_leds_fops={    owner:THIS_MODULE,    ioctl:nano2410av2_leds_ioctl,};/*模块初始化*/static devfs_handle_t devfs_handle;static int __init nano2410av2_leds_init(void){  int ret;  int i;  /*在内核注册设备*/  ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&nano2410av2_leds_fops);  if(ret<0){   printk(DEVICE_NAME"can`t register major number\n");   return ret;     }  //devfs_handle=devfs_register()  	devfs_handle = devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,				LED_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, &nano2410av2_leds_fops, NULL);  for(i=0;i<8;i++){       set_gpio_ctrl(led_table[i] | GPIO_PULLUP_EN | GPIO_MODE_OUT);                        write_gpio_bit(led_table[i],1);     }  printk(DEVICE_NAME"initialized\n");  return 0;}static void __exit nano2410av2_leds_exit(void){  //devfs_unregister(devfs_handle);  devfs_unregister(devfs_handle);   unregister_chrdev(LED_MAJOR,DEVICE_NAME);   printk(DEVICE_NAME"removed\n");   //不用devfs注册时不会执行该句!}module_init(nano2410av2_leds_init);module_exit(nano2410av2_leds_exit);

⌨️ 快捷键说明

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