2016-12-06 1 views
1

내 ARM 시스템 (Tegra 기반)에서 기본 Linux 커널을 실행하고 있습니다. 그것은 장치 트리 시스템을 사용합니다.Linux 장치 트리 : 장치 파일을 만드는 방법은 무엇입니까?

status = "okay"로 설정하여 .dts 파일에서 SoC의 일부인 일반 메모리 버스 용 하드웨어 드라이버를 활성화했습니다. dtb를 다시 컴파일하고 커널을 부팅했습니다. 그러나 어떤 장치 (/ dev/xx)도 나타나지 않습니다.

드라이버는 커널에 컴파일 및

cat /lib/modules/$(uname -r)/modules.builtin 

명령

cat /sys/firmware/devicetree/base/<path to device>/status 

반환 "괜찮아"볼 수 있습니다.

"mknod"를 만들 필요가 있습니까? 무엇이 다른가?

+1

적절한 드라이버가 커널에 내장되어 있습니까? 아니면 모듈로 빌드되고로드 되었습니까? 나는 실제로 시스템에 업데이트 된 DTB를 설치했다고 가정합니다./sys/firmware/devicetree/base/<장치 경로>/상태를 확인하여 확인할 수 있습니다. – Notlikethat

+0

예 해당 경로 아래에있는 해당 장치의 항목을 모든 속성과 함께 볼 수 있습니다. –

+0

드라이버가 커널에 컴파일되어 있습니다 (모듈 없음). –

답변

0

전통적인 유닉스 "바이트 스트림"장치 모델은 대부분의 현대적인 하드웨어에서 꽤 높은 수준의 추상화이며, 따라서 그들이 제어하는 ​​장치에 대해/dev 항목을 작성하지 않는 많은 드라이버가 있습니다 그 모델에 맞지 않아. 특히 버스 운전사는 그것의 아주 많은 경우입니다. 그것들은 존재하지만, 그것들 뒤에있는 장치를 발견하고 그것에 대한 접근을 허용하기 위해서입니다. 실제 호스트 컨트롤러와 상호 작용할 수있는/dev/sata가 없으며, 연결되어 있는지 여부에 관계없이 모든 이전 포트에서 원시 명령을 전송할 수 있습니다. 존재하지 않을 수도있는 임의의 엔드 포인트로의 임의의 전송을 시도 할 수있는/dev/usb가 없습니다.

이 경우와 같이 일반적인 '외부 인터페이스'컨트롤러는 SATA 또는 USB와 같은 인터페이스보다 덜 복잡합니다. '장치'자체는 종종 일부 클럭 및 칩을 제어하는 ​​레지스터 블록에 불과합니다 - 선택 멀티플렉서. 운전 기사가 직접 상호 작용할 수있는 것을 만들었더라도, 정확히 당신이 할 수있는 것은 많지 않습니다. 입니다.

이 상황을 진행하는 올바른 방법은 GMI 버스의 자식으로 DT에 FPGA 디바이스를 기술하는 것입니다. 정확하게 하드웨어를 반영한 ​​다음 직접 드라이버를 개발하십시오. 버스 운전사는 중간에 투명하게 앉아 있습니다. 그리고 버스 주소를 직접 읽고 쓰는 것만으로 빠르고 쉬운 방법을 원한다면 메모리 매핑 I/O 영역 뒤에 있습니다. 그것이/dev/mem이 존재하는 바로 그 것이다.

+0

FPGA가 연결되어있는 경우 PCIe를 통해 위의 모든 것이 필요하지 않으며 DT/ACPI/etc에 영향을받지 않는 시스템에서 작동합니다. – 0andriy

+1

@Andy True, 그리고 그것은 또한 나의 주요 요점을 보여줍니다 - 당신은 루트 콤플렉스를 시도하기 위해/dev /를 들여다 보지 않을 것입니다 그리고 그것을 원시 버스 주소를 찔러 설득, 당신은 귀하의 VID와 일치하는 드라이버를 작성 : DID와 버스가 그냥 작동 :) – Notlikethat

관련 문제