《基于s3c2410led驱动》由会员分享,可在线阅读,更多相关《基于s3c2410led驱动(6页珍藏版)》请在金锄头文库上搜索。
1、. .基于s3c2410的led驱动源码 环境:redflag6.0开发板:gec2410功能说明:实现对GPF4到GPF7的控制 /*名称:mygpio.c版本:v0.1-2013-04-21说明:基于gec2410开发板、linux2.6.31内核编写的gpio驱动,实现对GPF4到GPF7的控制 例程说明了linux内核字符驱动程序的根本写法。时间:2013年4月21日修订日期:*/#include#include#include#include#include#include#include#include#includemydef.hMODULE_LICENSE(GPL);#defi
2、ne my_S3C2410_GPF5_OUTP (0x110)#define my_S3C2410_GPF4_OUTP (0X18)#define my_S3C2410_GPF6_OUTP (0X112)#define my_S3C2410_GPF7_OUTP (0X114)#define GPF4 4 /约定的控制命令#define GPF5 5#define GPF6 6#define GPF7 7#define dev_cont 1/设备数量struct cdev *mygpio_cdev;static dev_t dev_id; /定义设备号,全局变量static int module
3、_use_count=0;/模块使用次数static int mygpio_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)unsigned int swt=(unsigned int)arg;switch (cmd)case GPF4:s3c2410_gpio_setpin(S3C2410_GPF(4),swt);break;case GPF5:s3c2410_gpio_setpin(S3C2410_GPF(5),swt);break;case GPF6:s3c2410_gpio_s
4、etpin(S3C2410_GPF(6),swt);break;case GPF7:s3c2410_gpio_setpin(S3C2410_GPF(7),swt);break;default:printk(command erron);break;return 0;int set_mygpio_device()s3c2410_gpio_pullup(S3C2410_GPF(5),1);s3c2410_gpio_cfgpin(S3C2410_GPF(5),my_S3C2410_GPF5_OUTP);s3c2410_gpio_pullup(S3C2410_GPF(4),1);s3c2410_gpi
5、o_cfgpin(S3C2410_GPF(4),my_S3C2410_GPF4_OUTP);s3c2410_gpio_pullup(S3C2410_GPF(6),1);s3c2410_gpio_cfgpin(S3C2410_GPF(6),my_S3C2410_GPF6_OUTP);s3c2410_gpio_pullup(S3C2410_GPF(7),1);s3c2410_gpio_cfgpin(S3C2410_GPF(7),my_S3C2410_GPF7_OUTP);return 0;static int mygpio_open(struct inode *inode,struct file
6、*filp)if(!try_module_get(THIS_MODULE)return -ENODEV;set_mygpio_device();return 0;static int mygpio_release(struct inode *inode,struct file *filp)module_put(THIS_MODULE);return 0;struct file_operations mygpio_fops=.owner =THIS_MODULE,.ioctl=mygpio_ioctl,.open=mygpio_open,.release=mygpio_release,;stat
7、ic int _init mygpio_init(void)int ret;int dev_major=255; /默认主设备号int dev_minor=0; /默认此设备号int erro;if(static_registe) dev_id=MKDEV(dev_major,dev_minor);ret=register_chrdev_region(dev_id,dev_cont,mygpio);elseret=alloc_chrdev_region(&dev_id,dev_minor,dev_cont,mygpio);dev_major=MAJOR(dev_id);dev_minor=MI
8、NOR(dev_id);if(retops=&mygpio_fops;cdev_init(mygpio_cdev,mygpio_cdev-ops);mygpio_cdev-owner=THIS_MODULE;erro=cdev_add(mygpio_cdev,dev_id,1);if(erro)printk( add erro %dn,erro);return erro;return 0;static void _exit mygpio_exit (void)cdev_del(mygpio_cdev);unregister_chrdev_region(dev_id,dev_cont);prin
9、tk(mygpio unsitall);module_init(mygpio_init);module_exit(mygpio_exit);/*名称: mydef.h功能: 定义mygpio驱动的相关配置项时间: 2013-04-21修订日期:*/#ifndef _MYDEF_H#define _MYDEF_H#define static_registe 0 /默认定义为动态注册方式#endif / end _MYDEF_HMakfile文件内容:ifneq ($(KERNELRELEASE),)obj-m:=mygpio.oelseall:make -C $(KDIR) M=$(PWD) modulesclean:rm -f *.ko *.o *mod.c *.symvers *.orderendif. v . ./*名称:test.c说明:测试对应的驱动程序mygpio时间:2013年04月21日*/#include#include#include#includeint main()int fd;int num;fd=open(/dev/mygpio,O_RDWR);if(fd=-1)printf(open faile);write(fd,&num,4);printf(okn);return 0;. v .