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




     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值