OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 843|回复: 4

[XILINX] 新字符设备实验,正确检索设备节点文件,无法控制LED

[复制链接]

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
发表于 2024-3-19 17:26:56 | 显示全部楼层 |阅读模式
参考资料:正点原子领航者V3.2教程的新字符设备实验和设备树下LED实验
问题:前面一切都没有问题,正确检索到设备节点文件。最后一步控制LED亮灭时LED没有反应,驱动代码我在嵌入式LED下实验过是没问题的。这两个实验的代码修改的地方跟写入也没关系。
尝试:①直接贴了教程新字符设备实验和设备树下LED实验的代码,仍旧不行,排除代码问题。②先运行嵌入式LED驱动后再卸载,重新执行新字符设备和设备树下LED的驱动就行了。
想知道原因是什么

DE5E9D38-9796-49db-8CB6-7C07585F8BF7.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2024-3-19
在线时间
105 小时
发表于 2024-3-19 20:26:27 | 显示全部楼层
可以贴一下设备树和led测试程序源码
回复 支持 反对

使用道具 举报

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
 楼主| 发表于 2024-3-25 13:42:56 | 显示全部楼层
Alexan 发表于 2024-3-19 20:26
可以贴一下设备树和led测试程序源码
  1. /include/ "system-conf.dtsi"
  2. / {

  3. model = "CHopes Linux ALINX Zynq Core Board";
  4. compatible = "xlnx,zynq-zc701","xlnx,zynq-7000";

  5. chosen{
  6.         bootargs = "console=ttyPS0,115200 earlycon root=/dev/mmcblk0p2 rw rootwait";
  7.         stdout-path = "serial0:115200n8";
  8.    };

  9. led{
  10.         compatible="zynq,led";
  11.     status="okay";
  12.         default-state="on";

  13.         reg =  <0xe000a040 0x4
  14.                         0xe000a204 0x4
  15.                         0xe000a208 0x4
  16.                         0xe000a214 0x4  
  17.                         0xf800012c 0x4>;
  18.    };
  19. };
复制代码


  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <stdlib.h>
  7. #include <string.h>

  8. int main(int argc, char *argv[])
  9. {
  10.         int fd, ret;
  11.         unsigned char buf[1];

  12.         if(3 != argc) {
  13.                 printf("Usage:\n"
  14.                 "\t./ledApp /dev/led 1                [url=home.php?mod=space&uid=95564]@[/url] close LED\n"
  15.                 "\t./ledApp /dev/led 0                @ open LED\n"
  16.                 );
  17.                 return -1;
  18.         }

  19.         /* 打开设备 */
  20.         fd = open(argv[1], O_RDWR);
  21.         if(0 > fd) {
  22.                 printf("file %s open failed!\r\n", argv[1]);
  23.                 return -1;
  24.         }

  25.         /* 将字符串转换为int型数据 */
  26.         buf[0] = atoi(argv[2]);

  27.         /* 向驱动写入数据 */
  28.         ret = write(fd, buf, sizeof(buf));
  29.         if(0 > ret){
  30.                 printf("LED Control Failed!\r\n");
  31.                 close(fd);
  32.                 return -1;
  33.         }

  34.         /* 关闭设备 */
  35.         close(fd);
  36.         return 0;
  37. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2024-3-19
在线时间
105 小时
发表于 2024-3-25 18:10:55 | 显示全部楼层

从设备树和测试程序源码来看,寄存器地址和打开文件写入数据都没啥问题。可以在驱动程序调用write函数写入数据前后,利用prink打印出写入的数据查看看是否有变化,printk的打印内容可以在加载驱动后用dmesg命令查看
回复 支持 反对

使用道具 举报

30

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-10-19
在线时间
54 小时
 楼主| 发表于 2024-3-27 17:51:10 | 显示全部楼层
Alexan 发表于 2024-3-25 18:10
从设备树和测试程序源码来看,寄存器地址和打开文件写入数据都没啥问题。可以在驱动程序调用write函数写 ...

好的,谢谢大哥,我去试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表