Anda kurang beruntung dengan menjalankan fungsi ruang pengguna dari kernel karena kernel tidak dan seharusnya tidak mengetahui tentang fungsi dan logika aplikasi ruang pengguna individu, belum lagi bahwa setiap aplikasi ruang pengguna memiliki memorinya sendiri tata letak, bahwa tidak ada proses lain atau kernel yang diizinkan untuk menyerang dengan cara itu (objek bersama adalah pengecualian di sini, tetapi Anda tetap tidak dapat memanfaatkannya dari ruang kernel). Bagaimana dengan model keamanan, Anda tidak seharusnya menjalankan kode ruang pengguna (yang secara otomatis dianggap kode tidak aman dalam konteks kernel) dalam konteks kernel sejak awal karena hal itu akan merusak model keamanan kernel di sana. instan itu. Sekarang dengan mempertimbangkan semua hal yang disebutkan di atas, ditambah banyak motif lain, Anda mungkin ingin mempertimbangkan kembali pendekatan Anda dan fokus pada Kernel <-> IPC dan Antarmuka Ruang Pengguna, sistem file, atau API pembantu mode pengguna (baca di bawah).
Anda dapat memanggil aplikasi ruang pengguna dari kernel, yang menggunakan API usermode-helper. Artikel IBM DeveloperWorks berikut akan membantu Anda memulai menggunakan API kernel Linux usermode-helper:
API Kernel, Bagian 1:Memanggil aplikasi ruang pengguna dari kernel
Saya pikir cara termudah adalah mendaftarkan perangkat karakter yang siap ketika perangkat memiliki beberapa data.
Proses apa pun yang mencoba membaca dari perangkat ini, kemudian ditidurkan hingga perangkat siap, lalu dibangunkan, pada saat itu dapat melakukan hal yang sesuai.
Jika Anda hanya ingin menandakan kesiapan, pembaca cukup membaca satu byte null.
Program userspace kemudian hanya perlu menjalankan panggilan read() pemblokiran, dan akan diblokir dengan tepat, sampai Anda membangunkannya.
Anda perlu memahami mekanisme antrean penjadwal kernel untuk menggunakan ini.
Sepertinya saluran interupsi Anda sudah tersedia untuk ruang pengguna melalui gpiolib? (/sys/class/gpio/...)
Sudahkah Anda melakukan benchmark jika gpio edge triggering dan poll() cukup cepat untuk Anda? Dengan begitu Anda tidak perlu melakukan polling status dari aplikasi userspace tetapi edge triggering akan melaporkannya melalui poll(). Lihat Dokumentasi/gpio.txt di sumber kernel.
Jika pemicu edge melalui sysfs tidak cukup baik, maka cara yang tepat adalah mengembangkan driver kernel yang menangani bagian kritis waktu dan mengekspor hasilnya ke ruang pengguna melalui API (sysfs, node perangkat, dll).