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

📄 2410gpio_test_drv.c

📁 在linux2.6内核测试没有问题!我用得是s3c2410!功能简单!但是入门很有用
💻 C
字号:

//#define MODULE

//#define __KERNEL__
#ifdef MODULE
#include <linux/module.h>
#include <linux/version.h>
#else
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
//#define __KERNEL__

#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 <asm/uaccess.h>
#include <asm/io.h>
//#include <asm/arch/S3C2410.h>
#include <asm/arch-s3c2410/regs-gpio.h>

#include <linux/fcntl.h>
#define GPF4_ON 0x4800//0100 1000 0000 0000
#define GPF4_OFF 0x4801//0100 1000 0000 0001
#define GPFDAT *(volatile unsigned int *)S3C2410_GPFDAT
#define GPFCON *(volatile unsigned int *)S3C2410_GPFCON
//static int GPIO_TEST_ioctl(struct inode *s_node,struct file *s_file,unsigned int cmd,unsigned int arg);
static int major=252;//主设备号
char GPIO_TEST_name[]="GPIO_TEST";//设备名


static int GPIO_TEST_ioctl(struct inode *s_node,struct file *s_file,unsigned int cmd,unsigned long arg)
{
	int retv;
	unsigned int data;
	switch(cmd)
	{
		case GPF4_ON:
		GPFDAT=GPFDAT&(~(1<<4));
		//	s3c2410_gpio_setpin(S3C2410_GPF4,0);
		break;

		case GPF4_OFF:
		GPFDAT=GPFDAT|(1<<4);
		//	s3c2410_gpio_setpin(S3C2410_GPF4,1);
		break;

		default:
		break;
	}
	return 0;
}


static struct file_operations GPIO_TEST_fops =
{
	ioctl : GPIO_TEST_ioctl
};



static int __init GPIO_TESTdrv_init_module(void)
{
	int retv;
	retv=register_chrdev(major,GPIO_TEST_name,&GPIO_TEST_fops);
	if(retv<0)
	{
		printk("<1>register fail!\n");
		return retv;
	}
	if(major==0)
	major=retv;
	printk("major=%d\n",major);
	printk("<1>hello GPIO_TESTdrv!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
	GPFDAT=(GPFDAT&(~(3<<8)))+(1<<8);
	GPFDAT=GPFDAT|(1<<4);

	//s3c2410_gpio_pullup(S3C2410_GPF4,1);	
	//s3c2410_gpio_cfgpin(S3C2410_GPF4, S3C2410_GPF4_OUTP);
	//s3c2410_gpio_setpin(S3C2410_GPF4,1);

	return 0;
}

static void __exit GPIO_TESTdrv_cleanup(void)
{
	int retv;
	retv=unregister_chrdev(major,GPIO_TEST_name);
	if(retv<0)
	{
		printk("<1>unreginster fail!\n");
		return;
	}
	printk("<1>GPIO_TESTdrv:good_bye!\n");
}


module_init(GPIO_TESTdrv_init_module);
module_exit(GPIO_TESTdrv_cleanup);
//lhtMODULE_LICENSE("GPL");

⌨️ 快捷键说明

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