문제

Linux 장치 드라이버 프로그램을 처음 접했지만 디버깅 목적으로 파일에 직접 데이터 스트림을 작성하고 싶습니다. 아니면 질문을 다르게 행동해야 할 수도 있습니다.

하나의 모듈이 데이터 스트림을 제공하는 시스템 온 칩이 있습니다. 모듈은 쓰기 주소로 시작해야합니다. 데이터를 메모리에 작성하는 대신 해당 주소로 데이터 스트림을 파일로 리디렉션하고 싶습니다. Kernelspace에 파일에 쓰기는 권장되지 않기 때문에 사용자 공간을 통해 수행 할 수도 있습니다.

누군가이 작업을 수행하는 방법에 대략 스케치 할 수 있습니까?

감사합니다, 스테판

도움이 되었습니까?

해결책

귀하의 질문에서, 나는 이것이 메모리 버퍼에 직접 쓰는 하드웨어 모듈이라고 가정합니다. 파일로가는 길에 항상 중간 메모리 버퍼가 필요하지만 장치 드라이버에서이를 관리하는 몇 가지 방법이 있습니다.

가장 간단한 사례는 읽기 작업을 통해 데이터를 사용자 공간으로 반환하는 문자 장치 드라이버를 구현하는 것입니다. 파일에 쓰는 사용자 공간 응용 프로그램은 cat. 모듈은 드라이버가 할당 한 메모리 버퍼에 기록됩니다. read 메소드는이 버퍼에서 사용자 공간 버퍼로 데이터를 복사합니다. 이것은 다음과 같습니다 DMA-Mapping.txt 커널 문서 및 IN에서 리눅스 장치 드라이버 (LDD).

데이터 속도가 높으면 (높은 경우 장치의 성능과 관련이있는 경우) 더 고급 읽기 작업을 고려해야합니다. read 메모리에 요청하면 모듈은 해당 페이지에 직접 씁니다. 이것은 더 복잡 하고이 분야의 LDD 문서는 상당히 오래되었습니다. 나는 이것을 이해하기 위해 커널의 비디오 캡처 드라이버의 소스를 연구하는 것이 좋습니다.

운전자가 수행 할 더 많은 종류의 커뮤니케이션이 있으면 사용하고 싶을 수도 있습니다. 넷 링크.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top