Akses memori modul kernel

9

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.

Radagasp
sumber
Mengapa Anda membutuhkan modul kernel untuk profil nilai-nilai kebisingan?
gertvdijk
Terima kasih atas pertanyaannya, driver nirkabelnya sangat kompleks, dan untuk mengubah periodisitasnya, kalibrasi mungkin menyebabkan beberapa hasil yang tidak diinginkan. Saya harus melakukan ini karena hanya melakukan kalibrasi untuk interval yang terlalu lama untuk kebutuhan saya. Karena saya tahu persis bagaimana cara memprofilkan perangkat dalam modul terpisah, saya hanya ingin tahu apakah saya dapat memperoleh akses ke area memori yang sama dengan yang dikerjakan pengemudi.
Radagasp
2
Harap edit pertanyaan Anda untuk memasukkan semua detail pada upaya / pendekatan Anda sebelumnya. Itulah cara kerja situs ini. Ini bukan forum diskusi, tetapi situs tanya jawab, Anda tahu?
gertvdijk
Diskusi mungkin mencakup pertanyaan, dan jawaban, sebagian benar dan yang lain salah - sepertinya penafsiran aturan di admin, ada di provinsi semantik. Tentu saja saya telah memperbarui pertanyaan saya.
Radagasp

Jawaban:

7

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 .

vitorafsr
sumber
Saya tidak berpikir saya cukup mendapatkan jawaban Anda ... seperti yang saya mengerti, saya masih perlu menulis modul, dan modul ini akan mencoba mendapatkan akses ke area memori yang sama dari panggilan ke ioremap_nocache () yang lainnya modul menggunakan. Atau apakah Anda mengatakan bahwa saya mendaftarkan perangkat char dalam modul nirkabel
Radagasp
1
Benar, Anda harus mengimplementasikan perangkat lunak, tetapi bukan modul. Anda harus menulis program ruang pengguna normal, lebih sederhana dari modul, yang bertuliskan dari '/ dev / nameofdevice' dan menulisnya. Tidak perlu menggunakan 'ioremap_nocache ()', cukup syscalls sebagai 'open', 'read', 'write', 'close'. Dan ya, modul nirkabel harus mendaftarkan perangkat char '/ dev / nameofdevice' di dalam, untuk mengekspos data ke userland.
vitorafsr