こんにちは、チームの皆さん
メディア パイプラインを構成しようとしたときに、どうしても /dev/media0 ノードをユーザー空間に表示できません。私たちのユース CASEでは、Yoctoビルドを備えたカスタム統合ボードで Compulab IMX8M Mini SOM を使用しています。Allied ビジョン カメラを同社の Alvium CSI2 ドライバと統合しようとしています。
主な基本的な質問: カーネルとデバイス ツリーが正しく設定されていれば、パイプラインが正しく構成されていれば /dev/media0 ノードは引き続き表示されますか?または、パイプラインを正常に開始するには、ドライバをロードする必要がありますか?いずれにしても、何をしても media0 ノードは表示されCANません。
起動時には、ボードのセットアップによりカメラがまだ使用可能になっていません。ユーザー空間に入ったら(電源レギュレータが設定され、カメラの準備が整った後)、ドライバをこの出力に再バインドします。
root@b2qt-imx8mm-lpddr4-evk:/usr/share/BoardSetup-scripts# ./RebindCamera.sh
AVT カメラ ドライバを再バインドしています...
./RebindCamera.sh:7行目: echo: 書き込みエラー: そのようなデバイスはありません
[ 43.335322] avt_csi2 0-003c: avt_probe[5107]: /usr/src/debug/avt-csi2/1.2.0+git/avt-csi2.c
[ 43.344799] avt_csi2 0-003c: avt_probe[5147]: パワーダウンGPIOが定義されていません
[ 43.351676] avt_csi2 0-003c: avt_probe[5164]: devm_gpiod_get_optional(dev, "reset-gpios" が成功しました
[ 43.360713] avt_csi2 0-003c: avt_probe[5171]: fwnode_property_present が mipi_csi を見つけられませんでした
[ 43.369373] avt_csi2 0-003c: avt_probe[5188]: bcrm_wait_timeoutが見つかりません。デフォルト値を使用してください
[ 43.377842] avt_csi2 0-003c: avt_probe[5191]: bcrm_wait_timeout が 3000ms に設定されました
[ 43.385046] avt_csi2 0-003c: avt_csi2_check_mipicfg[4586]: ep_cfg.bus.mipi_csi2.num_data_lanes1
[ 43.393965] avt_csi2 0-003c: avt_csi2_check_mipicfg[4588]: v4l2_fwnode_ep.nr_of_link_frequencies2
[ 43.402965] avt_csi2 0-003c: avt_csi2_check_mipicfg[4593]: v4l2_fwnode_ep.link-frequencies0 値 445500000
[ 43.412824] avt_csi2 0-003c: avt_csi2_check_mipicfg[4593]: v4l2_fwnode_ep.link-frequencies 1 値 891000000
[ 43.422688] avt_csi2 0-003c: avt_probe[5213]: powerdown-gpios powerdownが定義されていません
[ 43.430332] avt_csi2 0-003c: avt_probe[5228]: reset-gpios が定義されていません
[ 43.436726] avt_csi2 0-003c: avt_reset[2080]
[ 43.443043] avt_csi2 0-003c: wait_camera_available[2025]: カメラのシャットダウンを待機しています...
[ 44.648643] avt_csi2 0-003c: wait_camera_available[2033]: カメラがI2C転送に応答するのを待っています...
[ 45.269281] kauditd_printk_skb: 15 個のコールバックが抑制されました
[ 45.269292] 監査: タイプ=1334 監査(1723754849.880:26):プログラムID=21 オペレーション=UNLOAD
[ 46.664540] avt_csi2 0-003c: wait_camera_available[2054]: ハートビートがサポートされています。ハートビートがアクティブになるのを待っています。
[ 49.878985] avt_csi2 0-003c: wait_camera_available[2064]: ハートビートがアクティブ
[ 49.949573] avt_csi2 0-003c: read_cci_registers[748]: regmap_bulk_read(camera->regmap8, cci_cmd_tbl[CCI_REGISTER_LAYOUT_VERSION
].アドレス ret 540
[ 49.969505] avt_csi2 0-003c: cciレイアウトバージョンb: 0x00000100
[ 49.975362] avt_csi2 0-003c: cciレイアウトバージョンa: 0x00010000
[ 49.981170] avt_csi2 0-003c: avt_probe[5285]: read_cci_registers が成功しました
[ 49.989267] avt_csi2 0-003c: avt_probe[5302]: bcrm_version_check が成功しました
[ 49.996951] avt_csi2 0-003c: bcrm_get_write_handshake_availibility[704]: BCRM書き込みハンドシェイクがサポートされました!
[ 49.996975] avt_csi2 0-003c: カメラALVIUM 1500 C-501c NIRを発見
[ 50.014014] avt_csi2 0-003c: avt_probe[5315]: ファームウェアバージョン: 0.6.0.8c98 ret = 0
[ 50.024773] avt_csi2 0-003c: gcprmのバージョンを修正
[ 50.029887] avt_csi2 0-003c: avt_probe[5353]: INIT_WORK(&camera->bcrm_wrhs_work, bcrm_wrhs_work_func);
[ 50.046953] avt_csi2 0-003c: avt_get_sensor_capabilities[4409]: csiクロック
[ 50.046953] カメラ範囲: 40000000:750000000 Hz
[ 50.046953] dts リンク周波数数 2
[ 50.046953] dts link_frequencies[0] 445500000 Hz
[ 50.103673] avt_csi2 0-003c: avt_get_sensor_capabilities[4450]: カメラから読み取ったCSIクロック: 443750000 Hz
[ 50.113207] avt_csi2 0-003c: avt_get_sensor_capabilities[4454]: 最小解像度と最大解像度を取得する
[ 50.128752] avt_csi2 0-003c: avt_init_avail_formats[1840]: MEDIA_BUS_FMT_UYVY8_2X8/V4L2_PIX_FMT_UYVY/MIPI_CSI2_DT_YUV422_8Bを追加
利用可能な形式のリスト -1 - 1
[ 50.152546] avt_csi2 0-003c: avt_init_avail_formats[1841]: MEDIA_BUS_FMT_UYVY8_1X16/V4L2_PIX_FMT_UYVY/MIPI_CSI2_DT_YUV422_8を追加
B 利用可能な形式のリスト -1 - 1
[ 50.167322] avt_csi2 0-003c: avt_init_avail_formats[1842]: MEDIA_BUS_FMT_YUYV8_1X16/V4L2_PIX_FMT_YUV422P/MIPI_CSI2_DT_YUV42を追加
2_8B 利用可能な形式のリスト -1 - 1
[ 50.182333] avt_csi2 0-003c: avt_init_avail_formats[1843]: MEDIA_BUS_FMT_YUYV8_2X8/V4L2_PIX_FMT_YUYV/MIPI_CSI2_DT_YUV422_8Bを追加
利用可能な形式のリスト -1 - 1
[ 50.197003] avt_csi2 0-003c: avt_init_avail_formats[1844]: MEDIA_BUS_FMT_VYUY8_2X8/V4L2_PIX_FMT_VYUY/MIPI_CSI2_DT_YUV422_8Bを追加
利用可能な形式のリスト -1 - 1
[ 50.211670] avt_csi2 0-003c: avt_init_avail_formats[1849]: MEDIA_BUS_FMT_RGB888_1X24/V4L2_PIX_FMT_RGB24/MIPI_CSI2_DT_RGB888を追加
利用可能な形式のリスト -1 - 1
[ 50.226343] avt_csi2 0-003c: avt_init_avail_formats[1850]: MEDIA_BUS_FMT_RBG888_1X24/V4L2_PIX_FMT_RGB24/MIPI_CSI2_DT_RGB888を追加
利用可能な形式のリスト -1 - 1
[ 50.241008] avt_csi2 0-003c: avt_init_avail_formats[1851]: MEDIA_BUS_FMT_BGR888_1X24/V4L2_PIX_FMT_RGB24/MIPI_CSI2_DT_RGB888を追加
利用可能な形式のリスト -1 - 1
[ 50.255682] avt_csi2 0-003c: avt_init_avail_formats[1852]: MEDIA_BUS_FMT_RGB888_3X8/V4L2_PIX_FMT_RGB24/MIPI_CSI2_DT_RGB888を追加
利用可能な形式のリスト -1 - 1
[ 50.270271] avt_csi2 0-003c: avt_init_avail_formats[1856]: MEDIA_BUS_FMT_SGRBG8_1X8/V4L2_PIX_FMT_SGRBG8/MIPI_CSI2_DT_RAW8 t を追加
o 利用可能な形式のリスト 1 - 1
[ 50.284685] avt_csi2 0-003c: avt_init_avail_formats[1863]: MEDIA_BUS_FMT_SGRBG10_1X10/V4L2_PIX_FMT_SGRBG10/MIPI_CSI2_DT_RAWを追加
10 利用可能な形式のリスト 1 - 1
[ 50.320636] avt_csi2 0-003c: avt_init_controls[3359]: コントラストコントロール (0x980901) はカメラでサポートされていません
[ 50.357183] avt_csi2 0-003c: avt_init_controls[3359]: シャープネスコントロール (0x98091b) はカメラでサポートされていません
[ 50.367712] avt_csi2 0-003c: avt_update_sw_ctrl_state[2840]: ソフトウェアトリガーコントロールが見つかりません!
[ 50.369213] avt_csi2 0-003c: avt_update_sw_ctrl_state[2840]: ソフトウェアトリガーコントロールが見つかりません!
[ 50.378025] avt_csi2 0-003c: avt_update_sw_ctrl_state[2840]: ソフトウェアトリガーコントロールが見つかりません!
[ 50.412857] mxc_mipi-csi 32e30000.mipi_csi:登録されたセンササブデバイス: avt_csi2 0-003c
[ 50.429900] avt_csi2 0-003c: カメラ avt_csi2 0-003c が登録されました
[ 50.435940] avt_csi2 0-003c: -> avt_probe[5420]: sysfsグループが作成されました!(0)
[ 50.446676] avt_csi2 0-003c: avt_probe[5442]: プローブ成功!
[ 50.378025] avt_csi2 0-003c: avt_update_sw_ctrl_state[2840]: ソフトウェアトリガーコントロールが見つかりません!
[ 50.412857] mxc_mipi-csi 32e30000.mipi_csi:登録されたセンササブデバイス: avt_csi2 0-003c
[ 50.429900] avt_csi2 0-003c: カメラ avt_csi2 0-003c が登録されました
[ 50.435940] avt_csi2 0-003c: -> avt_probe[5420]: sysfsグループが作成されました!(0)
[ 50.446676] avt_csi2 0-003c: avt_probe[5442]: プローブ成功!
root@b2qt-imx8mm-lpddr4-evk:/usr/share/BoardSetup-scripts#
この時点では、カメラはセットアップされ、ストリーミングの準備ができていると想定されますが、フレームやデータをユーザー空間に取り込むことはできません。添付の TestStream.sh スクリプトを使用します。
root@b2qt-imx8mm-lpddr4-evk:/usr/share/BoardSetup-scripts# ./TestStream.sh
./TestStream.sh:1行目: amera: コマンドが見つかりません
=== カメラストリーミングコントロール ===
1. 現在のカメラの状態を確認します。
[ 76.502724] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
ビデオキャプチャのフォーマット:[ 76.511315] mxc_mipi-csi 32e30000.mipi_csi:フォーマットが一致しません
幅/高さ: 0/0
[ 76.519017] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
ピクセル形式: ''
分野: 任意
1行あたりのバイト数: 0
画像サイズ: 0
カラースペース: デフォルト
Tra[ 76.537857] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
nsfer関数: デフォルト([76.548706] avt_csi2 0-003cにマップ: avt_core_ops_s_power[2156]+: on 0、camera->power_count 1
記録。709)
YCbCr/HSVエンコーディング: デフォルト(ITU-R 601にマップ)
量子化: デフォルト (フルレンジにマップ)
フラグ:
2. 利用可能なco[ 76.570719] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: on 1, camera->power_count 0をリストします
コントロール:
3. 利用可能なフォームをリストします[ 76.581151] mxc_mipi-csi 32e30000.mipi_csi:フォーマットが一致しません
ats:
ioctl: VIDIOC_ENUM_FMT
Ty[ 76.589396] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
pe: ビデオキャプチャ
4. 基本的なフォーマットを設定する:
[ 76.611180] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.619262] mxc_mipi-csi 32e30000.mipi_csi:フォーマットが一致しません
ピクセルフォーマット「UYVY」が無効です[76.625042] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: on 0、camera->power_count 1
5. ストリーミング コントロールがあるかどうかを確認します。
[ 76.647122] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.655283] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
6. ストリーミングを有効にしてみます(コントロールが存在する場合)。
[ 76.672441] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.682040] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
ストリーミング V4L2 コントロールが見つかりません
[ 76.699454] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.708214] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
stream_enable コントロールが見つかりません
7. 取得開始を試みます(AVT 固有):
[ 76.724226] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.733618] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
取得開始コントロールが見つかりません
8. 露出とゲインをチェックします(適切であることを確認します)。
[ 76.749702] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.759271] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
露出制御なし
[ 76.775975] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.784748] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
ゲインコントロールなし
9. コントロールが存在する場合は、適切な露出/ゲインを設定します。
[ 76.801835] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.810768] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
露出を設定できません
[ 76.827415] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.837494] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
ゲインを設定できません
10. 設定後にフレームをキャプチャしてみます。
./TestStream.sh:47行目: タイムアウト: コマンドが見つかりません
11. カーネル メッセージでストリーミング ステータスを確認します。
[ 76.784748] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
[ 76.801835] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.810768] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
[ 76.827415] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン1、カメラ->power_count 0
[ 76.837494] avt_csi2 0-003c: avt_core_ops_s_power[2156]+: オン0、カメラ->power_count 1
root@b2qt-imx8mm-lpddr4-evk:/usr/share/BoardSetup-scripts#
現在、フォーマットが一致しないため、/dev/media0 ノードのプレスリリース、製品ニュース-ctl を介してリセットして変更するつもりです。しかし、それは表示されません。
以下は、DTS の関連する中核部分です。
// I2Cバス上でカメラを定義する
&i2c1 {
/*
* I2C アドレス 0x21 に PCAL6416A GPIO エクスパンダーを定義します。
* 参照できるように、「gpio_expander」というラベルを付けます。
*/
gpio_expander: pcal6416a@21 {
互換性 = "nxp、pcal6416";
<0x21>
レジスタ
<2>
= !; gpio コントローラ; #gpioセル =; };
アルビウム: アルビウム@3c {
互換性 = "alliedvision、avt_csi2";
レジスタ =<0x3c> �;
ステータス = "正常";
pinctrl-names = "デフォルト";
pinctrl-0 = <&pinctrl_alvium_clk>、<&pinctrl_alvium_gpio>;
// Attollo デイカメラ用ハードウェア設定
電源 = <&dayCam_step2>;
リセットgpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
クロック = <&clk IMX8MM_CLK_CLKO1>;
クロック名 = "csi_mclk";
割り当てられたクロック = <&clk IMX8MM_CLK_CLKO1>;
割り当てられたクロックの親 = <&clk IMX8MM_CLK_24M>;
割り当てられたクロックレート = <24000000>;
ポート {
レジスタ = <0>;
alvium_mipi_ep: エンドポイント {
リモートエンドポイント = <&mipi1_sensor_ep>;
データレーン = <2>;
リンク周波数 = /ビット/ 64 <445500000 891000000>;
mipi-csi;
};
};
};
};
&mipi_csi_1 {
ステータス = "正常";
/delete-node/ ポート;
ポート {
mipi1_sensor_ep: エンドポイント@1 {
レジスタ = <1>;
リモートエンドポイント = <&alvium_mipi_ep>;
データレーン = <2>;
csis-hs-settle = <13>;
csis-clk-settle = <2>;
csis-wclk;
};
csi1_mipi_ep: エンドポイント@2 {
レジスタ = <2>;
リモートエンドポイント = <&csi1_bridge_in>;
};
};
};
&csi1_bridge {
ステータス = "正常";
fsl、mipi モード;
/delete-node/ ポート;
ポート {
csi1_bridge_in: エンドポイント {
リモートエンドポイント = <&csi1_mipi_ep>;
};
};
};
/ {
dayCam_step1: camPowerEnable {
compatible = "レギュレータ固定";
レギュレータ名 = "dayCam-Power-Enable";
gpio = <&gpio_expander 5 GPIO_ACTIVE_HIGH>;
アクティブハイを有効にする;
レギュレータ常時オン;
};
dayCam_step2: dayCamI2cEnable {
compatible = "レギュレータ固定";
レギュレータ名 = "dayCam-i2c-Power-Enable";
vin-supply = <&dayCam_step1>;
gpio = <&gpio4 26 GPIO_ACTIVE_HIGH>;
アクティブハイを有効にする;
レギュレータ常時オン;
// startup-delay-us = <2600000>; // 100ms待つ
};
};
ご協力やアイデアをいただければ大変助かります。