Я работаю в системе со встроенным Linux (ядро 2.6.31).
Внутри находится микросхема AT91SAM9G20, и некоторые выводы вынесены наружу.
Теперь я хочу использовать их как входы GPIO.
Я прочитал документацию gpio.txt об использовании GPIO через файловую систему, и до сих пор это работает очень хорошо. Я подключил несколько переключателей к gpio-пинам и вижу результат в /sys/class/gpio/gpioX/value
. Но теперь я хотел бы отреагировать на изменение без ожидания в цикле. (например, эхо "Switch1 был нажат").
Думаю, здесь мне нужны прерывания, но я не мог понять, как их использовать, не написав собственный драйвер ядра. Я относительно новичок в Linux и C (обычно я программирую на Java), поэтому я бы тоже хотел обрабатывать прерывания через sysfs. Но моя проблема в том, что в моем каталоге GPIO нет "краевого" файла (я думаю, потому что это только с версии ядра 2.6.33+). Это правильно? Вместо "края" у меня там uevent
файл, который не описан в gpio.txt
.
В документации gpio.txt упоминается стандартный драйвер ядра: "gpio_keys". Можно ли использовать это для моей проблемы?
Я думаю, было бы лучше работать с этим драйвером, чем позволять программе пользовательского пространства манипулировать задачами ядра. Я нашел множество кодов для написания собственного драйвера, но я даже не смог узнать, какой из 600 gpio.h
файлов включить и как ссылаться на библиотеку (кросс-компилятор не смог найти файл gpio.h ).
Извините за вопросы новичков, надеюсь, вы дадите мне несколько советов.
заранее спасибо