准备开发环境
首先准备一台 Ubuntu 20.04 / Ubuntu 18.04 / Ubuntu 16.04 / Ubuntu 14.04 的虚拟机或实体机,其他系统没有测试过出 BUG 不管。
更新系统,安装基础软件包
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential subversion git libncurses5-dev zlib1g-dev gawk flex bison quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lsof python3 python2 python3-dev android-tools-mkbootimg python2 libpython3-dev
安装完成后还需要安装 i386 支持,SDK 有几个打包固件使用的程序是 32 位的,如果不安装就等着 Segment fault
吧。
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt install gcc-multilib
sudo apt install libc6:i386 libstdc++6:i386 lib32z1
下载 AWOL Tina Linux BSP
注册一个 AWOL 账号
下载 SDK 需要使用 AWOL 的账号,前往 https://bbs.aw-ol.com/
注册一个就行。其中需要账号等级为 LV2,可以去这个帖子:https://bbs.aw-ol.com/topic/4158/share/1 水四条回复就有 LV2 等级了。
安装 repo 管理器
BSP 使用 repo
下载,首先安装 repo
,这里建议使用国内镜像源安装
mkdir -p ~/.bin
PATH="${
HOME}/.bin:${
PATH}"
curl https://mirrors.bfsu.edu.cn/git/git-repo > ~/.bin/repo
chmod a+rx ~/.bin/repo
请注意这里使用的是临时安装,安装完成后重启终端就没有了,需要再次运行下面的命令才能使用,如何永久安装请自行百度。
PATH="${
HOME}/.bin:${
PATH}"
安装使用 repo
的过程中会遇到各种错误,请百度解决。repo 是谷歌开发的,repo 的官方服务器是谷歌的服务器,repo 每次运行时需要检查更新然后卡死,这是很正常的情况,所以在国内需要更换镜像源提高下载速度。将如下内容复制到你的~/.bashrc
里
echo export REPO_URL='https://mirrors.bfsu.edu.cn/git/git-repo' >> ~/.bashrc
source ~/.bashrc
如果您使用的是 dash、hash、 zsh 等 shell,请参照 shell 的文档配置。环境变量配置一个 REPO_URL
的地址
配置一下 git 身份认证,设置保存 git 账号密码不用每次都输入。
git config --global credential.helper store
新建文件夹保存 SDK
使用 mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后 cd
进入到刚才新建的文件夹中。
mkdir tina-v853-open
cd tina-v853-open
初始化 repo 仓库
使用 repo init
命令初始化仓库,tina-v853-open
的仓库地址是 https://sdk.aw-ol.com/git_repo/V853Tina_Open/manifest.git
需要执行命令:
repo init -u https://sdk.aw-ol.com/git_repo/V853Tina_Open/manifest.git -b master -m tina-v853-open.xml
拉取 SDK
repo sync
创建开发环境
repo start devboard-v853-tina-for-awol --all
适配 TinyVision 板子
刚才下载到的 SDK 只支持一个板子,售价 1999 的 V853-Vision
开发板,这里要添加自己的板子的适配。
下载支持包:
版本 | 下载地址 |
---|---|
1.0 | https://github.com/YuzukiTsuru/YuzukiTsuru.GitHub.io/releases/download/2024-01-21-20240121/tina-bsp-tinyvision.tar.gz |
1.1 | https://github.com/YuzukiHD/TinyVision/releases/download/tina.0.0.1/tina-bsp-tinyvision.tar.gz |
1.2 | https://github.com/YuzukiHD/TinyVision/releases/download/tina.0.0.2/tina-bsp-tinyvision.tar.gz |
或者可以在:https://github.com/YuzukiHD/TinyVision/tree/main/tina 下载到文件,不过这部分没预先下载软件包到 dl 文件夹所以编译的时候需要手动下载。
放到 SDK 的主目录下
运行解压指令
tar xvf tina-bsp-tinyvision.tar.gz
即可使 Tina SDK 支持 TinyVision 板子
初始化 SDK 环境
每次开发之前都需要初始化 SDK 环境,命令如下
source build/envsetup.sh
然后按 1 选择 TinyVision
适配 ISP
Tina SDK 内置一个 libAWispApi 的包,支持在用户层对接 ISP,但是很可惜这个包没有适配 V85x 系列,这里就需要自行适配。其实适配很简单,SDK 已经提供了 lib 只是没提供编译支持。我们需要加上这个支持。
前往 openwrt/package/allwinner/vision/libAWIspApi/machinfo
文件夹中,新建一个文件夹 v851se
,然后新建文件 build.mk
写入如下配置:
ISP_DIR:=isp600
对于 v851s,v853 也可以这样操作,然后 m menuconfig
勾选上这个包
开启 camerademo 测试摄像头
进入 m menuconfig
进入如下页面进行配置。
Allwinner --->
Vision --->
<*> camerademo........................................ camerademo test sensor --->
[*] Enabel vin isp support
编译系统然后烧录系统,运行命令 camerademo
,可以看到是正常拍摄照片的
适配板载 SD NAND
设备树中的 SDC2 节点修改如下,之后线刷即可
&sdc2 {
non-removable;
bus-width = <4>;
mmc-ddr-3_3v;
/*mmc-hs200-1_8v;*/
/*mmc-hs400-1_8v;*/
no-sdio;
/delete-property/ no-sd;
no-mmc;
ctl-spec-caps = <0x8>;
cap-mmc-highspeed;
sunxi-signal-vol-sw-without-pmu;
sunxi-power-save-mode;
/*sunxi-dis-signal-vol-sw;*/
max-frequency = <50000000>;
/*vmmc-supply = <®_dcdc1>;*/
/*emmc io vol 3.3v*/
/*vqmmc-supply = <®_aldo1>;*/
/*emmc io vol 1.8v*/
/*vqmmc-supply = <®_eldo1>;*/
status = "okay";
};
适配 OpenCV
勾选 OpenCV 包
m menuconfig
进入软件包配置,勾选
OpenCV --->
<*> opencv....................................................... opencv libs
[*] Enabel sunxi vin isp support
OpenCV 适配过程
本部分的操作已经包含在 tina-bsp-tinyvision.tar.gz 中了,已经适配好了,如果不想了解如何适配 OpenCV 可以直接跳过这部分
OpenCV 的多平面视频捕获支持
一般来说,如果不适配 OpenCV 直接开摄像头,会得到一个报错:
[ 702.464977] [VIN_ERR]video0 has already stream off
[ 702.473357] [VIN_ERR]gc2053_mipi is not used, video0 cannot be close!
VIDEOIO ERROR: V4L2: Unable to capture video memory.VIDEOIO ERROR: V4L: can't open camera by index 0
/dev/video0 does not support memory mapping
Could not open video device.
这是由于 OpenCV 的 V4L2 实现是使用的 V4L2_CAP_VIDEO_CAPTURE
标准,而 sunxi-vin
驱动的 RAW Sensor 平台使用的是 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
,导致了默认 OpenCV 的配置错误。
V4L2_CAP_VIDEO_CAPTURE_MPLANE
和V4L2_BUF_TYPE_VIDEO_CAPTURE
是 Video4Linux2(V4L2)框架中用于视频捕获的不同类型和能力标志。
V4L2_CAP_VIDEO_CAPTURE_MPLANE
: 这个标志指示设备支持多平面(multi-plane)视频捕获。在多平面捕获中,图像数据可以分解成多个平面(planes),每