예 : Linux 파일 시스템 장치처럼 자체 RS232 AVR 장치를 노출시키는 방법이 있습니까? /dev/avr_device
? 프로그램은 커널 공간 모듈이나 사용자 공간으로 작성해야합니까? 이게 가능합니까 libfuse
? 어쩌면 장치와 통신 채널로 FIFO 파이프를 사용해야합니까?자신의 RS232 장치를 Linux 파일 시스템 장치로 사용합니다.
답변
당신은 리눅스 파일 시스템을 설치하는 장치를 장착 할 수 있으려면, 당신은 블록 장치로 해당 장치를 필요로하지만, 직렬 tty 장치는 호환되지 않는 문자 장치입니다.
시스템의 클래식보기에서이 문제를 해결하려면 블록 장치 드라이버를 개발해야합니다.이 블록 장치 드라이버는 해당 char 장치 (직렬 포트)에 연결하여 블록 장치 에뮬레이션 프로토콜을 제어하고, 이것은 블록 번호와 블록 데이터를 직렬 라인을 통해 다른 쪽의 수신기로 보내지는 패킷으로 변환하는 것을 의미하며 일종의 저장 장치라는 블록 장치의 세부 사항을 구현합니다. 이것은 약간의 노력으로 할 수 있습니다 .... 문제는 느린 직렬 회선을 사용하여 모든 종류의 저장 공간을 시뮬레이션하는 것입니다.
마지막 접근법의 장점은 블록 장치를 시뮬레이트하기 만하면되며 Linux에서 사용할 수있는 로컬 파일 시스템을 만들 수 있다는 것입니다.
상위 레벨에서는 더 높은 수준의 추상화 (퓨즈가 가능)를 구현하는 파일 시스템 유형을 구현할 수 있지만 모든 파일 시스템 프리미티브를 구현해야하므로 더 어려운 문제가됩니다. 모든 원격 프리미티브를 로컬 프리미티브 집합으로 구현하기 위해 (블록 장치보다 파일 시스템을 에뮬레이트하는 훨씬 더 많은 프리미티브가있다.)
이 두 번째 접근법은 filesystem을 사용하고 작성한 구현 된 프리미티브로 파일에 대해 수행 할 수있는 작업 세트를 완전히 수정합니다. 그것은 훨씬 더 어려우며 일반적으로 나머지 시스템과의 일관성이 부족하므로이 방법을 따르는 것이 좋습니다.
두 번째 방법은 파일 시스템이 고급 기본 요소를 사용하기 때문에 네트워크 메시지에 더 압축되어 더 효율적으로 회선을 통해 전송 될 수 있으므로 느린 연결 속도가 향상됩니다. 그러나 모든 파일 시스템 기능을 구현해야하는 비용과 이러한 종류의 파일 시스템 (사용자 액세스, 보안, 요청 캐싱 등을 구현해야 함)에 대한 일관성을 잃어 버리는 경우가 있습니다.
첫 번째 접근법에서는 4 또는 5 개의 프리미티브 만 구현하면 블록 장치에 설치할 수있는 파일 시스템의 모든 기능을 사용할 수 있습니다.
귀하의 질문에 약간의 의미가 있습니다. 커널은 CPU 및/또는 해당 CPU를 직접 제어하는 컨트롤러 및 주변 장치 용 장치 드라이버 만 가지고 있습니다. * "자체 RS232 AVR 장치"*는 Linux 시스템의 외부에있는 일부 SBC를 가리키는 것으로 보이는데 왜 Linux 커널에 해당 보드 용 드라이버와 장치 노드가 있습니까? BTW 당신은 장치가 파일로 표현 될 수 있다는 측면에 다소 고정되어있는 것처럼 보입니다. – sawdust
충분한 작업이 주어지면 퓨즈를 사용하여이 작업을 수행 할 수 있습니다. 그러나이 작업은 실제로 장치를 파일 시스템으로 모델링해야하고 모든 하드웨어가 그러한 처리의 이점을 얻지 못할 경우에만 정당화 될 수 있습니다. –