您的位置:首页 > 其它

led 驱动程序测试

2015-11-14 13:51 447 查看
1.首先驱动程序文件通过tftp传输到开发板上,然后执行insmod s3c_led.ko 装载LED驱动模块

2.cat /proc/devices |grep led,显示led 250

3.创建设备节点:mknod /dev/led0 c 250 0

mknod /dev/led1 c 250 1

mknod /dev/led2 c 250 2

mknod /dev/led3 c 250 3

4.改变设备的保护权限:chmod 644 /dev/led[0-3]

5.测试程序如下:

#include <stdio.h>

#include <stdarg.h>

#include <sys/stat.h>

#include <sys/ioctl.h>

#include <unistd.h>

#include <fcntl.h>

#include <sys/types.h>

#include <stdlib.h>

#include <errno.h> //返回出错信息所需要的头文件

#define PLATDRV_MAGIC 0x60

#define LED_OFF _IO (PLATDRV_MAGIC, 0x18)

#define LED_ON _IO (PLATDRV_MAGIC, 0x19)

#define LED_NUM 4

#define NAME_LENGTH 20

int main(int argc,char **argv)

{

int led_num;

int cmd_num;

int fd[LED_NUM];

int j=0;

char dev_name[NAME_LENGTH]={0};

int fd1;

if(argc<3)

{

printf("too few parameters,please input:./%s 0|1|2|3 0(ON)|1(OFF)|2(BLINK)\n",argv[0]);

return -1;

}

for(j=0;j<LED_NUM;j++)

{

snprintf(dev_name,sizeof(dev_name),"/dev/led%d",j); //格式化输出到dev_name

fd[j] = open(dev_name,O_RDWR); //依次打开所有LED驱动文件

if(fd[j]<0)

{

printf("open file %s error %s",dev_name,strerror(errno));

return -1;

}

}

led_num=atoi(argv[1]);

cmd_num=atoi(argv[2]);

fd1 = fd[led_num];

switch(cmd_num)

{

case 0:

ioctl(fd1,LED_ON);

break;

case 1:

ioctl(fd1,LED_OFF);

break;

default:

printf("failure\n");

break;

}

for(j=0;j<LED_NUM;j++)

close(fd[j]); //关闭所有文件

return 0;

}

6.总结:在编写测试程序时,开始总是没有效果,打印文件描述符也是0,但总是找不到出错信息,后来在应用程序空间使用了strerror(errno)这个函数

才打印出错原因,这才找出了问题。在应用程序空间使用strerror(errno)还是很管用的。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: