Jika saya memahami pertanyaan Anda, artikel ini terdengar seperti yang Anda cari. Artikel tersebut berjudul:Driver perangkat di ruang pengguna.
kutipan
driver UIO
Linux menyediakan kerangka kerja UIO (User I/O) standar untuk mengembangkan driver perangkat berbasis ruang pengguna. Kerangka kerja UIO mendefinisikan komponen ruang-kernel kecil yang melakukan dua tugas utama:
- a. Tunjukkan wilayah memori perangkat ke ruang pengguna.
- b. Daftarkan interupsi perangkat dan berikan indikasi interupsi ke ruang pengguna.
Komponen UIO kernel-space kemudian memaparkan perangkat melalui sekumpulan entri sysfs seperti /dev/uioXX. Komponen ruang pengguna mencari entri ini, membaca rentang alamat perangkat dan memetakannya ke memori ruang pengguna.
Komponen ruang pengguna dapat melakukan semua tugas manajemen perangkat termasuk I/O dari perangkat. Namun untuk interupsi, ia perlu melakukan pemblokiran read() pada entri perangkat, yang mengakibatkan komponen kernel membuat aplikasi ruang-pengguna untuk tidur dan membangunkannya setelah interupsi diterima.
Saya belum pernah melakukan ini sebelumnya, jadi saya tidak dapat menawarkan panduan lebih dari ini, tetapi saya pikir ini mungkin berguna untuk misi Anda.
Berpikir dengan cara yang sama seperti @RBerteig, BeagleBone Black berisi mikrokontroler Programmable Real-Time Unit (PRU) 32 bit.
Sepertinya tidak ada komunitas besar yang menggunakan hal-hal ini dengan kemampuan penuh. Saya bahkan tidak yakin ada kompiler yang bagus untuk ini. Keuntungan dibandingkan perakitan SBC dan mikrokontroler atau papan mikrokontroler adalah kode PRU dapat berasal dari ARM utama, dan memori bersama cukup nyaman.
Tidak dapat mengatakan saya telah menggunakan ini, atau bahkan bahwa saya telah menjalankan lebih dari beberapa contoh di BeagleBone Blacks saya, tetapi kebutuhan yang diungkapkan dalam pertanyaan ini mungkin salah satu dari hal-hal yang dapat mendorong pengembang dengan kebutuhan ini ke arah Hitam dan jauh dari Pi.