리눅스 커널에 새로운 장치 드라이버를 쓰려고합니다. 쓰고 자하는 장치는 들어오는 데이터를 다른 컴퓨터로 파이프하는 장치가 될 것입니다. 같은 장치.새로운 리눅스 장치 드라이버 작성하기
그래서 짧은 장치는 읽기/쓰기 권한 및 network.I를 통해 통신한다는 소켓 같은 소리 그러나 당신이
[email protected]$ echo "Hi" >> mydevice
를 입력하면 있도록 아이디어가 쉘의 인터페이스를 구현하는 것입니다 알게 될 것이다 네트워크의 다른쪽에있는 시스템에 단어 Hi를 전송합니다 (파일에 저장하도록 구성 할 수도 있음).
이 내가 할 의도 여가 시간 프로젝트이며 많은 소켓 및 장치 구현을위한 디자인에 대한 다른 기존의 implementations.Well 질문 같은 소리는 다음과 같습니다
- 내가해야 하는가 블록이나 문자 장치를 사용합니까? 블록 장치에서 볼 수있는 이점은 장치를 통해 전체 파일 전송을 시작한 경우 (나중에 지원하는 경향이 있음), 속도가 빨라진다는 점입니다.
- 네트워크에 데이터를 쓰려면 어떻게해야합니까? 나는 소켓과 물건에 익숙하지만 커널에서 with 소켓을 사용하면 성능 문제가있다. (모든 소켓이 사용자 공간에서 사용되도록 고안된 후 어딘가에 읽었다.) netfilter 나 다른 것들을 사용할 것인가? 직접적으로 도움이 될 것입니다 :-)? 어떤 혁신이라도 환영합니다.
- 사용자 공간 프로그램의 특정 호스트에 연결해야한다는 것을 알려주는 설정 파일과 같은 방법으로 드라이버를 구성하는 방법은 무엇입니까?하지만 드라이버의 연결 설정을 변경하려면 어떻게해야합니까? 어떻게 관리합니까? (sysfs? 솔직히 sysfs 나 proc /와 함께 일한 적이 없다.)
- 디자인이 커널 공간에있는 모든 파일 전송을 지정하기 때문에. 커널 공간을 통해 엄청난 양의 데이터를 전송할 때 시스템 속도가 느려 집니까? 디자인이 시스템에 과부하가되어서는 안되며, 미리 작성된 커널로 수행하면 도움이 될 것입니다. 그러나 디자인을 가능한 한 효율적으로 만들기 위해 알아야 할 다른 특성이 있습니다 (최신 Linux 커널에서이 작업을 수행하고 있습니다) ?
- 거대한 메모리 임프린트를 남기고 싶지 않으므로 데이터를 전송하는 동안 디스크를 캐싱 할 수있는 방법이 있습니까?
- 나는 드라이버를 공동으로 조정할 사용자 공간 프로그램을 설계해야 할 것인가? 나는 운전자가 혼자서 모든 일을 할 수 없으며, 그것은 지루할 것이다.
많은 코드와 문서를 살펴본 후에 Linux의 네트워크 파일 시스템 구현보다 나은 것을 생각하지 못했습니다. 사실상 모든 요구 사항은 이것으로 충분합니다 (커널 공간 부분 일 수도 있지만 nfs가 이와 관련하여 어떻게 작동하는지는 확실하지 않습니다). 그래서 지금은 리눅스에서 char 드라이버를 만드는 결론을 내 렸습니다. 위에서 언급 한 거의 모든 작업을 수행 할 것입니다. 그래서 1 번 질문. – Malice