나는 어떤 종류의 문자 장치를 구현했으며 copy_ from_user 함수에 대한 도움이 필요하다. 나는 사용자 공간에서 초기화와 '쓰기'기능을 사용하여 내 문자 장치에 my_struct하는 포인터를 전달리눅스 커널 : copy_from_user - 포인터로 구조체
struct my_struct{
int a;
int *b;
};
:
나는 구조를했습니다. 커널의 공간 문자 장치 '쓰기'기능에서 나는이 문자를 * char로부터 이런 종류의 구조로 캐스팅합니다. 내가 kmalloc을 사용하여 구조체에 대한 일부 메모리를 할당하고 그것에 copy_from_user
마십시오.
단순한 'int a'는 괜찮지 만 b가 가리키는 값이 아닌 b 값의 포인터 (주소) 만 복사하므로 커널 공간에 있고 포인터를 가리키는 포인터로 작업하고 있습니다. 사용자 공간 메모리. 이 잘못된이며 사용자 공간 포인터를 직접 액세스해야합니다 및 내 구조체에있는 모든 단일 포인터 copy_from_user
다음 "read"함수 copy_to_user
함수를 사용하여 모든 포인터를 다시 복사해야합니까?
또한 포인터가있는 구조체를 사용하는 syscalls 또는 ioctls를 생각할 수 없다는 것을 지적합니다. 문자열이있는 경우에도 구조체에 char 배열이 대신 있습니다. 모든 포인터 멤버에 대해이 작업을 수행하는 코드를 작성하는 것이 매우 귀찮습니다. :-) – asveikau
@asveikau :'readv()'와'writev()'? – caf