2013-04-16 1 views
15

내 보드에서 GPIO로 패드를 멀티 플렉스했습니다. 내가/SYS/클래스/GPIO/내보내기를 통해 그것을 내보낼 때, 나는어떤 Linux 드라이버가 내 GPIO를 호깅하고 있는지 어떻게 알 수 있습니까?

-sh: echo: write error: Device or resource busy 

내 생각 엔 내가 그 기회를 얻기 전에 다른 드라이버가이 패드를 요청하는 것입니다 얻을. 무엇을 예약하고 있는지 어떻게 알 수 있습니까?

답변

10

경계 장치 커널 및 다른 장치에서 cat /sys/kernel/debug/gpio을 사용하면 매핑 된 gpios, 해당 상태 및 할당시 제공된 이름의 목록을 얻을 수 있습니다. 이름에 대해 커널 소스를 grep하고 어떤 모듈을 가져 왔는지 확인할 수 있습니다.

[email protected]:/opt# cat /sys/kernel/debug/gpio 
GPIOs 0-31, platform/209c000.gpio, 209c000.gpio: 
gpio-2 (flexcan-trx-stby ) out lo  
gpio-17 (DISP_SCL   ) out lo  

GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio: 
gpio-33 (sysfs    ) out lo  
gpio-35 (sysfs    ) in hi  
gpio-36 (sysfs    ) in hi  
gpio-37 (DISP_SDI   ) out lo  
gpio-38 (219c000.usdhc cd ) in hi  

GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio: 
gpio-83 (spi_imx   ) out lo  
gpio-86 (usb_otg_vbus  ) out lo  

GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio: 
gpio-101 (sysfs    ) in hi  
gpio-116 (rst-gpios   ) out lo  

GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio: 

GPIOs 160-191, platform/20b0000.gpio, 20b0000.gpio: 
gpio-175 (wlan-en   ) out lo  
gpio-176 (bt_rfkill_reset ) out lo  

GPIOs 192-223, platform/20b4000.gpio, 20b4000.gpio: 
gpio-192 (2198000.usdhc cd ) in lo  
gpio-204 (ehci_reset_gpio ) out lo  
gpio-205 (sysfs    ) in lo  

'는 sysfs를 노드가 아직 존재하지 않기 때문에 작동하지 않습니다

+0

감사합니다. 매우 유용합니다. 나는 그것이 3 년 전에 존재했는지 궁금합니다. –

+0

아마도. 나는 같은 질문을 검색하고 답을 찾지 못했기 때문에'find/sys -name gpio'를 찾았으며, 이것이 내가 잘못된 GPIO를 요청했다는 것을 알게되었습니다. –

0

'lsof'명령을 사용하여 열려있는 파일을 나열 할 수 있습니다. 사실 gpio 파일은 일반 파일입니다. (예 :/sys/class/gpio/gpio242/value).
올바른 커널 모듈 (insmod 또는 modprobe 포함)을 메모리에로드해야합니다.

+1

. 내보낼 GPIO 번호를 에코하여 노드를 만들어야하지만 그렇지 않습니다. –

+0

올바른 커널 모듈을로드하면/sys/devices/virtual/gpio/디렉토리에서 사용 가능한 모든 gpio를 볼 수 있습니다. 디렉토리의 내용은 무엇입니까? 보드의 회로도에서 실제 위치를 따르는 레이블 파일을 볼 수 있습니다. – paykoob

1

우리는 다른 GPIO 핀을 사용하여 끝내게되었습니다. i.mx6에는 각각 32 핀의 7 개의 GPIO 컨트롤러가 있으며, 일부 컨트롤러는 단순히 어디에도 겉으로 드러나지 않은 I/O 오류를 내고있었습니다.

관련 문제