J'ai implémenté un type de périphérique de caractères et j'ai besoin d'aide avec la fonction copy_ from_user.Noyau Linux: copy_from_user - struct avec des pointeurs
J'ai une structure:
struct my_struct{
int a;
int *b;
};
Je lsinitialisez dans l'espace utilisateur et passer le pointeur à ma_struct sur mon appareil char en utilisant la fonction « d'écriture ». Dans la fonction 'write' du Kernel's Space character, je l'ai transposée d'un caractère * à ce type de structure. J'affecte de la mémoire pour une structure en utilisant kmalloc et y ajoute copy_from_user
. C'est bon pour le simple 'int a', mais il ne copie que le pointeur (adresse) de la valeur b, pas la valeur pointée par b, donc je suis maintenant dans l'espace du noyau et je travaille avec un pointeur qui pointe vers une mémoire d'espace utilisateur. Est-ce incorrect et je ne devrais pas accéder au pointeur de l'espace utilisateur directement et je dois copy_from_user
chaque pointeur unique dans ma structure, puis recopiez chaque pointeur dans la fonction "lire" en utilisant la fonction copy_to_user
?
Je voudrais également souligner que je ne peux pas penser à tout syscalls ou ioctls qui prennent des structs avec des pointeurs en eux. Même ceux qui ont des chaînes auront un tableau de caractères dans la structure à la place. Le fait qu'il soit très ennuyeux d'écrire du code pour faire cela pour chaque membre du pointeur pourrait avoir quelque chose à voir avec ça. :-) – asveikau
@asveikau: 'readv()' et 'writev()'? – caf