Zaimplementowałam urządzenie znakowe i potrzebuję pomocy z funkcją copy_ from_user.Kernel systemu Linux: copy_from_user - struct ze wskazówkami
Mam strukturę:
struct my_struct{
int a;
int *b;
};
zainicjować go w przestrzeni użytkownika i przekazać wskaźnik do my_struct do mojego urządzenia char za pomocą funkcji „Zapisz”. W funkcji "write" funkcji urządzenia Kernel Space rzutuję ją z * char na tego typu strukturę. Przydzielam trochę pamięci dla struct za pomocą komendy kmalloc i do copy_from_user
.
Jest w porządku dla prostego "int a", ale kopiuje tylko wskaźnik (adres) wartości b, nie wartość wskazywaną przez b, więc jestem teraz w Przestrzeni jądra i pracuję ze wskaźnikiem, który wskazuje pamięć przestrzeni użytkownika. Czy jest to niepoprawne i nie powinienem mieć bezpośredniego dostępu do wskaźnika przestrzeni użytkownika i muszę do copy_from_user
każdego wskaźnika w mojej strukturze, a następnie skopiować każdy wskaźnik w funkcji "odczyt" przy użyciu funkcji copy_to_user
?
Chciałbym również zwrócić uwagę, że nie mogę myśleć o żadnych systemach i ioctls, które pobierają struktury ze wskaźnikami w nich. Nawet ci, którzy mają łańcuchy, będą mieli zamiast tablicy tablicę znaków. Fakt, że napisanie kodu dla każdego elementu wskaźnika jest bardzo denerwujące, może mieć z tym coś wspólnego. :-) – asveikau
@asveikau: 'readv()' i 'writev()'? – caf