网络摄像头4 cmos 0v9650,driver

news/2024/10/18 21:24:23/
将ov9650的驱动编译进内核
 Device Drivers  ---> <*> Multimedia support  --->  <*>   OV9650 on the S3C2440 driver

查看这项的help,可知符号
Symbol: S3C2440_CAMERA [=y]    
在目录/opt/FriendlyArm/mini2440/linux-2.6.32.2/drivers/media/video的Makefile里面找到以下2行

obj-$(CONFIG_S3C2440_CAMERA) += s3c2440camera.o
s3c2440camera-objs    :=    s3c2440_ov9650.o sccb.o s3c2440camif.o

可见0v9650的驱动由3个c文件构成,如下
s3c2440camif.c
s3c2440_ov9650.c
sccb.c
还有两个h文件
s3c2440camif.h
sccb.h
(并且可如果编译成模块的话,生成s3c2440camera.ko)


其中
s3c2440camif.c用于从cmos接口获取图像数据和 将数据传输到进程空间(在有app读取时)。比如创建misc设备,设备名字是camera。在misc中仅实现3个方法open,read,release。没有ioctl(和mmap),所以在网络摄像头2里所看到的来自app的ioctl会失败。
s3c2440_ov9650.c 读取和配置ov9650寄存器。通过iic接口传输数据。设备地址是60(#define OV9650_SCCB_ADDR    0x60).比如进行初始化和product id获取.
sccb.c 定义了去读ov9650的寄存器的具体方法,是时序模拟的iic。而 s3c2440_ov9650.c里是调用这些具体方法去读写ov9650的寄存器的。
**************************************************************硬件连接******************************************
cmos ov9650的引脚

2440处理器cmos接口

用于传输ov9650的寄存器配置信息即工作参数,ov9650<--->2440
电源控制,ov9650<---2440
用户ov9650传输捕获的图像数据,ov9650--->2440

查看ov9650的spec可知其输出的数据格式


**************************************************************驱动分析****************************************************

/** camif_init()*/
static int __init camif_init(void)
{int ret;struct s3c2440camif_dev * pdev;struct clk * camif_upll_clk;printk(KERN_ALERT"initializing s3c2440 camera interface......\n");pdev = &camera;/* set gpio-j to camera mode. */s3c2410_gpio_cfgpin(S3C2440_GPJ0, S3C2440_GPJ0_CAMDATA0);s3c2410_gpio_cfgpin(S3C2440_GPJ1, S3C2440_GPJ1_CAMDATA1);s3c2410_gpio_cfgpin(S3C2440_GPJ2, S3C2440_GPJ2_CAMDATA2);s3c2410_gpio_cfgpin(S3C2440_GPJ3, S3C2440_GPJ3_CAMDATA3);s3c2410_gpio_cfgpin(S3C2440_GPJ4, S3C2440_GPJ4_CAMDATA4);s3c2410_gpio_cfgpin(S3C2440_GPJ5, S3C2440_GPJ5_CAMDATA5);s3c2410_gpio_cfgpin(S3C2440_GPJ6, S3C2440_GPJ6_CAMDATA6);s3c2410_gpio_cfgpin(S3C2440_GPJ7, S3C2440_GPJ7_CAMDATA7);s3c2410_gpio_cfgpin(S3C2440_GPJ8, S3C2440_GPJ8_CAMPCLK);s3c2410_gpio_cfgpin(S3C2440_GPJ9, S3C2440_GPJ9_CAMVSYNC);s3c2410_gpio_cfgpin(S3C2440_GPJ10, S3C2440_GPJ10_CAMHREF);s3c2410_gpio_cfgpin(S3C2440_GPJ11, S3C2440_GPJ11_CAMCLKOUT);s3c2410_gpio_cfgpin(S3C2440_GPJ12, S3C2440_GPJ12_CAMRESET);/* init camera's virtual memory. */if (!request_mem_region((unsigned long)S3C2440_PA_CAMIF, S3C2440_SZ_CAMIF, CARD_NAME)){ret = -EBUSY;goto error1;}/* remap the virtual memory. */camif_base_addr = (unsigned long)ioremap_nocache((unsigned long)S3C2440_PA_CAMIF, S3C2440_SZ_CAMIF);if (camif_base_addr == (unsigned long)NULL){ret = -EBUSY;goto error2;}/* init camera clock. */pdev->clk = clk_get(NULL, "camif");if (IS_ERR(pdev->clk)){ret = -ENOENT;goto error3;}clk_enable(pdev->clk);camif_upll_clk = clk_get(NULL, "camif-upll");clk_set_rate(camif_upll_clk, 24000000);mdelay(100);/* init reference counter and its mutex. */mutex_init(&pdev->rcmutex);pdev->rc = 0;/* init image input source. */pdev->input = 0;/* init camif state and its lock. */pdev->state = CAMIF_STATE_FREE;/* init command code, command lock and the command wait queue. */pdev->cmdcode = CAMIF_CMD_NONE;init_waitqueue_head(&pdev->cmdqueue);/* register to videodev layer. */if (misc_register(&misc) < 0){ret = -EBUSY;goto error4;}printk(KERN_ALERT"s3c2440 camif init done\n");sccb_init();hw_reset_camif();has_ov9650 = s3c2440_ov9650_init() >= 0;s3c2410_gpio_setpin(S3C2410_GPG(4), 1);return 0;error4:clk_put(pdev->clk);
error3:iounmap((void *)camif_base_addr);
error2:release_mem_region((unsigned long)S3C2440_PA_CAMIF, S3C2440_SZ_CAMIF);error1:return ret;
}






转载于:https://www.cnblogs.com/-song/archive/2011/11/25/3331928.html


http://www.ppmy.cn/news/152463.html

相关文章

android9 三星 港版,三星S9+官方港版安卓9固件rom刷机包:TGY-G9650ZHS4CSD7

咱们的三星Galaxy S9手机也是在4月28日同步更新了最新的港版固件系统rom固件刷机包&#xff0c;也是这个安卓9的&#xff0c;是完整版本的线刷格式的rom系统包TGY-G9650ZHS4CSD7&#xff0c;可以用于系统的升级更新用&#xff0c;也可以用于救砖操作&#xff0c;有需要同学可以…

ov9650摄像头驱动之——linux内核v4l2架构分析

ov9650摄像头驱动之——linux内核v4l2架构分析1 本系列准备分为3-4篇来讲&#xff0c;因为说的太多会比较乱 v4l2视频驱动主要涉及几个知识点&#xff1a;  摄像头方面的知识&#xff08;摄像头厂家提供的芯片手册可以查看&#xff09; 要了解选用的摄像头的特性&#xff…

android9 三星 港版,三星S9+官方港版安卓9固件系统线刷包:TGY-G9650ZHU4CSE7

三星Galaxy S9官方港版手机三星G9650在6月11日同步更新了相关的系统rom刷机包&#xff0c;也就是原版的完整rom包了&#xff0c;是多件套形式的固件包&#xff0c;系统的版本号是TGY-G9650ZHU4CSE7&#xff0c;也是安卓9版本的&#xff0c;下载下来解压出来采用Odin工具来进行刷…

ov9650的dummy pixel和dummy line

最近给ov9650摄像头调了下帧率&#xff0c;需要用到dummy pixel和dummy line&#xff0c;为了便于观察&#xff0c;有个24M采样的USB逻辑分析仪采集VSYNC和HREF信号验证会好得多。 ov9650调整帧率的当然也可以通过0x11寄存器bit[5:0]对外部时钟分频的方法降低&#xff0c;这里…

基于2.6.35内核的OV9650摄像头驱动分析

基于2.6.35内核的OV9650摄像头驱动分析 驱动分析&#xff1a; 打开ov9650驱动首先找到驱动入口函数 static int __init s5pc100_camera_init(void) 在这个函数中间做只有一句话 platform_driver_register(&s5pc100_camera_driver); 这个就是平台驱动注册&#xff0c;所以在…

OV9650驱动程序跟踪

学习了裸机OV9650的P通道LCD直接显示程序&#xff0c;作为这点基础开始分析OV9650在linux设备驱动程序。昨天看了点这个驱动程序&#xff0c;让我很郁闷的是写这个程序的人是有毛病还是怎么回事&#xff0c;简简单单的IO口功能引脚的定义&#xff0c;整出了一个套一个的定义&am…

Midjourney万能高清咒语,真正的近看也美

明明我都拿人家的图垫图了&#xff0c;为什么质量还是很差&#xff1f; 明明别人都把咒语分享出来了&#xff0c;为什么质量还是很差&#xff1f; 今天我们就来解决这两个问题&#xff0c;看到就是缘分&#xff0c;点点手指来个小心心不过分吧&#xff0c;哈哈 什么你在怀疑我的…

大数据架构

1.1 如何构建大数据平台&#xff1f; 1.1.1 数据库与ER建模 1.1.1.1 数据库&#xff08;DataBase&#xff09;1.1.1.2 数据库三范式1.1.1.3 ER实体关系模型1.1.1.4 ER实体关系模型案例1.1.2 数据仓库构建与分层 1.1.2.1 为什么构建数据仓库1.1.2.2 什么是数据仓库1.1.2.3 数据仓…