현재 github과 topst.ai 홈페이지에서 공식 지원하고 있는 소스와 이미지는 imx219센서를 지원하고 있지 않습니다.
현재 v1.0.0으로 이미지가 릴리즈된 상황인데, 곧 v1.1.0을 릴리즈할 예정입니다.
릴리즈 이후 v1.1.0에는 imx219센서가 포함되어있고, local.conf에서 단순하게 feature만 변경하여 빌드하시면 imx219를 사용하실 수 있습니다. 혹은 imx219용 image를 다운하셔서 fwdn 후 사용하시면 됩니다.
현재 받으신 이미지에서는 ov5647 센서만 사용하실 수 있습니다.
v1.1.0은 곧 릴리즈 예정이니, 참고 부탁드립니다.
드라이버 및 Kconfig 추가
imx219는 kernel config에 기본적으로 포함이 되어있지 않습니다. 따라서 imx219.c 드라이버를 만드시고, Kconfig에 컨피그를 추가해줍니다. 다음 Makefile에 해당 config 활성화 여부에 따라 imx219.c 드라이버가 빌드도록 추가해주면 됩니다.
디바이스 트리 추가
imx219용 디바이스 트리 또한 없기 때문에 MIPI0 혹은 MIPI1 원하는 포트에 맞도록 디바이스 트리를 추가해주시면 됩니다. 이 때 include로 디바이스 트리 또한 빌드되도록 설정해주어야합니다.
Kconfig 활성화 후 커널 재빌드
빌드를 하시면 imx219는 모듈이 아니라 커널에 포함되어 빌드가 됩니다.
따라서 부팅 후 dmesg에서 imx가 probe되었다는 로그를 확인할 수 있어야 합니다.
media-ctl -p로는 포트간 linking이 잘 되어있는지 확인해주시면 됩니다.
아래는 media-ctl -p 출력 예입니다.
ai-g-topst:~$ media-ctl -p
Media controller API version 5.10.223
Media device information
------------------------
driver tcc-cap-media-d
model Telechips capture subsystem
serial
bus info platform:camera sub-system
hw revision 0x0
driver version 5.10.223
Device topology
- entity 1: videoinput0 (2 pads, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "tcc-isp-0":1 [ENABLED,IMMUTABLE]
pad1: Source
- entity 6: tcc-isp-0 (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 1
device node name /dev/v4l-subdev0
pad0: Sink
[fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
<- "mipi_csi2_0":1 [ENABLED,IMMUTABLE]
pad1: Source
[fmt:UYVY8_1X16/3272x2448 field:none]
-> "videoinput0":0 [ENABLED,IMMUTABLE]
- entity 9: mipi_csi2_0 (5 pads, 2 links)
type V4L2 subdev subtype Unknown flags 1
device node name /dev/v4l-subdev1
pad0: Sink
[fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
<- "imx219 3-0010":0 [ENABLED,IMMUTABLE]
pad1: Source
[fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
-> "tcc-isp-0":0 [ENABLED,IMMUTABLE]
pad2: Source
[fmt:UYVY8_2X8/1x1 field:none]
pad3: Source
[fmt:UYVY8_2X8/1x1 field:none]
pad4: Source
[fmt:UYVY8_2X8/1x1 field:none]
- entity 15: imx219 3-0010 (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev2
pad0: Source
[fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
crop.bounds:(8,8)/3280x2464
crop:(8,8)/3280x2464]
-> "mipi_csi2_0":0 [ENABLED,IMMUTABLE]
그런데 여기서 실제 프레임을 파일로 저장해서 확인하는 단계에서 막혔습니다. /dev/video0에서 v4l2-ctl로 스트리밍을 걸면 --verbose 기준으로는 dqbuf 로그가 출력되면서 bytesused도 4147200(1920x1080 UYVY 기준)처럼 정상 값이 찍히는데, 정작 --stream-to로 raw를 저장하면 파일이 항상 0 byte로 남습니다.
추가로 /dev/video0 드라이버가 tcc-dewarp로 잡히는데, 혹시 이 노드는 v4l2-ctl --stream-to 방식으로 payload dump가 원래 지원되지 않는 구조인지, 아니면 다른 캡처 노드(/dev/videoX)나 별도 샘플 앱/권장 캡처 방법을 써야 하는지 궁금합니다. 답변 부탁드립니다. 감사합니다!