V4l2架構
sensor層
通過下面設備樹我可以看到ov13850出圖需要的硬件支撐sensor,mipi,isp,數據流從下至上
sensor作為i2c1的子節點,向上綁定mipi接口
通過kernel\drivers\media\i2c\ov13850.c注冊驅動
在ov13850_probe通過v4l2_i2c_subdev_init(sd, client, &ov13850_subdev_ops)賦值操作函數;
再通過v4l2_async_register_subdev_sensor_common向v4l2框架注冊一個struct v4l2_subdev
mipi層
mipi主要向下連接傳感器,向上連接isp
kernel\drivers\phy\rockchip\phy-rockchip-mipi-rx.c主要是配置mipi的寄存器
先是通過v4l2_subdev_init(sd, &mipidphy_subdev_ops)初始化操作函數
再通過v4l2_async_notifier_parse_fwnode_endpoints_by_port將sensor和isp綁定到對應的mipi接口上
最后通過v4l2_async_register_subdev注冊到v4l2框架
isp層
isp向下綁定mipi接口
kernel\drivers\media\platform\rockchip\isp1\dev.c是isp驅動
該probe最終通過調用v4l2_subdev_init初始化操作函數
通過v4l2_device_register_subdev注冊到v4l2框架
v4l2層
v4l2在應用層使用VIDIOC_STREAMON命令開啟流,在
kernel\drivers\media\v4l2-core\v4l2-ioctl.c會調用v4l_streamon來開流
下面我們就通過trace的function_graph,set_ftrace_filter,set_ftrace_notrace功能,然后運行取圖程序;再通過cat trace查看函數調用關系;再去看源碼,可謂是一目了然