디바이스 드라이버
글 수 70
2013.11.05 15:54:59 (*.52.177.249)
31211
아래와 같이 명령을 이용하여 사용하고 있는 GPIO를 확인할 수 있습니다.
root@primero-s:~# cat /sys/kernel/debug/gpio
GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
gpio-25 (phy-reset ) out hi
GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
gpio-38 (219c000.usdhc cd ) in lo
gpio-39 (219c000.usdhc ro ) in lo
GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
gpio-86 (usb_otg_vbus ) out lo
GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
gpio-101 (GPIO4_5 ) in lo
GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:
GPIOs 160-191, platform/20b0000.gpio, 20b0000.gpio:
gpio-170 (GPIO6_10 ) out lo
gpio-171 (GPIO6_11 ) in hi
gpio-174 (GPIO6_14 ) in hi
gpio-175 (GPIO6_15 ) in lo
gpio-176 (GPIO6_16 ) in hi
GPIOs 192-223, platform/20b4000.gpio, 20b4000.gpio:
gpio-205 (GPIO7_13 ) in lo
root@primero-s:~#
위와 같이 /sys/kernel/debug/gpio 가 생성되기 위해서는
커널 옵션에서 다음과 같이 설정되어 있어야 합니다.
작업한 커널은 linux-3.12.rc6 버젼입니다.
Kernel hacking --->
printk and dmesg options --->
Compile-time checks and compiler options --->
[ ] Compile the kernel with debug info
[*] Enable __deprecated logic
[*] Enable __must_check logic
(1024) Warn for stack frames larger than (needs gcc 4.4)
[ ] Strip assembler-generated symbols during link
[ ] Generate readable assembler code
[ ] Enable unused/obsolete exported symbols
-*- Debug Filesystem
[ ] Run 'make headers_check' when building vmlinux
[ ] Enable full Section mismatch analysis
[ ] Force weak per-cpu definition
[*] Magic SysRq key
-*- Kernel debugging
Device Drivers --->
-*- GPIO Support --->
/sys/kernel/debug/gpio 를 생성하는 소스는 drivers/gpio/gpiolib.c 입니다.
#ifdef CONFIG_DEBUG_FS
static void gpiolib_dbg_show()
{
}
static void *gpiolib_seq_start()
{
}
...
...
static int __init gpiolib_debugfs_init(void)
{
/* /sys/kernel/debug/gpio */
(void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
NULL, NULL, &gpiolib_operations);
return 0;
}
subsys_initcall(gpiolib_debugfs_init);
#endif /* DEBUG_FS */
cat /sys/kernel/debug/gpio 로 보여지는 GPIO 번호들은 모두 gpio_request(unsigned gpio, const char *label) 를 통한
FLAG_REQUESTED 된 GPIO에 대하여 출력합니다.
예로 gpio-25 (phy-reset ) out hi 의 경우에는 GPIO0-25 번호이고, label은 phy-reset으로 등록된 GPIO를 보여줍니다.
out hi 는 gpio_direction이 출력으로 설정되어 있으면 초기값은 High로 설정되었다는 것을 의미합니다.