Camera driver porting

原文参考

        近来刚接手项目的camera驱动,除了查看平台文档和sensor的到规格书,也在网上查看了高手们到经验。本人对camera还是比较陌生的,奈何公司无人过问,只好按部就班的来吧!

和大部分驱动的调试相差无几,还是在前人的工作基础上进行的。项目采用高通7627平台,sensor采用ov7675。

驱动移植

1.内核驱动移植

sensor信息记录在android\kernel\arch\arm\mach-msm\board-msm7x27.c文件中,board file中要更改的信息如下:

(1)为sensor添加相应的i2c驱动,加到i2c_devices[]数组中,这里是使用i2c总线的设备数组。机器启动时会注册相应设备。

static struct i2c_board_info i2c_devices[] = {

#ifdef CONFIG_MT9D112

{

I2C_BOARD_INFO("mt9d112", 0x60 >> 1),//这是7bit形式,采用硬件I2C,把真实的读或写地址右移一位即可

},

#endif

......}

(2)msm_camera_sensor_info包含了设备启动信息。添加一个新的sensor驱动,就必须填写这样的一个结构体,包括sensor所使用的GPIO口。结构体中的sensor name将被用作driver id。

static struct msm_camera_sensor_info msm_camera_sensor_mt9d112_data = {

.sensor_name = "mt9d112", //将被用作driver id

.sensor_reset = 1, //sensor reset GPIO

.sensor_pwd = 20, //电源开关

.vcm_pwd = 0, //用作自动对焦。0表示不使用。

.vcm_enable = 0,

.pdata = &msm_camera_device_data,

.flash_data = &flash_mt9d112

};

另外还要把sensor注册成platform_device。

(3)修改i2c地址。gpio表修改,使用8线输入。修改camera_on_gpio_table[]和camera_off_gpio_table[]两个数组。由于平台采用的是双核架构,在功能上有所区分,个别GPIO需要在modem那边配置成app这边控制。

(4)创建自己的驱动文件。使用YUV sensor则查看android\kernel\drivers\media\video\msm\mt9d112.c,若使用bayer sensor则查看android\kernel\drivers\media\video\msm\mt9t013.c。这里不作详细说明。

(5)完成上述工作后,修改Kconfig和Makefile文件。

2.用户空间驱动

(1)用户空间驱动主要在vendor目录下,把自己的sensor加到sensors[]中,以便启动自己的senor。

static sensor_proc_start_t sensors[] = {

SENSORS_PROCCESS_START(mt9d112),

......};

(2)修改sensor相关参数:例如sensor类型,sensor输出格式,输出图像大小等等。\android\vendor\qcom-proprietary\mm-camera\targets\tgtcommon\sensor\mt9d112\mt9d112.c,这些参数必须得到正确的修改,否则sensor将启动不了。

(3)mt9d112_process_start函数中为VFE具体配置一些参数。

(4)mt9d112_video_config函数做了一些IO configuration调研,和内核mt9d112_set_sensor_mode是相关联的。通过IOCTL调用,相应的寄存器值会通过i2c总线写入sensor。

写入sensor寄存器的值(mt9d112_set_sensor_mode)必须和vfe_camif配置的值(mt9d112_video_config)相匹配,如果使用YUVsensor,需将每行像素值定义为预览模式下 的两倍。

其他重要的部分还包括HAL层的配置vendor/qcom/android-open/libcamera2\QualcommCameraHardware.cpp,

android\packages\apps\Camera\res\layout\camera.xml。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
将Realtek蓝牙USB驱动程序移植到其他设备需要进行一些步骤和准备工作。首先,我们需要了解目标设备的硬件架构和操作系统。然后,我们需要获取Realtek蓝牙USB驱动程序的源代码和相关文档。接下来,我们可以按照以下步骤来进行移植: 1. 编译环境的设置:为了编译驱动程序,我们需要配置适当的编译环境,例如交叉编译工具链和相关的库和头文件。这将确保我们能够正确地编译驱动程序。 2. 理解目标设备的内核:我们需要了解目标设备的内核的版本和配置。这将帮助我们确定驱动程序是否与目标设备的内核兼容,并且它所需的功能和配置是否可用。 3. 移植驱动程序:我们可以采取以下步骤来移植驱动程序到目标设备上: - 修改驱动程序的Makefile和配置文件,以适应目标设备的内核配置和硬件特性。 - 根据目标设备的硬件特性,修改驱动程序的代码,以确保其与目标设备的硬件兼容。 - 如果需要,将驱动程序与目标设备的内核源代码进行整合,以确保其正确地与内核交互。 - 进行编译和构建,生成目标设备上可执行的驱动程序文件。 4. 测试和调试:完成移植后,我们需要对驱动程序进行测试和调试,以确保其在目标设备上正常工作。我们可以使用调试工具和设备的日志记录功能来分析和修复可能出现的问题。 总结起来,移植Realtek蓝牙USB驱动程序到其他设备需要进行一系列的步骤,包括编译环境的设置、目标设备的内核配置和硬件分析、代码的修改和整合、以及测试和调试。这样,我们就可以将Realtek蓝牙USB驱动程序成功地移植到其他设备上,并使其正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值