linux arm设备驱动程序编写led简单应用
一、ioctl通信
//此命令用于应用和驱动之间的ioctl通信
// 参数1–表示一个魔幻数–用一个字符表示
//参数2–区分不同命令的整数
//参数3–传递的数据的类型
// 自动生成一个普通的命令号
_IO(type,nr)
// 自动生成一个带可读参数的命令号
_IOR(type,nr,size)
// 自动生成一个带可写参数的命令号
_IOW(type,nr,size)
// 自动生成一个带可读写参数的命令号
_IOWR(type,nr,size)
// 例:
#define LEDON _IO('L',2)
#define LEDOFF _IO('L',1)
#define LED_ON _IOW('L', 0x90, int)
#define LED_OFF _IOW('L', 0x91, int)
#define LED_ON_ALL _IO('L', 0x92)
#define LED_OFF_ALL _IO('L', 0x93)
二、应用代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#define LEDON _IO('L',2)
#define LEDOFF _IO('L',1)
int main(int argc, char **argv)
{
int fd = open("/dev/test", O_RDWR );
if(-1 == fd )
{
perror("open led");
return -1 ;
}
while(1)
{
ioctl(fd,LEDON,0);
sleep(1);
ioctl(fd,LEDOFF,0);
sleep(1);
ioctl(fd,LEDON,1);
sleep(1);
ioctl(fd,LEDOFF,1);
sleep(1);
}
close(fd);
}