Ядро Linux предоставляет для доступа к входам/выходам GPIO (general purpose input/output) специальный интерфейс, который позволяет работать с GPIO как с символьными устройствами.
Прежде всего, сошлюсь на полезный пост Linux - Accessing GPIO from User Space и дополню его некоторыми комментариями, а также описанием работы с прерываниями.