Dostęp do pamięci modułu jądra


9

Czy dwa różne moduły jądra mogą uzyskać dostęp do tego samego obszaru pamięci po wywołaniu funkcji ioremap_nocache ()?

Mam sterownik bezprzewodowy i oddzielny moduł. Chciałbym, aby osobny moduł profilował wartości hałasu na karcie, podczas gdy sterownik nadal działa. Stąd moje pytanie powyżej.

Jedną z dróg, które zbadałem, było uruchomienie wątku jądra od sterownika, a następnie zaimplementowałem semafor, aby zapobiec warunkom wyścigu wynikającym z jednoczesnego odczytu / zapisu w tej samej przestrzeni adresowej. Miałem nadzieję, że wątek potomny będzie mógł uzyskać dostęp do tego samego obszaru pamięci.

Niestety nie zadziałało to tak, jak się spodziewałem. Byłbym wdzięczny za wszelkie sugestie.


Dlaczego potrzebujesz modułu jądra do profilowania wartości hałasu?
gertvdijk

Dzięki za pytanie, sterownik bezprzewodowy jest bardzo złożony, a zmiana częstotliwości jego kalibracji może wywołać niezamierzone wyniki. Musiałbym to zrobić, ponieważ wykonuje kalibracje tylko dla interwałów, które są o wiele za długie jak na moje potrzeby. Ponieważ wiem dokładnie, jak profilować urządzenie w osobnym module, jestem ciekawy, czy mogę uzyskać dostęp do tego samego obszaru pamięci, z którym pracuje sterownik.
Radagasp

2
Proszę edytować swoje pytanie zawierać wszystkie szczegóły na temat swoich poprzednich prób / podejść. Tak działa ta strona. To nie jest forum dyskusyjne, ale strona z pytaniami i odpowiedziami, rozumiesz?
gertvdijk

Dyskusja może zawierać pytania i odpowiedzi, niektóre dobre, a inne błędne - wydaje się, że interpretacja zasad przez administratorów należy do prowincji semantyki. Oczywiście zaktualizowałem swoje pytanie.
Radagasp

Odpowiedzi:


7

Przypuszczam, że zamierzasz wdrożyć inny moduł jądra, ponieważ uważasz, że łatwiej jest udostępniać dane między modułami jądra. Ale może nie jest to dobry wybór. Jeśli możliwe jest „profilowanie hałasu” w przestrzeni użytkownika, myślę, że lepszym rozwiązaniem jest wdrożenie „profilera” w przestrzeni użytkownika.

W tym rozwiązaniu profiler przestrzeni użytkownika odczytuje dane, wykonuje pewne obliczenia, a następnie przesyła wynik.

Jeśli to rozwiązanie jest prawidłowe, wdrożenie jest następujące.

W module jądra wystarczy zarejestrować urządzenie char w „/ proc” i zaimplementować operacje podstawowe „odczyt” i „zapis”. W przestrzeni użytkownika wystarczy zaimplementować profiler, odczytywać i zapisywać na urządzeniu char. Szczegóły i informacje dotyczące tego wdrożenia są tutaj .


Nie sądzę, że dostaję twoją odpowiedź ... tak jak ją rozumiem, nadal musiałbym napisać moduł, a ten moduł próbowałby uzyskać dostęp do tego samego obszaru pamięci z wywołania ioremap_nocache (), co drugi moduł używa. A może mówisz, że rejestruję urządzenie char w module bezprzewodowym
Radagasp

1
Racja, musisz wdrożyć oprogramowanie, ale nie moduł. Będziesz musiał napisać zwykły program użytkownika, prostszy niż moduł, który czyta z „/ dev / nameofdevice” i zapisuje w nim. Nie trzeba używać „ioremap_nocache ()”, po prostu syscalls jako „open”, „read”, „write”, „close”. I tak, moduł bezprzewodowy będzie musiał zarejestrować wewnątrz urządzenia char / „dev / nameofdevice”, aby udostępnić dane użytkownikom.
vitorafsr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.