← Documents Documentation/admin-guide/media/imx6q-sabresd.dot GitHub 원문 ↗

Linux 6.18.37 · Admin guide

i.MX6Q SabreSD 미디어 그래프

i.MX6Q SabreSD의 OV5640 MIPI CSI-2 입력이 두 IPU의 네 CSI와 캡처·전처리 경로로 분기되는 미디어 토폴로지를 설명합니다.

Source pathDocumentation/admin-guide/media/imx6q-sabresd.dot
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

imx6q-sabresd.dot:1-56

i.MX6Q SabreSD의 OV5640 MIPI CSI-2 입력이 두 IPU의 네 CSI와 캡처·전처리 경로로 분기되는 미디어 토폴로지를 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 digraph board {
2 rankdir=TB
3 n00000001 [label="{{<port0> 0} | ipu1_csi0\n/dev/v4l-subdev0 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
4 n00000001:port2 -> n00000005 [style=dashed]
5 n00000001:port1 -> n0000000f:port0 [style=dashed]
6 n00000001:port1 -> n0000000b:port0 [style=dashed]
7 n00000005 [label="ipu1_csi0 capture\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
8 n0000000b [label="{{<port0> 0 | <port1> 1} | ipu1_vdic\n/dev/v4l-subdev1 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
9 n0000000b:port2 -> n0000000f:port0 [style=dashed]
10 n0000000f [label="{{<port0> 0} | ipu1_ic_prp\n/dev/v4l-subdev2 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
11 n0000000f:port1 -> n00000013:port0 [style=dashed]
12 n0000000f:port2 -> n0000001c:port0 [style=dashed]
13 n00000013 [label="{{<port0> 0} | ipu1_ic_prpenc\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
14 n00000013:port1 -> n00000016 [style=dashed]
15 n00000016 [label="ipu1_ic_prpenc capture\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
16 n0000001c [label="{{<port0> 0} | ipu1_ic_prpvf\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
17 n0000001c:port1 -> n0000001f [style=dashed]
18 n0000001f [label="ipu1_ic_prpvf capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
19 n0000002f [label="{{<port0> 0} | ipu1_csi1\n/dev/v4l-subdev5 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
20 n0000002f:port2 -> n00000033 [style=dashed]
21 n0000002f:port1 -> n0000000f:port0 [style=dashed]
22 n0000002f:port1 -> n0000000b:port0 [style=dashed]
23 n00000033 [label="ipu1_csi1 capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
24 n0000003d [label="{{<port0> 0} | ipu2_csi0\n/dev/v4l-subdev6 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
25 n0000003d:port2 -> n00000041 [style=dashed]
26 n0000003d:port1 -> n0000004b:port0 [style=dashed]
27 n0000003d:port1 -> n00000047:port0 [style=dashed]
28 n00000041 [label="ipu2_csi0 capture\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
29 n00000047 [label="{{<port0> 0 | <port1> 1} | ipu2_vdic\n/dev/v4l-subdev7 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
30 n00000047:port2 -> n0000004b:port0 [style=dashed]
31 n0000004b [label="{{<port0> 0} | ipu2_ic_prp\n/dev/v4l-subdev8 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
32 n0000004b:port1 -> n0000004f:port0 [style=dashed]
33 n0000004b:port2 -> n00000058:port0 [style=dashed]
34 n0000004f [label="{{<port0> 0} | ipu2_ic_prpenc\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
35 n0000004f:port1 -> n00000052 [style=dashed]
36 n00000052 [label="ipu2_ic_prpenc capture\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
37 n00000058 [label="{{<port0> 0} | ipu2_ic_prpvf\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
38 n00000058:port1 -> n0000005b [style=dashed]
39 n0000005b [label="ipu2_ic_prpvf capture\n/dev/video6", shape=box, style=filled, fillcolor=yellow]
40 n0000006b [label="{{<port0> 0} | ipu2_csi1\n/dev/v4l-subdev11 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
41 n0000006b:port2 -> n0000006f [style=dashed]
42 n0000006b:port1 -> n0000004b:port0 [style=dashed]
43 n0000006b:port1 -> n00000047:port0 [style=dashed]
44 n0000006f [label="ipu2_csi1 capture\n/dev/video7", shape=box, style=filled, fillcolor=yellow]
45 n00000079 [label="{{<port0> 0} | imx6-mipi-csi2\n/dev/v4l-subdev12 | {<port1> 1 | <port2> 2 | <port3> 3 | <port4> 4}}", shape=Mrecord, style=filled, fillcolor=green]
46 n00000079:port2 -> n0000002f:port0 [style=dashed]
47 n00000079:port3 -> n0000003d:port0 [style=dashed]
48 n00000079:port1 -> n0000007f:port0 [style=dashed]
49 n00000079:port4 -> n00000083:port0 [style=dashed]
50 n0000007f [label="{{<port0> 0 | <port1> 1} | ipu1_csi0_mux\n/dev/v4l-subdev13 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
51 n0000007f:port2 -> n00000001:port0 [style=dashed]
52 n00000083 [label="{{<port0> 0 | <port1> 1} | ipu2_csi1_mux\n/dev/v4l-subdev14 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
53 n00000083:port2 -> n0000006b:port0 [style=dashed]
54 n00000087 [label="{{} | ov5640 1-003c\n/dev/v4l-subdev15 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
55 n00000087:port0 -> n00000079:port0 [style=dashed]
56 }
57

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

OV5640 MIPI CSI-2 입력과 네 CSI 분기

1-56

이 DOT 그래프는 SabreSD 보드의 i.MX6Q V4L2 미디어 토폴로지를 위에서 아래로 배치합니다. 녹색 Mrecord는 포트가 있는 서브디바이스이고 노란 상자는 /dev/video 캡처 노드입니다. 모든 간선은 style=dashed이므로 그래프를 추출한 시점에 비활성화된 선택 가능 링크를 나타냅니다.

두 IPU는 같은 내부 구조를 가집니다. 각 IPU의 CSI0·CSI1은 포트 2에서 직접 캡처 장치로 나가고, 포트 1에서 전처리기 `ic_prp` 또는 디인터레이서 `vdic`로 갈 수 있습니다. `vdic` 출력도 `ic_prp`로 합류하므로 순차 주사 영상은 직접, 인터레이스 영상은 디인터레이스 뒤 같은 전처리 경로를 사용할 수 있습니다.

각 `ic_prp`는 포트 1의 `ic_prpenc` 인코딩 경로와 포트 2의 `ic_prpvf` 뷰파인더 경로로 분기합니다. 두 분기는 각각 별도 `/dev/video` 캡처 노드에 도달합니다. IPU1은 `/dev/video0`부터 `/dev/video3`, IPU2는 `/dev/video4`부터 `/dev/video7`을 제공합니다.

공통 미디어 엔터티 20개
엔터티장치 경로역할
ipu1_csi0/dev/v4l-subdev0IPU1 CSI0, 입력 0·처리 출력 1·직접 캡처 출력 2
ipu1_csi0 capture/dev/video0IPU1 CSI0 직접 캡처
ipu1_vdic/dev/v4l-subdev1IPU1 비디오 디인터레이서, 입력 0·1과 출력 2
ipu1_ic_prp/dev/v4l-subdev2IPU1 전처리기, 인코딩 출력 1과 뷰파인더 출력 2
ipu1_ic_prpenc/dev/v4l-subdev3IPU1 인코딩 전처리 분기
ipu1_ic_prpenc capture/dev/video1IPU1 인코딩 경로 캡처
ipu1_ic_prpvf/dev/v4l-subdev4IPU1 뷰파인더 전처리 분기
ipu1_ic_prpvf capture/dev/video2IPU1 뷰파인더 경로 캡처
ipu1_csi1/dev/v4l-subdev5IPU1 CSI1, 직접 캡처와 공통 처리 경로 제공
ipu1_csi1 capture/dev/video3IPU1 CSI1 직접 캡처
ipu2_csi0/dev/v4l-subdev6IPU2 CSI0, 직접 캡처와 공통 처리 경로 제공
ipu2_csi0 capture/dev/video4IPU2 CSI0 직접 캡처
ipu2_vdic/dev/v4l-subdev7IPU2 비디오 디인터레이서, 입력 0·1과 출력 2
ipu2_ic_prp/dev/v4l-subdev8IPU2 전처리기, 인코딩 출력 1과 뷰파인더 출력 2
ipu2_ic_prpenc/dev/v4l-subdev9IPU2 인코딩 전처리 분기
ipu2_ic_prpenc capture/dev/video5IPU2 인코딩 경로 캡처
ipu2_ic_prpvf/dev/v4l-subdev10IPU2 뷰파인더 전처리 분기
ipu2_ic_prpvf capture/dev/video6IPU2 뷰파인더 경로 캡처
ipu2_csi1/dev/v4l-subdev11IPU2 CSI1, 직접 캡처와 공통 처리 경로 제공
ipu2_csi1 capture/dev/video7IPU2 CSI1 직접 캡처

두 보드 그래프가 공유하는 IPU1·IPU2 서브디바이스와 캡처 노드입니다.

공통 IPU 내부 링크 22개
출발도착경로 의미
ipu1_csi0:port2ipu1_csi0 capture직접 캡처
ipu1_csi0:port1ipu1_ic_prp:port0전처리기로 직접 입력
ipu1_csi0:port1ipu1_vdic:port0디인터레이서 입력
ipu1_csi1:port2ipu1_csi1 capture직접 캡처
ipu1_csi1:port1ipu1_ic_prp:port0전처리기로 직접 입력
ipu1_csi1:port1ipu1_vdic:port0디인터레이서 입력
ipu1_vdic:port2ipu1_ic_prp:port0디인터레이스 뒤 전처리
ipu1_ic_prp:port1ipu1_ic_prpenc:port0인코딩 분기
ipu1_ic_prp:port2ipu1_ic_prpvf:port0뷰파인더 분기
ipu1_ic_prpenc:port1ipu1_ic_prpenc capture인코딩 캡처
ipu1_ic_prpvf:port1ipu1_ic_prpvf capture뷰파인더 캡처
ipu2_csi0:port2ipu2_csi0 capture직접 캡처
ipu2_csi0:port1ipu2_ic_prp:port0전처리기로 직접 입력
ipu2_csi0:port1ipu2_vdic:port0디인터레이서 입력
ipu2_csi1:port2ipu2_csi1 capture직접 캡처
ipu2_csi1:port1ipu2_ic_prp:port0전처리기로 직접 입력
ipu2_csi1:port1ipu2_vdic:port0디인터레이서 입력
ipu2_vdic:port2ipu2_ic_prp:port0디인터레이스 뒤 전처리
ipu2_ic_prp:port1ipu2_ic_prpenc:port0인코딩 분기
ipu2_ic_prp:port2ipu2_ic_prpvf:port0뷰파인더 분기
ipu2_ic_prpenc:port1ipu2_ic_prpenc capture인코딩 캡처
ipu2_ic_prpvf:port1ipu2_ic_prpvf capture뷰파인더 캡처

두 CSI의 직접 캡처와 VDIC·PRP·인코딩·뷰파인더 분기를 모두 나열합니다. 원문에서는 전부 dashed입니다.

공통 IPU 처리 선택
CSI0 또는 CSI1 : port2직접 capture /dev/videoN
CSI0 또는 CSI1 : port1ic_prp : port0prpenc인코딩 capture
CSI0 또는 CSI1 : port1vdic : port0vdic : port2ic_prp : port0prpvf뷰파인더 capture

각 CSI 입력이 직접 캡처 또는 전처리 분기로 이동하는 대표 경로입니다.

SabreSD 고유 입력은 카메라 센서 `ov5640 1-003c`(`/dev/v4l-subdev15`)입니다. 센서 포트 0은 `imx6-mipi-csi2`(`/dev/v4l-subdev12`) 입력 포트 0에 연결됩니다. MIPI CSI-2 수신기는 네 출력 포트를 통해 IPU1 CSI0·CSI1과 IPU2 CSI0·CSI1에 도달할 수 있도록 분기합니다.

MIPI 포트 1은 `ipu1_csi0_mux`(`/dev/v4l-subdev13`) 포트 0으로 들어가 mux 포트 2에서 `ipu1_csi0` 포트 0으로 나갑니다. 포트 2는 `ipu1_csi1` 포트 0에 직접 연결됩니다. 포트 3은 `ipu2_csi0` 포트 0에 직접 연결되고, 포트 4는 `ipu2_csi1_mux`(`/dev/v4l-subdev14`) 포트 0을 거쳐 `ipu2_csi1` 포트 0으로 이어집니다.

SabreSD OV5640 입력 분기
ov5640 1-003c : port0imx6-mipi-csi2 : port0
MIPI : port1ipu1_csi0_mux : port0→port2ipu1_csi0 : port0
MIPI : port2ipu1_csi1 : port0
MIPI : port3ipu2_csi0 : port0
MIPI : port4ipu2_csi1_mux : port0→port2ipu2_csi1 : port0

하나의 MIPI CSI-2 입력이 두 IPU의 네 CSI 인터페이스로 갈 수 있는 보드 고유 경로입니다.

SabreSD 고유 엔터티 4개
엔터티장치 경로포트 역할
ov5640 1-003c/dev/v4l-subdev15카메라 센서 출력 port0
imx6-mipi-csi2/dev/v4l-subdev12입력 port0, 출력 port1·2·3·4
ipu1_csi0_mux/dev/v4l-subdev13입력 port0·1, 출력 port2
ipu2_csi1_mux/dev/v4l-subdev14입력 port0·1, 출력 port2

공통 IPU 그래프에 추가되는 센서, MIPI 수신기와 두 mux입니다.

SabreSD 고유 링크 7개
출발도착의미
ov5640:port0imx6-mipi-csi2:port0센서의 MIPI 입력
imx6-mipi-csi2:port1ipu1_csi0_mux:port0IPU1 CSI0 mux 입력
ipu1_csi0_mux:port2ipu1_csi0:port0IPU1 CSI0 선택 출력
imx6-mipi-csi2:port2ipu1_csi1:port0IPU1 CSI1 직접 입력
imx6-mipi-csi2:port3ipu2_csi0:port0IPU2 CSI0 직접 입력
imx6-mipi-csi2:port4ipu2_csi1_mux:port0IPU2 CSI1 mux 입력
ipu2_csi1_mux:port2ipu2_csi1:port0IPU2 CSI1 선택 출력

OV5640에서 네 CSI 입력으로 분기하는 점선 링크를 모두 나열합니다.

digraph board {
        rankdir=TB
        n00000001 [label="{{<port0> 0} | ipu1_csi0\n/dev/v4l-subdev0 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000001:port2 -> n00000005 [style=dashed]
        n00000001:port1 -> n0000000f:port0 [style=dashed]
        n00000001:port1 -> n0000000b:port0 [style=dashed]
        n00000005 [label="ipu1_csi0 capture\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
        n0000000b [label="{{<port0> 0 | <port1> 1} | ipu1_vdic\n/dev/v4l-subdev1 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000000b:port2 -> n0000000f:port0 [style=dashed]
        n0000000f [label="{{<port0> 0} | ipu1_ic_prp\n/dev/v4l-subdev2 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000000f:port1 -> n00000013:port0 [style=dashed]
        n0000000f:port2 -> n0000001c:port0 [style=dashed]
        n00000013 [label="{{<port0> 0} | ipu1_ic_prpenc\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000013:port1 -> n00000016 [style=dashed]
        n00000016 [label="ipu1_ic_prpenc capture\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
        n0000001c [label="{{<port0> 0} | ipu1_ic_prpvf\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000001c:port1 -> n0000001f [style=dashed]
        n0000001f [label="ipu1_ic_prpvf capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
        n0000002f [label="{{<port0> 0} | ipu1_csi1\n/dev/v4l-subdev5 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000002f:port2 -> n00000033 [style=dashed]
        n0000002f:port1 -> n0000000f:port0 [style=dashed]
        n0000002f:port1 -> n0000000b:port0 [style=dashed]
        n00000033 [label="ipu1_csi1 capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
        n0000003d [label="{{<port0> 0} | ipu2_csi0\n/dev/v4l-subdev6 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000003d:port2 -> n00000041 [style=dashed]
        n0000003d:port1 -> n0000004b:port0 [style=dashed]
        n0000003d:port1 -> n00000047:port0 [style=dashed]
        n00000041 [label="ipu2_csi0 capture\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
        n00000047 [label="{{<port0> 0 | <port1> 1} | ipu2_vdic\n/dev/v4l-subdev7 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000047:port2 -> n0000004b:port0 [style=dashed]
        n0000004b [label="{{<port0> 0} | ipu2_ic_prp\n/dev/v4l-subdev8 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000004b:port1 -> n0000004f:port0 [style=dashed]
        n0000004b:port2 -> n00000058:port0 [style=dashed]
        n0000004f [label="{{<port0> 0} | ipu2_ic_prpenc\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000004f:port1 -> n00000052 [style=dashed]
        n00000052 [label="ipu2_ic_prpenc capture\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
        n00000058 [label="{{<port0> 0} | ipu2_ic_prpvf\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000058:port1 -> n0000005b [style=dashed]
        n0000005b [label="ipu2_ic_prpvf capture\n/dev/video6", shape=box, style=filled, fillcolor=yellow]
        n0000006b [label="{{<port0> 0} | ipu2_csi1\n/dev/v4l-subdev11 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000006b:port2 -> n0000006f [style=dashed]
        n0000006b:port1 -> n0000004b:port0 [style=dashed]
        n0000006b:port1 -> n00000047:port0 [style=dashed]
        n0000006f [label="ipu2_csi1 capture\n/dev/video7", shape=box, style=filled, fillcolor=yellow]
        n00000079 [label="{{<port0> 0} | imx6-mipi-csi2\n/dev/v4l-subdev12 | {<port1> 1 | <port2> 2 | <port3> 3 | <port4> 4}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000079:port2 -> n0000002f:port0 [style=dashed]
        n00000079:port3 -> n0000003d:port0 [style=dashed]
        n00000079:port1 -> n0000007f:port0 [style=dashed]
        n00000079:port4 -> n00000083:port0 [style=dashed]
        n0000007f [label="{{<port0> 0 | <port1> 1} | ipu1_csi0_mux\n/dev/v4l-subdev13 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n0000007f:port2 -> n00000001:port0 [style=dashed]
        n00000083 [label="{{<port0> 0 | <port1> 1} | ipu2_csi1_mux\n/dev/v4l-subdev14 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000083:port2 -> n0000006b:port0 [style=dashed]
        n00000087 [label="{{} | ov5640 1-003c\n/dev/v4l-subdev15 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
        n00000087:port0 -> n00000079:port0 [style=dashed]
}