Articles of gpio

SysFs接口。 我无法在Zybo Board中导出gpio引脚

使用这里所描述的编译的linux-kernel,我试图让一个指示灯在这个维基上闪烁: Linux GPIO Driver 。 我正在与Xilinx的Zybo Board合作。 我启用了内核选项: CONFIG_GPIO_SYSFS=y CONFIG_SYSFS=y CONFIG_GPIO_XILINX=y 我检查了我已经挂载在/ sys的SysFs 我想configurationMIO端口的引脚7,因为它连接到板上的LED LD4。 所以我用这个expression式: echo 7 > /sys/class/gpio/export 我总是得到这个错误: export_store: invalid GPIO 7 ash: write error: Invalid argument 我也尝试导出值145 (138+7)因为我在这里find的解释: forum_link和86,因为这个人得到的东西工作basic_example 。 但是我总是得到同样的错误。 你能帮我一下吗? 也许我必须使用其他抵消? 或者是更多的权限configuration?

在Cubieboard平台中运行的Java代码中执行terminal命令获取输出

我正在使用在Linux Debian中运行terminal命令并在java程序中获取输出的代码是这样的: public static String execute(String command) { StringBuilder sb = new StringBuilder(); String[] commands = new String[]{"/bin/sh", "-c", command}; try { Process proc = new ProcessBuilder(commands).start(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream())); String s = null; while ((s = stdInput.readLine()) != null) { sb.append(s); sb.append("\n"); } while ((s […]

如何检测Linux板上GPIO引脚的变化

我在基于ARM的Linux板(imx233 CPU)上使用3.12内核。 我的目的是检测GPIO引脚的变化(1到0)。 我可以读取不断调用下面的函数的引脚值(在while(1)循环中) int GPIO_read_value(int pin){ int gpio_value = 0; char path[35] = {'\0'}; FILE *fp; sprintf(path, "/sys/class/gpio/gpio%d/value", pin); if ((fp = fopen(path,"rb+")) == NULL){ //echo in > direction //error } fscanf(fp, "%d", &gpio_value); fclose(fp); return gpio_value; } 但是这会给CPU造成太多的负担。 我不使用nanosleep或nanosleep ,因为换针发生的时间很短,这会导致我错过这个事件。 据我所知,这是不可能使用poll() 。 是否有任何poll()函数,我可以用它来检测一个GPIO引脚变化? 编辑:以防万一,如果我做错了什么,这里是我的poll()用法,不检测引脚更改 struct pollfd pollfds; int fd; int nread, result; pollfds.fd […]

如何在embedded式Linux中检测GPIO线上的中断?

在pandaboard OMAP4的GPIO_39上每隔10ms产生一个中断。 我已经在Linux驱动代码中注册了一个处理程序,但是由于没有检测到中断,处理程序没有被调用。 我在硬件层面(通过探测gpio引脚)确定中断实际上正在产生。 只是软件无法检测到它。 我有我的驱动程序代码中的以下内容。 #define GPIO_NO 39 iowrite16(0x3, gpio_39_address + 2); /* Configured the pin 22 to be used as gpio. */ ret = gpio_request(GPIO_NO, "Claiming GPIO"); if(ret < 0) { printk(KERN_ALERT "%s: Claiming GPIO_%d failed\n", __func__, GPIO_NO); return -1; } else { printk(KERN_INFO "%s: Claiming GPIO_%d successful\n", __func__, GPIO_NO); } ret = […]

mmap比ioremap慢

我正在开发运行Linux 2.6.37的ARM设备。 我试图尽可能快地切换IO引脚。 我做了一个小内核模块和一个用户空间应用程序。 我试了两件事: 使用ioremap直接从内核空间操纵GPIO控制寄存器。 mmap() GPIO控制寄存器没有caching,并从用户空间使用它们。 两种方法都可以工作,但第二种方法比第一种方法慢3倍左右(在示波器上观察)。 我想我禁用了所有的caching机制。 当然,我想要得到两个最好的世界:用户空间的灵活性和易用性,以及内核空间的速度。 有谁知道为什么mmap()可能比ioremap()慢? 这是我的代码: 内核模块代码 static int ti81xx_usmap_mmap(struct file* pFile, struct vm_area_struct* pVma) { pVma->vm_flags |= VM_RESERVED; pVma->vm_page_prot = pgprot_noncached(pVma->vm_page_prot); if (io_remap_pfn_range(pVma, pVma->vm_start, pVma->vm_pgoff, pVma->vm_end – pVma->vm_start, pVma->vm_page_prot)) return -EAGAIN; pVma->vm_ops = &ti81xx_usmap_vm_ops; return 0; } static void ti81xx_usmap_test_gpio(void) { u32* pGpIoRegisters = ioremap_nocache(TI81XX_GPIO0_BASE, 0x400); const […]

在没有`sudo“的情况下访问GPIO(一个覆盆子pi)

当然,这个问题可能不是特定的覆盆子pi。 另外,我对Linux比较陌生。 我想写一个小的库(在node.js中,如果有的话)使用sysfs访问树莓派的GPIO。 但是,访问sysfs需要sudo访问权限,这显然是不好的。 Quick2Wire似乎有一个解决scheme,但我想更好地理解它,而不是只是盲目地使用它。 他们当然使用了C语言,但是据我所知,代码并不复杂,并且可能只是用bash来拉取,即使不那么优雅。 然而,更重要的是,我不知道为什么它的作品。 任何帮助将是伟大的。 编辑:感谢您的意见。 很显然,我需要重述这个问题。 这里是:它是如何安装(作为根),应用程序不需要任何更多的根perms使用? 在这种情况下,如何为某人添加帮助? /sys/devices/virtual/gpio不是gpio sysfs可用的位置,那么有什么诀窍呢? 我真的是一个n00b,所以这些问题可能不是问题,所以请耐心等待。