色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核之Camera驅(qū)動(dòng)分析

冬至配餃子 ? 來(lái)源:嵌入式軟件開(kāi)發(fā)交流 ? 作者:young ? 2022-08-07 16:08 ? 次閱讀

Camera驅(qū)動(dòng)分析

Linux版本:4.19

Sensor: OV13850

(1)裝載和卸載函數(shù)

//DTS匹配表
static const struct of_device_id ov13850_of_match[] = {
{.compatible = "omnivision,ov13850-v4l2-i2c-subdev"},
{},
};

MODULE_DEVICE_TABLE(i2c, ov13850_id);

static struct i2c_driver ov13850_i2c_driver = {
.driver = {
.name = ov13850_DRIVER_NAME,
.owner = THIS_MODULE,
.of_match_table = ov13850_of_match
},
.probe = ov13850_probe,
.remove = ov13850_remove,
.id_table = ov13850_id,
};

module_i2c_driver(ov13850_i2c_driver);
OV13850是使用I2C接口進(jìn)行控制,所以使用i2c_driver進(jìn)行注冊(cè)。

(2)probe()

static int ov13850_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
dev_info(&client->dev, "probing...\n");

ov13850_filltimings(&ov13850_custom_config); //填充時(shí)序信息
v4l2_i2c_subdev_init(&ov13850.sd, client, &ov13850_camera_module_ops); //初始化v4l2_subdev
ov13850.sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
ov13850.custom = ov13850_custom_config;

mutex_init(&ov13850.lock);
dev_info(&client->dev, "probing successful\n");
return 0;
}
上面主要是根據(jù)全局變量ov13850_custom_config中的信息填充時(shí)序信息。然后初始化v4l2_subdev, ov13850是I2C接口,所以使用v4l2_i2c_subdev_init 進(jìn)行初始化。v4l2_i2c_subdev_init就是對(duì)v4l2_subdev_init的封裝。

//v4l2_subdev_ops
static struct v4l2_subdev_ops ov13850_camera_module_ops = {
.core = &ov13850_camera_module_core_ops, //核心操作
.video = &ov13850_camera_module_video_ops, //video操作
.pad = &ov13850_camera_module_pad_ops
};

static struct ov_camera_module_custom_config ov13850_custom_config = {
.start_streaming = ov13850_start_streaming, //sensor開(kāi)始輸出數(shù)據(jù)流
.stop_streaming = ov13850_stop_streaming, //sensor停止輸出數(shù)據(jù)流
.s_ctrl = ov13850_s_ctrl,
.s_ext_ctrls = ov13850_s_ext_ctrls, //sensor控制(設(shè)置自動(dòng)曝光控制)
.g_ctrl = ov13850_g_ctrl,
.g_timings = ov13850_g_timings, //獲取sensor時(shí)序
.check_camera_id = ov13850_check_camera_id, //讀取Sensor ID
.s_vts = ov13850_auto_adjust_fps, //自動(dòng)調(diào)節(jié)刷新率
.set_flip = ov13850_set_flip, //設(shè)置sensor鏡像
#ifdef OV13850_ONE_LANE
.configs = ov13850_onelane_configs, //單lane的配置信息(分辨率,刷新率等)
.num_configs = ARRAY_SIZE(ov13850_onelane_configs),

#else
.configs = ov13850_configs, //多l(xiāng)ane的配置信息
.num_configs = ARRAY_SIZE(ov13850_configs),
#endif
.power_up_delays_ms = {5, 20, 0},
/*
*0: Exposure time valid fileds; 曝光時(shí)間
*1: Exposure gain valid fileds; 曝光增益
*(2 fileds == 1 frames)
*/
.exposure_valid_frame = {4, 4}
};
上面設(shè)置的回調(diào)基本都是去設(shè)置寄存器。

(3)打開(kāi)數(shù)據(jù)流

static int ov13850_start_streaming(struct ov_camera_module *cam_mod)
{
int ret = 0;

ov_camera_module_pr_debug(cam_mod,
"active config=%s\n", cam_mod->active_config->name);

ret = ov13850_g_VTS(cam_mod, &cam_mod->vts_min);
if (IS_ERR_VALUE(ret))
goto err;

mutex_lock(&cam_mod->lock);
ret = ov_camera_module_write_reg(cam_mod, 0x0100, 1); //寫0x0100寄存器, 選擇streaming模式 0:standby 1:streaming
mutex_unlock(&cam_mod->lock);
if (IS_ERR_VALUE(ret))
goto err;

msleep(25);

return 0;
err:
ov_camera_module_pr_err(cam_mod, "failed with error (%d)\n",
ret);
return ret;
}
主要就是操作寄存器,開(kāi)啟數(shù)據(jù)流傳輸。其他的一些操作函數(shù)也基本類似。

總結(jié)

我們從上面的內(nèi)容中可以看出,sensor端的驅(qū)動(dòng)沒(méi)有特別復(fù)雜,主要是一些參數(shù)和控制相關(guān)的內(nèi)容。sensor主要是生產(chǎn)數(shù)據(jù),而數(shù)據(jù)的處理主要交給ISP。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11319

    瀏覽量

    209830
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21672
  • I2C接口
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    25262
  • OV13850
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    2335
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux編譯驅(qū)動(dòng)、內(nèi)核及應(yīng)用程序分析

    作為一名嵌入式Linux新手,在學(xué)習(xí)的過(guò)程中會(huì)遇到很多問(wèn)題。寫了一個(gè)驅(qū)動(dòng)程序怎么編譯?怎么加載進(jìn)內(nèi)核
    的頭像 發(fā)表于 01-17 13:46 ?6662次閱讀
    <b class='flag-5'>Linux</b>編譯<b class='flag-5'>驅(qū)動(dòng)</b>、<b class='flag-5'>內(nèi)核</b>及應(yīng)用程序<b class='flag-5'>分析</b>

    Linux驅(qū)動(dòng)分析input子系統(tǒng)

    Linux內(nèi)核為了能夠處理各種不同類型的輸入設(shè)備,比如: 觸摸屏 ,鼠標(biāo) , 鍵盤 , 操縱桿等設(shè)備 ,設(shè)計(jì)并實(shí)現(xiàn)了Linux 輸入子系統(tǒng) ,它為驅(qū)動(dòng)和應(yīng)用提供了統(tǒng)一的接口函數(shù),方便實(shí)
    發(fā)表于 02-01 10:38 ?541次閱讀

    s3c2440 mmc和cameralinux驅(qū)動(dòng)

    本站提供的s3c2440 mmc和cameralinux驅(qū)動(dòng)資料,詳細(xì)講訴了s3c2440 mmc和cameralinux
    發(fā)表于 05-25 15:53 ?54次下載
    s3c2440 mmc和<b class='flag-5'>camera</b>的<b class='flag-5'>linux</b><b class='flag-5'>驅(qū)動(dòng)</b>

    基于Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究

    Linux因其完全開(kāi)放的特性和穩(wěn)定優(yōu)良的性能深受歡迎,當(dāng)推出了內(nèi)核輸入子系統(tǒng)后,更方便了嵌入式領(lǐng)域的驅(qū)動(dòng)開(kāi)放。介紹了Linux的設(shè)備驅(qū)動(dòng)基礎(chǔ)
    發(fā)表于 09-12 16:38 ?23次下載

    linux內(nèi)核啟動(dòng)內(nèi)核解壓過(guò)程分析

    linux啟動(dòng)時(shí)內(nèi)核解壓過(guò)程分析,一份不錯(cuò)的文檔,深入了解內(nèi)核必備
    發(fā)表于 03-09 13:39 ?1次下載

    linux2.6內(nèi)核設(shè)備驅(qū)動(dòng)模型精華

    linux 內(nèi)核驅(qū)動(dòng)部分詳解
    發(fā)表于 04-27 10:43 ?20次下載

    基于Linux 2.6內(nèi)核Makefile分析

    基于2.4內(nèi)核的,可以說(shuō)關(guān)于2.6內(nèi)核Makefile相關(guān)的文章鳳毛麟角,筆者抽時(shí)間完成了這篇分析文章,讓讀者迅速熟悉Linux最新Makefile體系,從而加深對(duì)
    發(fā)表于 09-18 19:09 ?0次下載
    基于<b class='flag-5'>Linux</b> 2.6<b class='flag-5'>內(nèi)核</b>Makefile<b class='flag-5'>分析</b>

    Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究

    Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究
    發(fā)表于 10-31 14:41 ?14次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>輸入子系統(tǒng)的<b class='flag-5'>驅(qū)動(dòng)</b>研究

    Embeded linuxsoc camera

    soc_camera_device_init(&icd->dev, icl);//設(shè)置soc_came_device對(duì)應(yīng)device的bus為soc_camera_bus_type,這樣當(dāng)我們注冊(cè)設(shè)備時(shí),就會(huì)調(diào)用soc_camera
    發(fā)表于 05-15 13:49 ?1531次閱讀

    如何使用Linux內(nèi)核實(shí)現(xiàn)USB驅(qū)動(dòng)程序框架

    Linux內(nèi)核提供了完整的USB驅(qū)動(dòng)程序框架。USB總線采用樹(shù)形結(jié)構(gòu),在一條總線上只能有唯一的主機(jī)設(shè)備。 Linux內(nèi)核從主機(jī)和設(shè)備兩個(gè)角度
    發(fā)表于 11-06 17:59 ?20次下載
    如何使用<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>實(shí)現(xiàn)USB<b class='flag-5'>驅(qū)動(dòng)</b>程序框架

    Linux內(nèi)核GPIO操作函數(shù)的詳解分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux內(nèi)核GPIO操作函數(shù)的詳解分析免費(fèi)下載。
    發(fā)表于 01-22 16:58 ?28次下載

    Linux內(nèi)核ISP驅(qū)動(dòng)流程分析

    應(yīng)用層就是通過(guò)訪問(wèn)video_device生成的節(jié)點(diǎn)來(lái)進(jìn)行操作Camera,所以video_device注冊(cè)時(shí)指定了很多ioctl函數(shù)。
    的頭像 發(fā)表于 08-07 16:13 ?5906次閱讀

    Linux內(nèi)核SoftIrq源代碼分析

    我們?cè)?b class='flag-5'>分析linux內(nèi)核中斷剖析時(shí),簡(jiǎn)單的聊了一下SOFTIRQ, 而沒(méi)有進(jìn)行深入分析. Linux內(nèi)核
    發(fā)表于 06-23 15:22 ?606次閱讀

    Linux內(nèi)核代碼60%都是驅(qū)動(dòng)

    為什么Linux內(nèi)核代碼60%都是驅(qū)動(dòng)? 如果每支持新的設(shè)備就加入驅(qū)動(dòng),內(nèi)核會(huì)不會(huì)變得越來(lái)越臃腫?
    的頭像 發(fā)表于 07-11 11:48 ?994次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>代碼60%都是<b class='flag-5'>驅(qū)動(dòng)</b>?

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫
    的頭像 發(fā)表于 08-30 15:02 ?517次閱讀
    主站蜘蛛池模板: 亚洲色噜噜狠狠站欲八| 国产精品-区区久久久狼| 99青草青草久热精品视频| 精品高潮呻吟99AV无码| 窝窝色资源站| 欧美性xxxx18| 中文字幕国产在线观看| 狠日狠干日曰射| 亚洲AV无码一区二区色情蜜芽 | 国产精品网红女主播久久久| 欧洲精品一区二区不卡观看| 97免费视频在线观看| 美女乱草鲍高清照片| 最近免费中文字幕MV在线视频3| 狠狠狠狠狠狠干| 亚洲中文字幕手机版| 久久精品黄色| 123成人站| 欧美日韩一区在线观看| 9久爱午夜视频| 日韩美一区二区| 国产午夜AV无码无片久久96| 亚洲 天堂 欧美 日韩 国产| 娇妻在床上迎合男人| 中国女人精69xxxxxx视频| 免费观看美女的网站| 陈红下面又紧又小好爽| 特级毛片s级全部免费| 幻女FREE性俄罗斯学生| 在线播放免费人成视频| 女的把腿张开男的往里面插 | 日本三级床震| 国产精品人妻一区免费看8C0M| 我的家庭女教师| 好紧好湿太硬了我太爽了小说| 优优色影院| 人妻无码AV中文系统久久免费| 国产高清精品自在久久| 亚洲免费在线视频观看| 男人大臿蕉香蕉大视频| 国产WW高清大片免费看|