요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
# SPDX-License-Identifier: GPL-2.0
digraph board {
rankdir=TB
n00000001 [label="{{<port0> 0} | msm_csiphy0\n/dev/v4l-subdev0 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000001:port1 -> n0000000a:port0 [style=dashed]
n00000001:port1 -> n0000000d:port0 [style=dashed]
n00000001:port1 -> n00000010:port0 [style=dashed]
n00000001:port1 -> n00000013:port0 [style=dashed]
n00000004 [label="{{<port0> 0} | msm_csiphy1\n/dev/v4l-subdev1 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000004:port1 -> n0000000a:port0 [style=dashed]
n00000004:port1 -> n0000000d:port0 [style=dashed]
n00000004:port1 -> n00000010:port0 [style=dashed]
n00000004:port1 -> n00000013:port0 [style=dashed]
n00000007 [label="{{<port0> 0} | msm_csiphy2\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000007:port1 -> n0000000a:port0 [style=dashed]
n00000007:port1 -> n0000000d:port0 [style=dashed]
n00000007:port1 -> n00000010:port0 [style=dashed]
n00000007:port1 -> n00000013:port0 [style=dashed]
n0000000a [label="{{<port0> 0} | msm_csid0\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000000a:port1 -> n00000016:port0 [style=dashed]
n0000000a:port1 -> n00000019:port0 [style=dashed]
n0000000a:port1 -> n0000001c:port0 [style=dashed]
n0000000a:port1 -> n0000001f:port0 [style=dashed]
n0000000d [label="{{<port0> 0} | msm_csid1\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000000d:port1 -> n00000016:port0 [style=dashed]
n0000000d:port1 -> n00000019:port0 [style=dashed]
n0000000d:port1 -> n0000001c:port0 [style=dashed]
n0000000d:port1 -> n0000001f:port0 [style=dashed]
n00000010 [label="{{<port0> 0} | msm_csid2\n/dev/v4l-subdev5 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000010:port1 -> n00000016:port0 [style=dashed]
n00000010:port1 -> n00000019:port0 [style=dashed]
n00000010:port1 -> n0000001c:port0 [style=dashed]
n00000010:port1 -> n0000001f:port0 [style=dashed]
n00000013 [label="{{<port0> 0} | msm_csid3\n/dev/v4l-subdev6 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000013:port1 -> n00000016:port0 [style=dashed]
n00000013:port1 -> n00000019:port0 [style=dashed]
n00000013:port1 -> n0000001c:port0 [style=dashed]
n00000013:port1 -> n0000001f:port0 [style=dashed]
n00000016 [label="{{<port0> 0} | msm_ispif0\n/dev/v4l-subdev7 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000016:port1 -> n00000022:port0 [style=dashed]
n00000016:port1 -> n0000002b:port0 [style=dashed]
n00000016:port1 -> n00000034:port0 [style=dashed]
n00000016:port1 -> n0000003d:port0 [style=dashed]
n00000016:port1 -> n00000046:port0 [style=dashed]
n00000016:port1 -> n0000004f:port0 [style=dashed]
n00000016:port1 -> n00000058:port0 [style=dashed]
n00000016:port1 -> n00000061:port0 [style=dashed]
n00000019 [label="{{<port0> 0} | msm_ispif1\n/dev/v4l-subdev8 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000019:port1 -> n00000022:port0 [style=dashed]
n00000019:port1 -> n0000002b:port0 [style=dashed]
n00000019:port1 -> n00000034:port0 [style=dashed]
n00000019:port1 -> n0000003d:port0 [style=dashed]
n00000019:port1 -> n00000046:port0 [style=dashed]
n00000019:port1 -> n0000004f:port0 [style=dashed]
n00000019:port1 -> n00000058:port0 [style=dashed]
n00000019:port1 -> n00000061:port0 [style=dashed]
n0000001c [label="{{<port0> 0} | msm_ispif2\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000001c:port1 -> n00000022:port0 [style=dashed]
n0000001c:port1 -> n0000002b:port0 [style=dashed]
n0000001c:port1 -> n00000034:port0 [style=dashed]
n0000001c:port1 -> n0000003d:port0 [style=dashed]
n0000001c:port1 -> n00000046:port0 [style=dashed]
n0000001c:port1 -> n0000004f:port0 [style=dashed]
n0000001c:port1 -> n00000058:port0 [style=dashed]
n0000001c:port1 -> n00000061:port0 [style=dashed]
n0000001f [label="{{<port0> 0} | msm_ispif3\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000001f:port1 -> n00000022:port0 [style=dashed]
n0000001f:port1 -> n0000002b:port0 [style=dashed]
n0000001f:port1 -> n00000034:port0 [style=dashed]
n0000001f:port1 -> n0000003d:port0 [style=dashed]
n0000001f:port1 -> n00000046:port0 [style=dashed]
n0000001f:port1 -> n0000004f:port0 [style=dashed]
n0000001f:port1 -> n00000058:port0 [style=dashed]
n0000001f:port1 -> n00000061:port0 [style=dashed]
n00000022 [label="{{<port0> 0} | msm_vfe0_rdi0\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000022:port1 -> n00000025 [style=bold]
n00000025 [label="msm_vfe0_video0\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
n0000002b [label="{{<port0> 0} | msm_vfe0_rdi1\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000002b:port1 -> n0000002e [style=bold]
n0000002e [label="msm_vfe0_video1\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
n00000034 [label="{{<port0> 0} | msm_vfe0_rdi2\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000034:port1 -> n00000037 [style=bold]
n00000037 [label="msm_vfe0_video2\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
n0000003d [label="{{<port0> 0} | msm_vfe0_pix\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000003d:port1 -> n00000040 [style=bold]
n00000040 [label="msm_vfe0_video3\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
n00000046 [label="{{<port0> 0} | msm_vfe1_rdi0\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000046:port1 -> n00000049 [style=bold]
n00000049 [label="msm_vfe1_video0\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
n0000004f [label="{{<port0> 0} | msm_vfe1_rdi1\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000004f:port1 -> n00000052 [style=bold]
n00000052 [label="msm_vfe1_video1\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
n00000058 [label="{{<port0> 0} | msm_vfe1_rdi2\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000058:port1 -> n0000005b [style=bold]
n0000005b [label="msm_vfe1_video2\n/dev/video6", shape=box, style=filled, fillcolor=yellow]
n00000061 [label="{{<port0> 0} | msm_vfe1_pix\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000061:port1 -> n00000064 [style=bold]
n00000064 [label="msm_vfe1_video3\n/dev/video7", shape=box, style=filled, fillcolor=yellow]
n000000e2 [label="{{} | ov5645 3-0039\n/dev/v4l-subdev19 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n000000e2:port0 -> n00000004:port0 [style=bold]
n000000e4 [label="{{} | ov5645 3-003a\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n000000e4:port0 -> n00000007:port0 [style=bold]
n000000e6 [label="{{} | ov5645 3-003b\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n000000e6:port0 -> n00000001:port0 [style=bold]
}
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
OV5645 센서에서 VFE 비디오 노드까지의 전체 연결 구조
1-106이 Graphviz DOT 원문은 Qualcomm 8x96 Camera Subsystem(CAMSS)의 V4L2 미디어 토폴로지를 위에서 아래로 배치합니다. 세 개의 `ov5645` 센서가 세 `msm_csiphy` 입력에 연결되고, 내부에서는 3개 CSIPHY, 4개 CSID, 4개 ISPIF, 8개 VFE 처리 엔티티를 선택적으로 조합한 뒤 `/dev/video0`부터 `/dev/video7`까지의 캡처 노드로 출력합니다.
초록색 `Mrecord` 노드는 패드가 있는 V4L2 서브디바이스입니다. 왼쪽 또는 위쪽의 `port0`은 싱크 입력 패드이고 오른쪽 또는 아래쪽의 `port1`은 소스 출력 패드입니다. 노란색 상자는 최종 비디오 캡처 장치입니다. `rankdir=TB`는 그래프 흐름을 위에서 아래 방향으로 배치하라는 Graphviz 지시입니다.
원문의 `style=dashed` 링크 60개는 토폴로지가 제공하는 내부 선택 후보를 나타내고, `style=bold` 링크 11개는 센서와 CSIPHY 사이 3개 및 각 VFE 출력과 비디오 노드 사이 8개의 굵은 연결을 나타냅니다. 이 문서는 선 모양을 그대로 보존하여 설명하며, 특정 실행 시점의 스트림 형식이나 라우팅 설정을 DOT 파일만으로 추가 추정하지 않습니다.
세 센서 중 하나의 입력이 내부 교차 연결 단계를 지나 두 VFE 블록의 RDI 또는 PIX 출력으로 전달되는 계층입니다.
원문 100-105줄의 세 굵은 링크를 센서 주소, 장치 경로, 패드와 CSIPHY 목적지별로 정리합니다.
각 CSIPHY의 출력 port1은 네 CSID의 입력 port0 모두에 점선 후보 링크를 가집니다. 따라서 이 단계에는 3 x 4 = 12개 링크가 있습니다.
각 CSID의 출력 port1은 네 ISPIF 입력 모두에 연결 후보를 제공합니다. 이 단계에는 4 x 4 = 16개 점선 링크가 있습니다.
각 ISPIF 출력은 VFE0과 VFE1의 RDI0, RDI1, RDI2, PIX 입력 전체에 도달할 수 있습니다. 이 단계에는 4 x 8 = 32개 점선 링크가 있습니다.
각 VFE 서브디바이스의 port1은 하나의 노란색 비디오 캡처 노드와 굵은 링크로 연결됩니다.
106줄 DOT 원문에서 검출하고 감사 도구가 고정하는 구조 수량입니다.
노드 계층과 링크 행렬이 나타나는 원문 범위를 구분합니다.
아래 코드는 Linux v6.18.37 원문 1-106줄 전체입니다. 탭은 표시 안정성을 위해 여덟 칸으로 정규화했지만 노드 ID, 엔티티명, `/dev` 경로, 패드 번호, 링크 방향, `dashed`와 `bold` 스타일은 바꾸지 않았습니다.
# SPDX-License-Identifier: GPL-2.0
digraph board {
rankdir=TB
n00000001 [label="{{<port0> 0} | msm_csiphy0\n/dev/v4l-subdev0 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000001:port1 -> n0000000a:port0 [style=dashed]
n00000001:port1 -> n0000000d:port0 [style=dashed]
n00000001:port1 -> n00000010:port0 [style=dashed]
n00000001:port1 -> n00000013:port0 [style=dashed]
n00000004 [label="{{<port0> 0} | msm_csiphy1\n/dev/v4l-subdev1 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000004:port1 -> n0000000a:port0 [style=dashed]
n00000004:port1 -> n0000000d:port0 [style=dashed]
n00000004:port1 -> n00000010:port0 [style=dashed]
n00000004:port1 -> n00000013:port0 [style=dashed]
n00000007 [label="{{<port0> 0} | msm_csiphy2\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000007:port1 -> n0000000a:port0 [style=dashed]
n00000007:port1 -> n0000000d:port0 [style=dashed]
n00000007:port1 -> n00000010:port0 [style=dashed]
n00000007:port1 -> n00000013:port0 [style=dashed]
n0000000a [label="{{<port0> 0} | msm_csid0\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000000a:port1 -> n00000016:port0 [style=dashed]
n0000000a:port1 -> n00000019:port0 [style=dashed]
n0000000a:port1 -> n0000001c:port0 [style=dashed]
n0000000a:port1 -> n0000001f:port0 [style=dashed]
n0000000d [label="{{<port0> 0} | msm_csid1\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000000d:port1 -> n00000016:port0 [style=dashed]
n0000000d:port1 -> n00000019:port0 [style=dashed]
n0000000d:port1 -> n0000001c:port0 [style=dashed]
n0000000d:port1 -> n0000001f:port0 [style=dashed]
n00000010 [label="{{<port0> 0} | msm_csid2\n/dev/v4l-subdev5 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000010:port1 -> n00000016:port0 [style=dashed]
n00000010:port1 -> n00000019:port0 [style=dashed]
n00000010:port1 -> n0000001c:port0 [style=dashed]
n00000010:port1 -> n0000001f:port0 [style=dashed]
n00000013 [label="{{<port0> 0} | msm_csid3\n/dev/v4l-subdev6 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000013:port1 -> n00000016:port0 [style=dashed]
n00000013:port1 -> n00000019:port0 [style=dashed]
n00000013:port1 -> n0000001c:port0 [style=dashed]
n00000013:port1 -> n0000001f:port0 [style=dashed]
n00000016 [label="{{<port0> 0} | msm_ispif0\n/dev/v4l-subdev7 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000016:port1 -> n00000022:port0 [style=dashed]
n00000016:port1 -> n0000002b:port0 [style=dashed]
n00000016:port1 -> n00000034:port0 [style=dashed]
n00000016:port1 -> n0000003d:port0 [style=dashed]
n00000016:port1 -> n00000046:port0 [style=dashed]
n00000016:port1 -> n0000004f:port0 [style=dashed]
n00000016:port1 -> n00000058:port0 [style=dashed]
n00000016:port1 -> n00000061:port0 [style=dashed]
n00000019 [label="{{<port0> 0} | msm_ispif1\n/dev/v4l-subdev8 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000019:port1 -> n00000022:port0 [style=dashed]
n00000019:port1 -> n0000002b:port0 [style=dashed]
n00000019:port1 -> n00000034:port0 [style=dashed]
n00000019:port1 -> n0000003d:port0 [style=dashed]
n00000019:port1 -> n00000046:port0 [style=dashed]
n00000019:port1 -> n0000004f:port0 [style=dashed]
n00000019:port1 -> n00000058:port0 [style=dashed]
n00000019:port1 -> n00000061:port0 [style=dashed]
n0000001c [label="{{<port0> 0} | msm_ispif2\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000001c:port1 -> n00000022:port0 [style=dashed]
n0000001c:port1 -> n0000002b:port0 [style=dashed]
n0000001c:port1 -> n00000034:port0 [style=dashed]
n0000001c:port1 -> n0000003d:port0 [style=dashed]
n0000001c:port1 -> n00000046:port0 [style=dashed]
n0000001c:port1 -> n0000004f:port0 [style=dashed]
n0000001c:port1 -> n00000058:port0 [style=dashed]
n0000001c:port1 -> n00000061:port0 [style=dashed]
n0000001f [label="{{<port0> 0} | msm_ispif3\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000001f:port1 -> n00000022:port0 [style=dashed]
n0000001f:port1 -> n0000002b:port0 [style=dashed]
n0000001f:port1 -> n00000034:port0 [style=dashed]
n0000001f:port1 -> n0000003d:port0 [style=dashed]
n0000001f:port1 -> n00000046:port0 [style=dashed]
n0000001f:port1 -> n0000004f:port0 [style=dashed]
n0000001f:port1 -> n00000058:port0 [style=dashed]
n0000001f:port1 -> n00000061:port0 [style=dashed]
n00000022 [label="{{<port0> 0} | msm_vfe0_rdi0\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000022:port1 -> n00000025 [style=bold]
n00000025 [label="msm_vfe0_video0\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
n0000002b [label="{{<port0> 0} | msm_vfe0_rdi1\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000002b:port1 -> n0000002e [style=bold]
n0000002e [label="msm_vfe0_video1\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
n00000034 [label="{{<port0> 0} | msm_vfe0_rdi2\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000034:port1 -> n00000037 [style=bold]
n00000037 [label="msm_vfe0_video2\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
n0000003d [label="{{<port0> 0} | msm_vfe0_pix\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000003d:port1 -> n00000040 [style=bold]
n00000040 [label="msm_vfe0_video3\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
n00000046 [label="{{<port0> 0} | msm_vfe1_rdi0\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000046:port1 -> n00000049 [style=bold]
n00000049 [label="msm_vfe1_video0\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
n0000004f [label="{{<port0> 0} | msm_vfe1_rdi1\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000004f:port1 -> n00000052 [style=bold]
n00000052 [label="msm_vfe1_video1\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
n00000058 [label="{{<port0> 0} | msm_vfe1_rdi2\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000058:port1 -> n0000005b [style=bold]
n0000005b [label="msm_vfe1_video2\n/dev/video6", shape=box, style=filled, fillcolor=yellow]
n00000061 [label="{{<port0> 0} | msm_vfe1_pix\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000061:port1 -> n00000064 [style=bold]
n00000064 [label="msm_vfe1_video3\n/dev/video7", shape=box, style=filled, fillcolor=yellow]
n000000e2 [label="{{} | ov5645 3-0039\n/dev/v4l-subdev19 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n000000e2:port0 -> n00000004:port0 [style=bold]
n000000e4 [label="{{} | ov5645 3-003a\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n000000e4:port0 -> n00000007:port0 [style=bold]
n000000e6 [label="{{} | ov5645 3-003b\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n000000e6:port0 -> n00000001:port0 [style=bold]
}
요약·해설
qcom_camss_8x96_graph.dot:1-106Qualcomm 8x96 CAMSS의 OV5645 센서 3개, CSIPHY 3개, CSID 4개, ISPIF 4개, VFE 처리 경로 8개와 비디오 캡처 노드 8개 사이의 전체 미디어 링크를 단계별로 해설합니다.
센서 입력에서 최종 비디오 캡처 장치까지의 다섯 단계입니다.