和 T
Q2440 led测试GPB5 实现一样的功能
不同点: 这里使用 混杂设备 实现的功能 貌似 更加简单
驱动
- #include<linux/miscdevice.h>
-
#include<linux/delay.h>
-
#include<asm/irq.h>
-
#include<mach/regs-gpio.h>
-
#include<mach/hardware.h>
-
#include<linux/kernel.h>
-
#include<linux/module.h>
-
#include<linux/init.h>
-
#include<linux/mm.h>
-
#include<linux/fs.h>
-
#include<linux/types.h>
-
#include<linux/moduleparam.h>
-
#include<linux/slab.h>
-
#include<linux/errno.h>
-
#include<linux/ioctl.h>
-
#include<linux/cdev.h>
-
#include<linux/string.h>
-
#include<linux/list.h>
-
#include<linux/pci.h>
-
#include<asm/uaccess.h>
-
#include<asm/atomic.h>
-
#include<asm/unistd.h>
-
-
#define DEVICE_NAME "led-misdev"
-
-
#define IOCTL_GPIO_ON 1
-
#define IOCTL_GPIO_OFF 0
-
-
static int led_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)
-
{
-
switch(cmd)
-
{
-
case IOCTL_GPIO_ON:
-
s3c2410_gpio_setpin(S3C2410_GPB5,0);
-
return 0;
-
case IOCTL_GPIO_OFF:
-
s3c2410_gpio_setpin(S3C2410_GPB5,1);
-
return 1;
-
default:
-
return -EINVAL;
-
}
-
}
-
-
-
static struct file_operations dev_fops={
-
.owner = THIS_MODULE,
-
.ioctl = led_ioctl,
-
};
-
-
static struct miscdevice led_misc={
-
.minor =MISC_DYNAMIC_MINOR,
-
.name =DEVICE_NAME,
-
.fops =&dev_fops,
-
};
-
-
void gpio_init(void)
-
{
-
s3c2410_gpio_cfgpin(S3C2410_GPB5,S3C2410_GPB5_OUTP);
-
s3c2410_gpio_setpin(S3C2410_GPB5,0);
-
}
-
static int __init led_init(void)
-
{
-
int ret;
-
gpio_init();
-
ret=misc_register(&led_misc);
-
printk(DEVICE_NAME "initialized");
-
return ret;
-
}
-
-
-
static void __init led_exit(void)
-
{
-
misc_deregister(&led_misc);
-
printk(KERN_INFO "bye the curl world!\n");
-
}
-
-
module_init(led_init);
-
module_exit(led_exit);
-
MODULE_LICENSE("GPL");
应用程序
- #include<stdio.h>
-
#include<unistd.h>
-
#include<stdlib.h>
-
#include<sys/ioctl.h>
-
#include<sys/types.h>
-
#include<sys/stat.h>
-
#include<fcntl.h>
-
#include<sys/select.h>
-
#include<sys/time.h>
-
-
int main(void)
-
{
-
int fp;
-
fp=open("/dev/led-misdev",0);
-
if(fp<0)
-
{
-
perror("open bad \n");
-
return 0;
-
}
-
-
while(1)
-
{
-
ioctl(fp,0);
-
printf("led off\n");
-
sleep(1);
-
ioctl(fp,1);
-
printf("led on\n");
-
sleep(1);
-
}
-
return 0;
-
}
阅读(1775) | 评论(0) | 转发(0) |