imx8mm 上の ArduCam のデバイスツリー設定 私はKontronボード、OSM-S i.MX8M Miniを持っており、IMX296チップを搭載したArduCamを接続しようとしています。動作させるのにいくつか問題があります。 デバイスは次の場所にコネクテッド: CSI/MIPI CSI_A_DATA{0,1}{{N,P} CSI_A_CLOCK_{N,P} I2C CAM_A_SCL/CSI_A_TX_N CAM_A_SDA/CSI_A_TX_P 電源/リセット CAM_A_PWR/GPIO_C_6 CAM_A_RST#/GPIO_C7 CAM_MCKはNCです GPIO が正しいこと、i2c がラインをプローブできることをテストしました。カムは正しく接続されている必要があります。しかし、Linux ドライバはプローブされません。 次に、このデバイス ツリー設定を追加しました。 // SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Copyright (C) 2022 Kontron Electronics GmbH
*/
/dts-v1/;
#include "imx8mm-kontron-osm-s.dtsi"
/ {
model = "Kontron i.MX8MM OSM-S (N802X S)";
compatible = "kontron,imx8mm-bl-osm-s", "kontron,imx8mm-osm-s", "fsl,imx8mm";
cam_dummy_reg: cam_dummy_reg {
compatible = "regulator-fixed";
regulator-name = "cam-dummy-reg";
status = "okay";
};
};
&i2c4 {
status = "okay";
imx296: camera-sensor@1a {
compatible = "sony,imx296";
reg = <0x1a>;
clocks = <&clk IMX8MM_CLK_CSI1_CORE>;
clock-frequency = <37125000>;
assigned-clocks = <&clk IMX8MM_CLK_CSI1_CORE>;
assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_266M>;
assigned-clock-rates = <37125000>;
reset-gpios = <&gpio4 0 GPIO_ACTIVE_LOW>;
avdd-supply = <&gpio4 19 GPIO_ACTIVE_HIGH>; /* 3.3v */
dvdd-supply = <&cam_dummy_reg>; /* 1.8v, dummy, NC */
ovdd-supply = <&cam_dummy_reg>; /* 1.2v, dummy, NC */
port {
imx296_ep: endpoint {
remote-endpoint = <&csi_in>;
clock-lanes = <0>;
data-lanes = <1>;
clock-noncontinuous;
};
};
};
};
&pwm2 {
status = "disabled";
};
®_usb2_vbus {
status = "disabled";
};
®_usdhc2_vcc {
status = "disabled";
};
®_usdhc3_vcc {
status = "disabled";
};
&uart1 {
uart-has-rtscts;
status = "okay";
};
&uart2 {
status = "disabled";
};
&uart3 {
status = "disabled";
};
&usbotg1 {
dr_mode = "otg";
status = "okay";
}; しかし、デバイスが検出されません。 行き詰まり始めているので、どんなヒントでもいただければ幸いです。 Re: Device tree setup for ArduCam on imx8mm ご返信ありがとうございます。しかし、何も変わりませんでした。 imx296 が有効になっている場合でも、i2C バスをプローブすることはできません。 お知らせが1つあります。Raspberry Piにはbrcm、bcm2835が搭載されています。imx8mm を使用する場合、これは存在しないため、raspbarry pi の dts オーバーレイはインスピレーションとしてのみ使用できます。 imx8mm-kontron-bl-extension.dtsoにimx219デバイス用のdtsオーバーレイが見つかりました。 https://git.kontron-electronics.de/sw/misc/linux.git RaspberryとKontronを統合してみます。 Re: Device tree setup for ArduCam on imx8mm dtsファイルを参照してください。
https://github.com/raspberrypi/linux/blob/stable_20241008/arch/arm/boot/dts/overlays/imx296-overlay.dts
IMX296 には inck が必要です。これは clock-names = "inck" として設定されます。 Re: Device tree setup for ArduCam on imx8mm それは必要ないはずです。私はResbarry Pi 5を参考にしました。 https://github.com/raspberrypi/linux/blob/stable_20241008/arch/arm/boot/dts/overlays/imx296-overlay.... arducam デバイスには、ボード自体にいくつかのペリフェラルが含まれています。これは cam_dommy_reg の理由でもあります。電源レギュレータはボード上にあり、有効にするだけで済みます。 私がこのボードを使用しようとしている Kontron ボードは次のとおりです。 https://www.kontron.com/en/products/som-osm-si.mx8m-mini/p171657 カメラはこれです: https://docs.arducam.com/Raspberry-Pi-Camera/ネイティブカメラ/グローバルシャッター/1.58MP-IMX296/ カーネルガイドがあります: https://www.kernel.org/doc/Documentation/devicetree/bindings/media/i2c/sony%2Cimx296.yaml Re: Device tree setup for ArduCam on imx8mm CAM_MCK が NC ですが、mclk を接続していないということでしょうか?これは NXP ボードではないので、このボードでデフォルトでサポートされているカメラがどれか知っていますか?参考になるDTSはありますか?なぜmclkを使わないのか確認する必要がある Re: Device tree setup for ArduCam on imx8mm もう少し進んだ。カーネルの設定に成功しました。Linuxカーネルに以下の設定を追加しました。 CONFIG_VIDEO_IMX296=m
CONFIG_V4L2_MEM2MEM_DEV=m
CONFIG_V4L_PLATFORM_DRIVERS=y
# CONFIG_VIDEO_MUX is not set
# CONFIG_VIDEO_CAFE_CCIC is not set
CONFIG_VIDEO_IMX7_CSI=m
CONFIG_VIDEO_IMX8_ISI=m
CONFIG_VIDEO_IMX8_ISI_M2M=y
# CONFIG_VIDEO_ROCKCHIP_ISP1 is not set
# CONFIG_VIDEO_XILINX is not set
CONFIG_VIDEOBUF2_DMA_CONTIG=m そして、このデバイスツリーは次のようになります。 // SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* Copyright (C) 2022 Kontron Electronics GmbH
*/
/dts-v1/;
#include "imx8mm-kontron-osm-s.dtsi"
/ {
model = "Wegsol i.MX8MM OSM-S (N802X S)";
compatible = "kontron,imx8mm-bl-osm-s", "kontron,imx8mm-osm-s", "fsl,imx8mm";
cam_dummy_reg: cam_dummy_reg {
compatible = "regulator-fixed";
regulator-name = "cam-dummy-reg";
status = "okay";
};
cam_reg: regulator-cam {
compatible = "regulator-fixed";
regulator-name = "cam_reg";
gpio = <&gpio4 0 GPIO_ACTIVE_HIGH>;
enable-active-high;
startup-delay-us = <500000>;
};
cam_clk: cam_clk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <54000000>;
clock-output-names = "cam_clk";
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
/* global autoconfigured region for contiguous allocations */
linux,cma {
compatible = "shared-dma-pool";
reusable;
/* 640 MiB */
size = <0 0x28000000>;
/* 1024 - 128 MiB, our minimum RAM config will be 1024 MiB */
alloc-ranges = <0 0x40000000 0 0x78000000>;
linux,cma-default;
};
};
};
&i2c4 {
status = "okay";
imx296: camera-sensor@1a {
compatible = "sony,imx296";
reg = <0x1a>;
clocks = <&cam_clk>;
clock-names = "inck";
avdd-supply = <&cam_reg>; /* 3.3v */
dvdd-supply = <&cam_dummy_reg>; /* 1.8v, dummy, NC */
ovdd-supply = <&cam_dummy_reg>; /* 1.2v, dummy, NC */
port {
imx296_ep: endpoint {
remote-endpoint = <&csi_imx296_in>;
clock-lanes = <0>;
data-lanes = <1 2>;
clock-noncontinuous;
};
};
};
};
&mipi_csi {
fsl,mipi-mode;
status = "okay";
ports {
port@0 {
csi_imx296_in: endpoint {
remote-endpoint = <&imx296_ep>;
clock-lanes = <0>;
data-lanes = <1 2>;
};
};
};
};
&csi {
status = "okay";
};
&pwm2 {
status = "disabled";
};
®_usb2_vbus {
status = "disabled";
};
®_usdhc2_vcc {
status = "disabled";
};
®_usdhc3_vcc {
status = "disabled";
};
&uart1 {
uart-has-rtscts;
status = "okay";
};
&uart2 {
status = "disabled";
};
&uart3 {
status = "disabled";
};
&usbotg1 {
dr_mode = "otg";
status = "okay";
}; そしてコンソールに次のようなメッセージが表示されました。 v4l2-ctl -D -d /dev/video0
Driver Info:
Driver name : imx-capture
Card type : imx-capture
Bus info : platform:32e20000.csi
Driver version : 6.12.41
Capabilities : 0xa4200001
Video Capture
I/O MC
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x24200001
Video Capture
I/O MC
Streaming
Extended Pix Format
Media Driver Info:
Driver name : imx7-csi
Model : imx-media
Serial :
Bus info : platform:32e20000.csi
Media version : 6.12.41
Hardware revision: 0x00000000 (0)
Driver version : 6.12.41
Interface Info:
ID : 0x03000006
Type : V4L Video
Entity Info:
ID : 0x00000004 (4)
Name : csi capture
Function : V4L2 I/O
Pad 0x01000005 : 0: Sink
Link 0x02000008: from remote pad 0x1000003 of entity 'csi' (Video Interface Bridge): Data, Enabled, Immutable どうやらLinuxカーネルとIMX296ドライバは正常に動作しているようです。 デバイスの設定が可能です。 root@v12:~# media-ctl -d /dev/media0 -l "'imx296 3-001a':0 -> 'csis-32e30000.mipi-csi':0 [1]"
root@v12:~# media-ctl -d /dev/media0 -v -V "'imx296 3-001a':0 [fmt:SRGGB8/640x480 field:none]"
Opening media device /dev/media0
Enumerating entities
looking up device: 81:1
looking up device: 81:0
looking up device: 81:2
looking up device: 81:3
Found 4 entities
Enumerating pads and links
Setting up format SRGGB8_1X8 640x480 on pad imx296 3-001a/0/0
Format set: SBGGR10_1X10 728x544
Setting up format SBGGR10_1X10 728x544 on pad csis-32e30000.mipi-csi/0/0
Format set: SBGGR10_1X10 728x544
root@v12:~# media-ctl -d /dev/media0 -v -V "'csis-32e30000.mipi-csi':0 [fmt:SRGGB8/640x480 field:none]"
Opening media device /dev/media0
Enumerating entities
looking up device: 81:1
looking up device: 81:0
looking up device: 81:2
looking up device: 81:3
Found 4 entities
Enumerating pads and links
Setting up format SRGGB8_1X8 640x480 on pad csis-32e30000.mipi-csi/0/0
Format set: SRGGB8_1X8 640x480
root@v12:~# media-ctl -d /dev/media0 -v -V "'csi':0 [fmt:SRGGB8/640x480 field:none]"
Opening media device /dev/media0
Enumerating entities
looking up device: 81:1
looking up device: 81:0
looking up device: 81:2
looking up device: 81:3
Found 4 entities
Enumerating pads and links
Setting up format SRGGB8_1X8 640x480 on pad csi/0/0
Format set: SRGGB8_1X8 640x480 今のところは順調ですが、何かを録画しようとするとバッファエラーが発生します。 root@v12:~# gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-bayer,format=rggb,width=640,height=480' ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to allocate required memory.
Additional debug info:
/usr/src/debug/gstreamer1.0-plugins-good/1.22.12/sys/v4l2/gstv4l2src.c(950): gst_v4l2src_decide_allocation (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Buffer pool activation failed
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
Additional debug info:
/usr/src/debug/gstreamer1.0/1.22.12/libs/gst/base/gstbasesrc.c(3134): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.002320250
Setting pipeline to NULL ...
Freeing pipeline .. このバッファエラーを解消するにはどうすればよいですか? dtsファイル内にDMA CMAバッファを作成しようと試みましたが、問題は解決しませんでした。 パイプラインにメモリバッファを割り当てる必要があるのですが、どうすればいいでしょうか? どんなヒントでも大歓迎です。
View full article