요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
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]
}
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`을 제공합니다.
두 보드 그래프가 공유하는 IPU1·IPU2 서브디바이스와 캡처 노드입니다.
두 CSI의 직접 캡처와 VDIC·PRP·인코딩·뷰파인더 분기를 모두 나열합니다. 원문에서는 전부 dashed입니다.
각 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으로 이어집니다.
하나의 MIPI CSI-2 입력이 두 IPU의 네 CSI 인터페이스로 갈 수 있는 보드 고유 경로입니다.
공통 IPU 그래프에 추가되는 센서, MIPI 수신기와 두 mux입니다.
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]
}
요약·해설
imx6q-sabresd.dot:1-56i.MX6Q SabreSD의 OV5640 MIPI CSI-2 입력이 두 IPU의 네 CSI와 캡처·전처리 경로로 분기되는 미디어 토폴로지를 설명합니다.