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

📄 gpiodrv.c.bak

📁 在嵌入式Linux中编写驱动程序的很好范例
💻 BAK
字号:
/*下面是一个简单的gpio跑马灯驱动,基于FS2410处理器:*/
#ifndef __KERNEL__ 
#define __KERNEL__ 
#endif 
#ifndef MODULE 
#define MODULE 
#endif 

#include <linux/fs.h>   
#include <linux/iobuf.h> 
#include <linux/major.h> 
#include <asm/uaccess.h> 
#include <asm/hardware.h> 
#include <asm/arch/cpu_s3c2410.h> 
#include <asm/io.h> 
#include <linux/vmalloc.h> 
#include <linux/config.h> 
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>  
#include <linux/delay.h>

MODULE_LICENSE("GPL");
#define IOPORT_MAJOR 220  

int gpio_ctl_open(struct inode*, struct file*);              
int gpio_ctl_ioctl(struct inode*, struct file*, unsigned int,unsigned long);
//int gpio_ctl_release(struct inode*, struct file*);
static struct file_operations gpio_ctl_fops={
        ioctl:        gpio_ctl_ioctl,
        open:         gpio_ctl_open,
//      release:    gpio_ctl_release,
};  

int gpio_ctl_open(struct inode *inode,struct file *fllp)
{
        GPFCON=0x5500;//0101 0101 0000 0000
        GPFUP=0xFF;
        printk("open gpio devices\n");
        return 0;
}

int gpio_ctl_release(struct inode *inode, struct file *filp)
{
        printk("release this device\n");
        return 0;
}

int gpio_ctl_ioctl(struct inode *inode,struct file *flip,unsigned int command,unsigned long arg)
{
	unsigned int led,p;
	p=0xEF;
	if(command==1)
		{
       while(arg--)
            {
               led=p;
               GPFDAT=led;
               led=(led<<1);
               p=led;
               mdelay(400); 
               if(!(p&0x9))
               	p=0xEF;
     				}
       return 0;
		}
    else
        printk( "Fail!\n" );
    return(0);
}
//////////////////////////////////////////////////////////////////////
static int __init gpio_init(void) 
{
        int ret=0;
        printk("gpio_init\n");
        ret = register_chrdev(IOPORT_MAJOR, "gpio", &gpio_ctl_fops);
        if(ret < 0)
        {
                printk("fail to register\n");
                return -1;
        }
        printk("success to register\n");
        return 0;
}
//////////////////////////////////////////////////////////////////////
void __exit gpio_release(void)
{
    printk("quit gpio\n");
    unregister_chrdev(IOPORT_MAJOR, "gpio"); 
}

module_init(gpio_init);           
module_exit(gpio_release);

⌨️ 快捷键说明

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