Çekirdek modülü bellek erişimi


9

İki farklı çekirdek modülü ioremap_nocache () çağrısından aynı bellek alanına erişebilir mi?

Kablosuz bir sürücüm ve ayrı bir modülüm var, ayrı bir modül, sürücü hala çalışırken sürücüdeki gürültü değerlerini profillemek istiyor. Bu yüzden yukarıdaki sorum.

Keşfettiğim bir yol, sürücüden bir çekirdek iş parçacığı başlatmaktı, daha sonra aynı adres alanına aynı anda okuma / yazma işlemlerinden kaynaklanan yarış koşullarını önlemek için bir semafor uyguladım. Bir alt dizinin aynı bellek alanına erişebileceğini umdum.

Ne yazık ki bu beklediğim gibi çalışmadı. Herhangi bir öneri için teşekkür ederiz.


Gürültü değerlerini belirlemek için neden bir çekirdek modülüne ihtiyacınız var?
gertvdijk

Soru için teşekkürler, kablosuz sürücü çok karmaşıktır ve kalibrasyonlarının periyodikliğini değiştirmek bazı istenmeyen sonuçlara neden olabilir. Bunu yapmak zorundayım çünkü sadece benim ihtiyaçlarım için çok uzun aralıklar için kalibrasyonlarını yapıyor. Aygıtı ayrı bir modülde tam olarak nasıl profilleyeceğimi bildiğim için, sürücünün birlikte çalıştığı bellek alanına erişip erişemeyeceğimi merak ediyorum.
Radagasp

2
Lütfen sorunuzu, önceki girişimleriniz / yaklaşımlarınızla ilgili tüm ayrıntıları içerecek şekilde düzenleyin . Bu site böyle çalışır. Bu bir tartışma forumu değil, bir Soru-Cevap sitesi.
gertvdijk

Tartışma soruları ve cevapları içerebilir, bazıları doğru ve bazıları yanlış - yöneticilerin genelinde kuralların yorumlanması anlambilim ilindedir. Elbette sorumu güncelledim.
Radagasp

Yanıtlar:


7

Çekirdek modülleri arasında veri paylaşmanın daha kolay olduğunu düşündüğünüz için başka bir çekirdek modülü uygulamak istediğinizi varsayalım. Ama belki de iyi bir seçim değil. Kullanıcı alanında 'gürültüyü' profillemek mümkün ise, bence daha iyi bir çözüm 'profiler'i kullanıcı alanında uygulamaktır.

Bu çözümde, kullanıcı alanı profili oluşturucu verileri okur, bazı hesaplamaları gerçekleştirir ve sonucu gönderir.

Bu çözüm uygunsa, uygulama aşağıdaki gibidir.

Çekirdek modülünde, sadece bir char cihazını '/ proc' a kaydetmek ve 'read' ve 'write' ilkellerini uygulamaktır. Kullanıcı alanında, sadece profiler uygulamak, char cihazına okuma ve yazma. Bu uygulamanın ayrıntıları ve bilgileri burada .


Cevabınızı tam olarak aldığımı sanmıyorum ... anladığım gibi, yine de bir modül yazmam gerekecek ve bu modül diğer ioremap_nocache () çağrısından aynı bellek alanına erişim kazanmaya çalışacaktı. modülü kullanıyor. Veya char cihazını kablosuz modüle kaydettiğimi mi söylüyorsunuz
Radagasp

1
Doğru, bir yazılım uygulamak zorunda kalacaksınız, ancak bir modül değil. '/ Dev / nameofdevice' öğesinden okunan ve ona yazılan bir modülden daha basit bir normal kullanıcı alanı programı yazmanız gerekecektir. 'İoremap_nocache ()' kullanmaya gerek yok, sadece 'open', 'read', 'write', 'close' gibi sistem çağrıları yapılıyor. Ve evet, kablosuz modül, verileri kullanıcı alanına maruz bırakmak için '/ dev / nameofdevice' char cihazını kaydetmelidir.
vitorafsr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.