Bisakah dua modul kernel yang berbeda mendapatkan akses ke area memori yang sama dari panggilan ke ioremap_nocache ()?
Saya memiliki driver nirkabel, dan modul terpisah, saya ingin modul terpisah untuk profil nilai kebisingan pada kartu, sementara driver masih beroperasi. Maka pertanyaan saya di atas.
Satu jalan yang saya jelajahi adalah memulai utas kernel dari driver, saya kemudian menerapkan semaphore untuk mencegah segala kondisi balapan yang timbul dari baca / tulis bersamaan ke ruang alamat yang sama. Saya berharap bahwa utas anak akan dapat mengakses area memori yang sama.
Sayangnya ini tidak berfungsi seperti yang saya harapkan. Saya sangat menghargai saran apa pun.
Jawaban:
Saya kira Anda bermaksud untuk mengimplementasikan modul kernel lain karena Anda pikir lebih mudah untuk berbagi data antar modul kernel. Tapi mungkin itu bukan pilihan yang baik. Jika mungkin untuk 'profil kebisingan' di ruang pengguna, saya pikir solusi yang lebih baik adalah dengan menerapkan 'profiler' di ruang pengguna.
Dalam solusi ini, profiler ruang pengguna membaca data, melakukan beberapa perhitungan, dan kemudian menyerahkan hasilnya.
Jika solusi ini ok, implementasinya adalah sebagai berikut.
Dalam modul kernel, itu hanya untuk mendaftarkan perangkat char di '/ proc' dan mengimplementasikan primitif 'read' dan 'write'. Di ruang pengguna, hanya untuk mengimplementasikan profiler, membaca dan menulis ke perangkat char. Detail dan informasi untuk implementasi ini ada di sini .
sumber