led 驱动程序测试

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)还是很管用的。。。。




     

你可能感兴趣的:(led 驱动程序测试)