3

리눅스 커널에 새로운 장치 드라이버를 쓰려고합니다. 쓰고 자하는 장치는 들어오는 데이터를 다른 컴퓨터로 파이프하는 장치가 될 것입니다. 같은 장치.새로운 리눅스 장치 드라이버 작성하기

그래서 짧은 장치는 읽기/쓰기 권한 및 network.I를 통해 통신한다는 소켓 같은 소리 그러나 당신이

[email protected]$ echo "Hi" >> mydevice 

를 입력하면 있도록 아이디어가 쉘의 인터페이스를 구현하는 것입니다 알게 될 것이다 네트워크의 다른쪽에있는 시스템에 단어 Hi를 전송합니다 (파일에 저장하도록 구성 할 수도 있음).

이 내가 할 의도 여가 시간 프로젝트이며 많은 소켓 및 장치 구현을위한 디자인에 대한 다른 기존의 implementations.Well 질문 같은 소리는 다음과 같습니다

  1. 내가해야 하는가 블록이나 문자 장치를 사용합니까? 블록 장치에서 볼 수있는 이점은 장치를 통해 전체 파일 전송을 시작한 경우 (나중에 지원하는 경향이 있음), 속도가 빨라진다는 점입니다.
  2. 네트워크에 데이터를 쓰려면 어떻게해야합니까? 나는 소켓과 물건에 익숙하지만 커널에서 with 소켓을 사용하면 성능 문제가있다. (모든 소켓이 사용자 공간에서 사용되도록 고안된 후 어딘가에 읽었다.) netfilter 나 다른 것들을 사용할 것인가? 직접적으로 도움이 될 것입니다 :-)? 어떤 혁신이라도 환영합니다.
  3. 사용자 공간 프로그램의 특정 호스트에 연결해야한다는 것을 알려주는 설정 파일과 같은 방법으로 드라이버를 구성하는 방법은 무엇입니까?하지만 드라이버의 연결 설정을 변경하려면 어떻게해야합니까? 어떻게 관리합니까? (sysfs? 솔직히 sysfs 나 proc /와 함께 일한 적이 없다.)
  4. 디자인이 커널 공간에있는 모든 파일 전송을 지정하기 때문에. 커널 공간을 통해 엄청난 양의 데이터를 전송할 때 시스템 속도가 느려 집니까? 디자인이 시스템에 과부하가되어서는 안되며, 미리 작성된 커널로 수행하면 도움이 될 것입니다. 그러나 디자인을 가능한 한 효율적으로 만들기 위해 알아야 할 다른 특성이 있습니다 (최신 Linux 커널에서이 작업을 수행하고 있습니다) ?
  5. 거대한 메모리 임프린트를 남기고 싶지 않으므로 데이터를 전송하는 동안 디스크를 캐싱 할 수있는 방법이 있습니까?
  6. 나는 드라이버를 공동으로 조정할 사용자 공간 프로그램을 설계해야 할 것인가? 나는 운전자가 혼자서 모든 일을 할 수 없으며, 그것은 지루할 것이다.
+0

많은 코드와 문서를 살펴본 후에 Linux의 네트워크 파일 시스템 구현보다 나은 것을 생각하지 못했습니다. 사실상 모든 요구 사항은 이것으로 충분합니다 (커널 공간 부분 일 수도 있지만 nfs가 이와 관련하여 어떻게 작동하는지는 확실하지 않습니다). 그래서 지금은 리눅스에서 char 드라이버를 만드는 결론을 내 렸습니다. 위에서 언급 한 거의 모든 작업을 수행 할 것입니다. 그래서 1 번 질문. – Malice

답변

1

리눅스 커널에서 tun/tap driver을보십시오. 귀하의 요구를 충족시킬 것으로 생각됩니다.

+1

Tun/tap은 넷 장치입니다. 하지만 난 숯불/블록 장치를 만들고 싶었어. 일부 부품은 여전히 ​​적용될 수 있습니다 감사합니다 – Malice

+1

tun/tap은 char 장치 및 네트워크 장치와 같은 사용자 공간을 찾습니다. 따라서 char 디바이스를 통해 tun/tap에 데이터를 쓸 수 있으며 네트워크 패키지처럼 커널 내부의 프로세스가됩니다. 너가 원하는게 아니야? –

관련 문제