2014-02-26 2 views
0

디바이스 드라이버에서 ioctl을 통해 구조체를 읽고, 사용자 공간에서 구조체의 값을 변경 한 다음 다시 쓰고 싶습니다. 읽기와 쓰기 사이에서 구조를 변경하는 다른 프로세스없이 원자 적으로 수행 할 수 있습니까?Linux 디바이스 드라이버 atomic GET 다음에 ioctl을 통해 설정하십시오.

호출하기 전에 파일 설명 자 (flock())를 잠글 수 있고 이후에 잠금을 해제 할 수 있습니까? 또는 드라이버에서 내부 잠금 변수를 설정하는 잠금을 구현하고 ioctl 명령의 잠금을 해제 할 수 있습니까? 프로세스가 죽으면 어떻게됩니까? 변수가 어떻게 정리 될 수 있습니까?

같은 효과를 내기 위해 ioctl 대신 sysfs를 사용할 수 있습니까?

답변

0

쉽지는 않지만 잘못된 접근 방법 일 가능성이 큽니다.

대신 "조건부 이동"방식을 사용합니다. 사용자 공간 프로그램을 수정, 현재의 값을 검색 한 다음 조건으로 사용되는 쓰기 IOCTL에 이전 값을 첨부합니다

성공 :

read      -> 5 
write 10 if currently 5  -> okay 

실패 :

read      -> 5 
... someone else changes it ... 
write 10 if currently 5  -> nope 

이런 식으로 커널은 사용자 공간 프로그램이 프로토콜을 따르지 않는 경우 정리해야 할 모든 종류의 상태를 유지할 필요가 없습니다.

관련 문제