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

📄 led.c

📁 嵌入式linux 2.6内核led驱动,也许对初学者有帮助
💻 C
字号:
#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/ioctl.h>#include <asm/uaccess.h>#include <asm/hardware.h>#include <asm/arch/regs-gpio.h>MODULE_LICENSE("GPL");#define HELLO_MAGIC 'k'#define LED_GPF4 _IO(HELLO_MAGIC,1)#define LED_GPF5 _IO(HELLO_MAGIC,2)#define LED_GPF6 _IO(HELLO_MAGIC,3)#define LED_GPF7 _IO(HELLO_MAGIC,4)#define LED_GPF8 _IO(HELLO_MAGIC,5)#define LED_GPF9 _IO(HELLO_MAGIC,6)#define LED_GPF10 _IO(HELLO_MAGIC,7)#define LED_GPF11 _IO(HELLO_MAGIC,8)#define GPFCON *(volatile unsigned int *)S3C2410_GPFCON#define GPFDAT *(volatile unsigned int *)S3C2410_GPFDATstatic int led_major=0;static int led_open(struct inode *inode ,struct file *file){		GPFCON &=(~(3<<14)+(1<<14)+~(3<<12)+(1<<12)+~(3<<10)+(1<<10)+~(3<<8)+(1<<8));	return 0;}static int led_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg){		int ret=0;	switch(cmd)		{		case LED_GPF4:			GPFDAT &=(~(1<<4));			break;		case LED_GPF5:			GPFDAT &=(~(1<<5));			break;		case LED_GPF6:			GPFDAT &=(~(1<<6));			break;		case LED_GPF7:			GPFDAT &=(~(1<<7));			break;		case LED_GPF8:			GPFDAT |=1<<4;			break;		case LED_GPF9:			GPFDAT |=1<<5;			break;		case LED_GPF10:			GPFDAT |=1<<6;			break;		case LED_GPF11:			GPFDAT |=1<<7;			break;		}	return 0;}static int led_release(struct inode *inode,struct file *file){	return 0;}static void led_setup_cdev(struct cdev *dev,int minor,struct file_operations *fops){	int err;	int devno=MKDEV(led_major,minor);	cdev_init(dev,fops);	dev->owner=THIS_MODULE;	dev->ops=fops;	err=cdev_add(dev,devno,1);	if(err)	printk(KERN_INFO"Error %d adding led %d\n",err,minor);}static struct file_operations led_remap_ops={	.owner=THIS_MODULE,	.open=led_open,	.release=led_release,	.ioctl=led_ioctl,};static struct cdev SimpleDevs;static int led_init(void){	int result;	dev_t dev=MKDEV(led_major,0);	if(led_major)	 result=register_chrdev_region(dev,1,"led");	else	 {		result=alloc_chrdev_region(&dev,0,1,"led");		led_major=MAJOR(dev);	 }	if(result<0)	 {	  printk(KERN_WARNING"led:unable to get major %d\n",led_major);			  return result;	 }	if(led_major==0)	led_major=result;	printk(KERN_INFO"led register ok!!!!!!!!!!\n");		led_setup_cdev(&SimpleDevs,0,&led_remap_ops);	return 0;}static void led_exit(void){	cdev_del(&SimpleDevs);	unregister_chrdev_region(MKDEV(led_major,0),2);	printk("led device uninstalled\n");}module_init(led_init);module_exit(led_exit);

⌨️ 快捷键说明

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