mmshinji
2017年6月8日 14時08分
Armadillo-x1のカメラドライバについて、ご教授下さい
/drivers/media/platform/mxc/capture/ov5640.c
を参考に、カメラドライバ追加を検討しております。
現状、カメラは接続出来ていない為、ov5640.cの撮影以外の挙動を確認しようとしておりますが
ioctl(VIDIOC_G_CTRL)をコールしても
ov5640_ioctl_desc
に登録した関数が呼び出されておりません。
そもそも、参考とするソースは上記であっていますでしょうか。
※修正内容を以下に記載致します。
カメラドライバの正しい有効化の方法について
恐れ入りますが、ご教授の程、宜しくお願い致します。
*******************************************************************************
【修正内容】
※修正ファイルを添付します。
●menuconfigの変更
以下を有効化する
[Device Drivers]
->[Multimedia support]
->[V4L platform devices]
-><*>[OmniVision ov5640 camera support]
※これ以外はデフォルトのままです。
●armadillo_x1.dtsの修正
imx7d-19x19-ddr3-arm2-csi.dts
を参考に修正
●probe関数の修正
カメラが接続されていない為、そのままではエラーとなる個所を修正し
ov5640_probeを完走する様にします。
上記を行い、ビルドしたuImageとdtbファイルを書き込みました。
ov5640_probeがコールされ
camera ov5640 is found
のログが出力されている事を確認し
/dev/video0
も生成されておりました。
http://www.nxp.com/jp/products/microcontrollers-and-processors/arm-proc…
L4.1.15_2.0.0_LINUX_DOCS
に同梱されている
i.MX_BSP_Porting_Guide.pdf
Chapter 7
を参考にしております。
*******************************************************************************
ファイル | ファイルの説明 |
---|---|
修正ファイル.zip |
コメント
mmshinji
To:溝渕 様
お世話になっております。
ご返信、ありがとうございます。
> パラレル接続のI2Cカメラを追加するのであれば、上記ソースは参考になるか
> と思います。
すいません。記載が漏れておりました。
ご指摘の通り、パラレル接続のI2Cカメラを追加したいと考えております。
参考ソースは妥当である事、承知致しました。
>
> "ov5640_ioctl_desc"に登録した関数は、V4L ioctrlから直接callされません。以下のfunctionにwrapされます。
>
> drivers/media/platform/mxc/capture/mxc_v4l2_capture.c: mxc_v4l2_g_ctrl()
>
> ioctl(VIDIOC_G_CTRL)に渡した"struct v4l2_control"のidメンバの値を確認
> し、最終的に"vidioc_int_g_ctrl()"が通るかどうかを確認してみてください。
>
こちら確認しましたが、mxc_v4l2_g_ctrl() はコールされておりません。
/drivers/media/v4l2-core/v4l2-ioctl.c
__video_do_ioctl()
が呼び出され、
if (!test_bit(_IOC_NR(cmd), vfd->valid_ioctls) && !((info->flags & INFO_FL_CTRL) && vfh && vfh->ctrl_handler))
が真となり、goto done で処理が抜けている様です。
at_mizo
mmshinji
To:溝渕 様
お世話になっております。
> drivers/media/platform/mxc/subdev/ov5640.c
>
> "imx7d-19x19-ddr3-arm2-csi.dts"で利用されているドライバが上記のものです。
ご教授有難う御座います。
上記をベースに
drivers/media/platform/mxc/subdev/mx6s_capture.c
mx6s_csi_ioctl_ops
・vidioc_g_ctrl
・vidioc_s_ctrl
drivers/media/platform/mxc/subdev/ov5640.c
ov5640_subdev_core_ops
・g_ctrl
・s_ctrl
を追加して
VIDIOC_G_CTRL、VIDIOC_S_CTRLが繋がる事を確認しました。
※参考ファイルとして添付しておきます。
もう1点、ご教授頂きたいのですが
今回、Y(8Bit)のみのグレースケールのカメラを接続しようと考えております。
I.MX7Dual資料のCSIに関する記述を確認する限り、グレースケールについては触れられていませんが
Bayerフォーマットはサポートしている記載が御座います。
ですので、Yのみでも、VIDIOC_S_FMTでV4L2_PIX_FMT_SBGGR8として取り込み
後は、ソフトウェアでYとして扱えば良いと思っているのですが
既に、その様に動作させた、実績などありますでしょうか。
※最悪、V4L2_PIX_FMT_YUYV等で幅を1/2にして動作させ様と考えております。
ファイル | ファイルの説明 |
---|---|
参考ファイル.zip |
at_mizo
mmshinji
mmshinji
at_mizo
2017年6月9日 8時54分
溝渕です。
> /drivers/media/platform/mxc/capture/ov5640.c
: (省略)
> そもそも、参考とするソースは上記であっていますでしょうか。
> ※修正内容を以下に記載致します。
パラレル接続のI2Cカメラを追加するのであれば、上記ソースは参考になるか
と思います。
> *******************************************************************************
> 【修正内容】
> ※修正ファイルを添付します。
>
> ●menuconfigの変更
> 以下を有効化する
> [Device Drivers]
> ->[Multimedia support]
> ->[V4L platform devices]
> -><*>[OmniVision ov5640 camera support]
> ※これ以外はデフォルトのままです。
"/drivers/media/platform/mxc/capture/ov5640.c"に対応するコンフィギュレー
ションは次の通りです。
-> Device Drivers
-> Multimedia support
-> V4L platform devices
-> MXC Video For Linux Video Capture
-> MXC Camera/V4L2 PRP Features support
-> OmniVision ov5640 camera support
> 現状、カメラは接続出来ていない為、ov5640.cの撮影以外の挙動を確認しようとしておりますが
> ioctl(VIDIOC_G_CTRL)をコールしても
>
> ov5640_ioctl_desc
>
> に登録した関数が呼び出されておりません。
"ov5640_ioctl_desc"に登録した関数は、V4L ioctrlから直接callされません。以下のfunctionにwrapされます。
drivers/media/platform/mxc/capture/mxc_v4l2_capture.c: mxc_v4l2_g_ctrl()
ioctl(VIDIOC_G_CTRL)に渡した"struct v4l2_control"のidメンバの値を確認
し、最終的に"vidioc_int_g_ctrl()"が通るかどうかを確認してみてください。