摄像头驱动源码解析.docVIP

  • 7
  • 0
  • 约 14页
  • 2017-06-07 发布于湖北
  • 举报
摄像头驱动源码解析

基于2.6.35内核的OV9650摄像头驱动分析 驱动分析: 打开ov9650驱动首先找到驱动入口函数 static int __init s5pc100_camera_init(void) 在这个函数中间做只有一句话 platform_driver_register(s5pc100_camera_driver); 这个就是平台驱动注册,所以在驱动注册之前我们需要构建s5pc100_camera_driver这个结构体,并且在内核中间我们需要添加平台资源信息,在这里平台资源的信息中间的name这个成员必须跟s5pc100_camera_driver这个结构体中间的成员name一致,这个在平台驱动注册的时候内核遍历内核的时候才能找到我们的加进去的平台资源配对成功,在platform_driver_register函数注册成功的时候,内核就会调用5pc100_camera_driver结构体中间的probe成员执行,我们先来看看5pc100_camera_driver这个结构体 struct platform_driver s5pc100_camera_driver = { .probe = s5pc100_camera_probe, .remove = __devexit_p(s5pc100_camera_remove), .driver = { .name = s5pc100-camif, }, }; 当驱动加载platform_driver_register注册成功的时候内核就会调用probe成员,驱动卸载的时候就会调用remove成员,我们先来看看驱动注册的时候做了什么事情,来看看这个probe函数s5pc100_camera_probe camera_gpio_cfg(); 这个是camera接口的io楼设置看看这个函数的内容 static void camera_gpio_cfg(void) { s3c_gpio_cfgpin(S5PC100_GPE0(0), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(1), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(2), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(3), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(4), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(5), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(6), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE0(7), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE1(0), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE1(1), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE1(2), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE1(3), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE1(4), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PC100_GPE1(5), S3C_GPIO_SFN(2)); //s3c_gpio_setpull(cam-base_addr + S5PC100_GPB(2), S3C_GPIO_PULL_UP); } 我们这里根据数据手册就可以发现这里就是设置io的功能为camera接口如下图 camera_dev = kzalloc(sizeof(struct s5pc100_camera_device), GFP_KE

文档评论(0)

1亿VIP精品文档

相关文档