低调ヾ也是一种夸耀662 2024-09-26 15:59 采纳率: 20%
浏览 3
已结题

sh: write error: Invalid argument

我的驱动代码,用echo 1 > led 会出现sh: write error: Invalid argument,内核日志打印出来的问题是prink("error"),没有正确执行。但是写的测试程序能正常执行内核write驱动代码,这里是为什么呢

img

  • 写回答

12条回答 默认 最新

  • 阿齐Archie 嵌入式领域优质创作者 2024-09-26 16:00
    关注

    以下参考免费微信小程序:皆我百晓生 作答,并由阿齐Archie整理回复,若还有疑问可评论或留言。

    从你提供的两段代码来看,它们几乎是一样的,但是有一些小的语法错误和潜在的问题。以下是一些可能的原因和解决方案:

    1. 字符串比较操作符错误: 在C语言中,字符串比较应该使用==而不是=。你的代码中使用了=0,这实际上是赋值操作,而不是比较操作。

      修正

      if(strcmp(led_cmd, LED_ON) == 0)
      
    2. 错误的字符串终止符: 你在代码中使用了1ed_cmd[count]= '\0';,这看起来是一个打字错误。它应该是led_cmd[count] = '\0';

      修正

      led_cmd[count] = '\0';
      
    3. 注释错误: 你的代码中有一些注释使用了错误的语法。例如,/ if (...)/ printk("error"); 应该是/* if (...) *//* printk("error"); */

      修正

      /* if (count > sizeof(led_cmd) - 1) */
      {
          printk("error");
          return -EINVAL;
      }
      
    4. 使用未定义的变量: 你的代码中使用了led_cmd数组,但是没有初始化它。在写入数据之前,应该将整个数组初始化为0。

      修正

      memset(led_cmd, 0, sizeof(led_cmd));
      
    5. 错误的函数返回类型copy_from_user函数的返回值应该被检查,以确保数据正确地从用户空间复制到内核空间。

      修正

      if (copy_from_user(led_cmd, buf, count) != 0) {
          printk("Failed to copy from user\n");
          return -EFAULT;
      }
      
    6. 错误的宏定义: 确保LED_ON宏定义正确,并且在整个代码中一致。

      修正

      #define LED_ON "1"
      
    7. 内核日志打印: 确保你的内核日志级别和打印的级别相匹配。如果内核日志级别设置得太高,一些信息可能不会被打印出来。

    8. 编译和加载驱动: 确保你的驱动没有编译错误,并且正确加载到内核中。

    9. 检查设备文件: 确保设备文件(例如/led)已经正确创建,并且你有正确的权限来写入它。

    10. 检查GPIO设置: 确保GPIO已经正确配置,并且你的设备支持GPIO操作。

    修正这些问题后,你的驱动代码应该能够正常工作。如果问题仍然存在,请检查内核日志以获取更多的错误信息,并确保你的硬件设置正确。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月26日
  • 创建了问题 9月26日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?