# Tiny6410_Camera_Mic **Repository Path**: unbt/tiny6410_-camera_-mic ## Basic Information - **Project Name**: Tiny6410_Camera_Mic - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-24 - **Last Updated**: 2026-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tiny6410_Camera_Mic ## 介绍 在 Tiny6410(S3C6410 ARM11)开发板上实现的 **USB 摄像头 + 麦克风全栈采集工程**: - 通过 UVC 免驱摄像头(ARKMICRO 18EC:3399)实现 **V4L2 + MJPEG 视频采集**,Qt/Embedded 4.7 全屏中文界面实时预览、拍照保存; - 同一摄像头的 **USB 麦克风** 通过 ALSA(snd-usb-audio)实现电平表、5 秒录音(WAV)与回放; - 完整覆盖内核模块交叉编译、根文件系统固化、开机自启的部署链路。 **实测性能**:320×240 MJPEG 流畅预览;640×480 约 5.7 fps(受 USB 1.1 带宽限制);麦克风录音峰值 ~15034 / 底噪 ~800,信噪比良好。 ## 功能特性 | 功能 | 说明 | |---|---| | 视频预览 | V4L2 MJPEG 采集,libjpeg 解码,cover-crop 铺满 480×272 屏 | | 分辨率切换 | 320×240 / 640×480 / 160×120 / 352×288 / 176×144 | | 拍照保存 | 优先存 `/sdcard/images/`,回退 `/tmp`,JPEG 质量 85 | | 麦克风测试 | 实时电平表(100ms 刷新)、录音 5 秒存 WAV、`aplay` 回放 | | 输入 | 电阻触摸屏(Tslib 校准)+ USB 鼠标(usbhid,PS/2 协议) | | 开机自启 | init.d 服务脚本:按依赖序加载 10 个内核模块 → 点亮背光 → 启动 UI | ## 硬件环境 - Tiny6410 开发板(S3C6410X,256MB NAND,4.3 寸 480×272 一线触摸屏) - 内核 2.6.38-FriendlyARM - USB 摄像头:ARKMICRO 18EC:3399(UVC,MJPEG/YUYV,内置麦克风),经**独立供电 USB Hub** 中转接入(解决直插信号裕量不足导致的枚举 error -62) - 交叉编译服务器:arm-linux-gcc 4.5.1 + Qt/Embedded 4.7.0-arm ## 目录结构 ```text Tiny6410_Camera_Mic/ ├── qt-usbcam-ui/ # Qt4 应用源码 │ ├── usbcam.pro # qmake 工程文件(链接 -ljpeg -lasound) │ ├── main.cpp / mainwindow.* # UI:设备枚举、预览、拍照、麦克风控制 │ ├── capturethread.* # V4L2 MJPEG 采集线程 │ ├── micthread.* # ALSA 麦克风采集线程 │ ├── usbcam.sh # 板端启动脚本(QWS/输入环境/背光) │ └── tools/capture.c # 命令行采集验证工具(/usr/bin/capture) ├── usbcam.service # 板端 init.d 服务脚本(模块加载 + 自启) ├── rcS.board # 单板 rcS 参考副本(挂接自启入口) ├── Tiny6410_USB摄像头全栈实现详解.md # 全栈实现深度复盘(含 Mermaid 架构图) ├── Tiny6410_USB摄像头适配分析.md # 出厂 UI 不兼容分析与自研方案 └── Tiny6410_串口与摄像头操作经验.md # 串口/FTP/固化操作经验 ``` ## 构建方法 在交叉编译服务器上: ```sh # Qt4 UI 应用 cd /tmp/usbcam-build # 拷入 qt-usbcam-ui/ 源码 /usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin/qmake usbcam.pro make # 生成 usbcam(ARM 可执行) # 命令行采集工具 arm-linux-gcc capture.c -o capture -ljpeg # 内核模块(内核源码树,模块已固化于 /lib/modules/2.6.38-FriendlyARM/usb/) # usbcore / ohci-hcd / usbhid / videobuf-core / videobuf-vmalloc / uvcvideo # snd-hwdep / snd-rawmidi / snd-usbmidi-lib / snd-usb-audio ``` ## 部署方法 1. FTP(被动模式,root@单板)上传 `usbcam` → `/usr/bin/`,`.ko` → `/lib/modules/2.6.38-FriendlyARM/usb/`; 2. 部署 `usbcam.service` 为 `/etc/rc.d/init.d/usbcam` 并加可执行权限,在 `rcS` 中挂接; 3. 上电自启流程:加载模块(lsmod 防重入)→ 一线背光 `echo 127 > /dev/backlight-1wire` → 清理 Qtopia 进程 → `usbcam -qws`。 ## 使用说明 1. 单板上电后自动进入摄像头界面(或手动执行 `/etc/rc.d/init.d/usbcam start`); 2. 下拉框选择 `/dev/video2`(USB 摄像头)与分辨率,点击「开始采集」; 3. 「拍照保存」输出 JPEG;「麦克风:开」开启电平表,「录音5秒」→「回放」测试音频链路; 4. 命令行快速验证:`capture /dev/video2 out.jpg 320x240`。 ## 技术要点 - **MJPEG 选型依据**:USB 1.1(OHCI,12Mbps)带宽下 YUYV 640×480@30fps 需 ~141Mbps 物理不可能,MJPEG 帧内压缩后可行; - **QWS 独占显示**:出厂 Qtopia 为 Qt2.3,与 Qt4 QWS 协议不兼容,需 killall 后以 `-qws` 独占 framebuffer; - **输入协议**:`QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice"`(Qt4 协议名,Qt2 时代的 TPanel/USB 不被识别); - **ALSA 采样率**:麦克风固定 48000Hz/mono/S16_LE,period 4800 帧(100ms),overrun 后 `snd_pcm_prepare` 恢复。 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request