led驱动测试程序编写
1.准备工作
1.编译好chardevled.ko文件
2.挂载好led驱动,/dev目录下生成led节点。
2.测试程序编写
ledtest.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define LED_ON 0
#define LED_OFF 1
#define READ_LED 0
#define WRITE_LED 1
int main(int argc, char *argv[])
{
int fd;
int ret;
char *filename;
unsigned char databuf[1];
unsigned char val[1];
if ((argc < 3) || (argc > 4)) //参数个数判断
{
printf("Error Usage!\r\n");
return -1;
}
filename = argv[1];
fd = open(filename, O_RDWR);
if (fd < 0)
{
printf("device open error!\r\n");
}
val[0] = atoi(argv[2]);
if (val[0] == WRITE_LED)//是写命令
{
if (argc < 4) //写命令后没接参数,错误
{
printf("Error Usage!\r\n");
return -1;
}
databuf[0] = atoi(argv[3]);
if (databuf[0] > 1) //只能写 0 或 1
{
printf("Error Usage!\r\n");
return -1;
}
ret = write(fd, databuf, sizeof(databuf));
if (ret < 0)
{
printf("data write error!\r\n");
return -1;
}
}
else if (val[0] == READ_LED)
{
if (argc > 3)
{
printf("Error Usage!\r\n");
return -1;
}
ret = read(fd, databuf, 1); //读取一字节
if (databuf[0] == LED_ON)
{
printf("led is on\r\n");
}
else if (databuf[0] == LED_OFF)
{
printf("led is off\r\n");
}
}
else
{
printf("Error Usage!\r\n");
return -1;
}
close(fd);
return 0;
}
执行arm-linux-gnueabihf-gcc ledtest.c -o ledtest编译出ledtest可执行文件,复制到nfs根文件系统文件夹下。
要开灯串口终端输入:./ledtest /dev/led 1 0
要关灯串口终端输入:./ledtest /dev/led 1 1
读取led状态串口终端输入:./ledtest /dev/led 0