2010-03-09 3 views
0

나는 리눅스 디바이스 드라이버 programmring에 다소 익숙하지만, 디버깅 목적으로 파일에 직접 데이터 스트림을 작성하고 싶다. 또는 어쩌면 내가 다른 질문을해야한다 :리눅스 디바이스 드라이버에서 파일로 데이터 스트리밍

나는 하나의 모듈이 데이터 스트림을 제공하는 시스템 온칩을 가지고있다. 모듈은 쓰기 주소로 초기화되어야합니다. 데이터를 메모리에 쓰는 대신 데이터 스트림을 해당 주소로 파일로 리디렉션하고 싶습니다. kernelspace에있는 파일에 기록하는 것이 좋지 않기 때문에 이것은 userspace를 통해서도 가능합니다.

누군가이 방법을 대략적으로 수행 할 수 있습니까?

감사합니다, 스테판

질문에서

답변

0

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

가장 간단한 경우는 읽기 작업을 통해 데이터를 사용자 공간에 반환하는 문자 장치 드라이버를 구현하는 것입니다. 파일에 쓰는 userspace 응용 프로그램은 cat처럼 간단 할 수 있습니다. 모듈은 드라이버가 할당 한 메모리 버퍼에 쓸 것이며, read 메서드는이 버퍼의 데이터를 사용자 공간 버퍼로 복사합니다. 이것은 커널 문서의 DMA-Mapping.txt과 (LDD)의 내용입니다.

데이터 속도가 높으면 (높은 성능은 장치 성능과 관련이 있습니다) 더 복잡한 읽기 작업을 고려해야합니다. read 요청 페이지를 메모리에 잠그고 모듈 해당 페이지에 직접 씁니다. 이것은 더 복잡하며,이 영역의 LDD에있는 문서는 상당히 오래된 것입니다. 커널에서 비디오 캡처 드라이버의 소스를 연구하여이를 이해할 것을 권합니다.

운전자가 더 많은 의사 소통을 할 경우 Netlink을 사용할 수 있습니다.

+0

감사합니다. char 장치로 시작하지만 데이터 스트림이 다소 높기 때문에 더 정교한 것으로 끝날 수도 있습니다. – stefangachter

관련 문제