You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何让搭载EM28XX芯片的摄像头在Android 7.1.1(Kernel 3.18)设备上工作?

针对EM28XX摄像头在Android 7.1.1(Kernel 3.18)上的适配方案

结合你在Linux系统上的成功适配经验,Android内核基于Linux架构,所以适配思路和Linaro有共通点,但要兼顾Android特有的系统机制,我给你梳理几个关键步骤和排查点:

一、内核驱动的移植与编译

Android 7.1.1的3.18内核大概率默认未开启EM28XX驱动支持,你可以按以下流程操作:

  1. 获取你设备对应的Android内核源码(定制设备需联系厂商获取对应分支,通用设备可找公开的内核镜像源码)
  2. 配置内核选项:
    • 进入内核源码目录,执行make menuconfig打开配置界面
    • 依次展开 Device Drivers -> Multimedia support -> Media USB Adapters
    • 勾选EM28XX USB Video Capture Devices(建议选模块编译M,方便调试;若需内置则选Y
    • 确保依赖的V4L2视频框架选项也已开启
  3. 编译并刷入:
    • 若编译为模块,将生成的em28xx.ko推送到设备/system/lib/modules目录,执行insmod em28xx.ko加载驱动
    • 若内置到内核,直接编译boot镜像并刷入设备

二、设备节点与权限配置

Android对设备节点的权限管控比普通Linux严格,即使驱动加载成功,也可能因权限问题无法访问:

  • 驱动加载后,通过ls /dev/video*检查是否生成摄像头节点(通常是/dev/video0
  • 临时测试权限:执行chmod 666 /dev/video0,然后尝试访问摄像头
  • 永久配置:在设备的init.rc文件中添加以下内容,重启后生效:
    chmod 666 /dev/video0
    chown system:system /dev/video0
    
  • 应用权限:确保测试应用已申请CAMERA权限(Android 6.0+需动态申请),若需保存图像还需WRITE_EXTERNAL_STORAGE权限

三、用户空间测试与适配

Linux上的mplayer/xawtv无法直接在Android上使用,你可以用这些方式验证:

  • 交叉编译Android版本的v4l2-ctl工具,推送到设备后执行:
    • v4l2-ctl --list-devices:确认摄像头被系统识别
    • v4l2-ctl --stream-mmap --stream-to=/sdcard/test.yuv:测试捕获视频流
  • 编写简易Android应用:
    • 对于USB摄像头,需使用UsbManager枚举设备并申请访问权限
    • 可基于第三方USB摄像头库(如移植版libuvc)快速开发测试代码

四、常见坑点排查

  • 内核兼容性:3.18内核的EM28XX驱动可能存在bug,可查看内核更新日志,或从更高版本内核中backport适配3.18的补丁
  • USB供电:Android设备USB口供电可能不足,导致摄像头无法启动,可尝试使用带外接电源的USB hub
  • SELinux限制:若设备开启SELinux,可能阻止驱动加载或节点访问,可临时执行setenforce 0关闭测试,再针对性配置SELinux规则

内容的提问来源于stack exchange,提问作者Literator

火山引擎 最新活动