为什么我应用程序调用write函数老是返回-1?

wesley 2013-03-13 03:55:52
这是一段应用程序代码,我测试过open 和ioctl函数都能正常测试 但是write函数总是返回-1,用printk在驱动的write函数里面也证明根本就没找到该驱动的write函数。
#include <unistd.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#define LED_ON 1
#define LED_OFF 0
static int fd; //用于存放打开设备时返回的文件句柄

int main(int argc, char **argv)
{
int led_no = 0;
int val ;
int ret;
fd = open("/dev/GPIO_DRV", 0); //打开设备
if(fd < 0)
{
perror("open device failed");
exit(1);
}

while(1)
{
for(led_no = 0; led_no < 4; led_no++)
{
ioctl(fd, LED_ON, led_no); //点亮一盏灯
sleep(2);
}
led_no = 0;
for(led_no = 0; led_no < 4; led_no++)
{
ioctl(fd, LED_OFF, led_no); //点亮一盏灯
sleep(1);
}
led_no = 0;
if(argc != 2)
{
printf("Usage :\n");
printf("%s <on|off>\n", argv[0]);
return 0; //退出重新运行应用程序
}

if (strcmp(argv[1], "go") != 0) //如果第二个参数不是go
{
if (strcmp(argv[1], "on") == 0) //如果第二个参数为on
{
printf("led app on\n");
val = 1;
}
else if (strcmp(argv[1], "off") == 0) //第二个参数为off
{
printf("led app off\n");
val = 0;
}
ret = write(fd, &val, 4);
if(ret < 0)
{
printf("write failed ret = %d\n", ret);
return 1;
}
return 0;
}


}
//close(fd); //关闭设备
return 0;
}

printf("write failed ret = %d\n", ret);
到这句就打印出 ret = -1
...全文
1132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wesley 2013-03-13
  • 打赏
  • 举报
回复
问题已经解决了,fd = open("/dev/GPIO_DRV", 0); //打开设备 这条语句上没有读写授权 不过仍然感谢楼上的热情,散分 结贴。。。
duloveding 2013-03-13
  • 打赏
  • 举报
回复
驱动呢?write函数没匹配上,那就是驱动问题了。
duloveding 2013-03-13
  • 打赏
  • 举报
回复
驱动呢?write函数没匹配上,那就是驱动问题了。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧