내 자신의 파일 설명자를 구현하는 방법은 무엇입니까? 일부 하드웨어를 제어하는 커널 모듈이 있고이 하드웨어와 통신 할 수있는 기능을 read() 및 write()를 통해 사용자 공간에 노출하고 싶다고 말하고 싶습니다. IOCTL 또는 netlink 또는 다른 userspace-kernelspace 메소드를 사용하고 싶지는 않습니다. 커널을 다시 컴파일해야할까요, 아니면 그냥 커널 모듈을 작성해서 할 수 있습니까?파일 설명 자 구현
필자는 파일 디스크립터를 생성하려면 커널 파일에 구조체 파일 (open(), eventfd(), timerfd(), socket()에 해당하는 항목을 생성하도록 커널 공간에 알리는 메커니즘이 필요하다는 것을 알고 있습니다)). IOCTL을 통해 (커널을 다시 컴파일 할 필요가 없도록) IOCTL을 구현할 수는 있지만, 전에 LD_PRELOAD를 사용하여 패치를 적용한 방법은 read() 및 write()를 해킹하는 방법입니까? 커널을 다시 컴파일하고 싶지는 마십시오!
@ konrad.kruczynski & John. 답변 해 주셔서 감사합니다. 현재 character device/ioctl은 userspace와 kernelspace 사이의 통신을 구현 한 방법입니다. ioctl을 사용하여 데이터 구조에 대한 포인터를 KS로 전달하고 커널 측 모듈이 해당 구조체에서 데이터를 추출합니다. 하지만 것은 select()를 사용할 수있는 사용자 공간에 엔티티가 필요합니다. 커널 측면에서 이벤트가 발생하면 미국에 신호를 보내는 방법이 필요합니다. 나는 미국에 신호를 보내는 다른 방법이 있지만 미국이 select()를 사용하여 기다릴 수있는 방법이 있는지 알고있다. 문자 장치로 select()를 사용할 수 있습니까? – lithiumhead
폴 apis를 사용하는 커널이 실제로 가능합니다. linux/poll.h를 보라. 요청이 사용자 공간에서 왔을 때 waitqueue에 추가하고 드라이버의 데이터가 있다면 깨운다. 커널 소스의 drivers/char/폴더에서 wake_up_interruptible을 검색하십시오. 이것은 결국 기다리는 중 CPU 사용량을 줄임으로써 드라이버를 향상시킵니다 ... – John