【米尔-全志T113-i开发板试用】基础开发环境配置和opencv-mobile移植测试
MYC-YT113i核心板及开发板
真正的国产核心板,100%国产物料认证
- 国产T113-i处理器配备2*Cortex-A7@1.2GHz ,RISC-V;
- 外置DDR3接口、支持视频编解码器、HiFi4 DSP;
- 接口丰富:视频采集接口、显示器接口、USB2.0 接口、CAN 接口、千兆以太网接口;
- 工业级:-40℃~+85℃、尺寸37mm*39mm;
- 邮票孔+LGA,140+50PIN;
系统启动
使用配套的 12V2A 电源输入,串口接入debug连接电脑usb,同时用 usba-c 线连接电脑和开发板USB-OTG
拨动开关,开发板的灯会亮起,过一会儿就自动进入系统,绿灯和蓝灯闪烁
串口方式,root权限执行 tio /dev/ttyUSB0
可以观察启动和运行日志
串口中输入 root 回车,无密码登录,此时内存占用
sh-4.4# free -m
total used free shared buffers cached
Mem: 485 123 361 0 2 75
-/+ buffers/cache: 45 439
Swap: 0 0 0
有个示例应用 mxapp2 自动启动,占用了较多资源 killall mxapp2
释放
sh-4.4# killall mxapp2
sh-4.4# free -m
total used free shared buffers cached
Mem: 485 105 379 0 2 75
-/+ buffers/cache: 28 456
Swap: 0 0 0
系统自带 ssh 服务,在配置好密码后,插上网线能 ssh 上去,不过还是 adb 方便些
沿袭全志的传统,系统自带 adb 功能,可以直接 adb push localfile /root/
和 adb pull /root/remotefile .
上传和下载文件
也可以用 adb shell
登录系统
编译opencv-mobile
opencv-mobile 通过调整编译参数,删减部分opencv源码,来最小化编译的 opencv 库
提供了 opencv 常用的功能,如读写图片,处理,矩阵操作等等 版本与上游同步,无第三方依赖
在绝大多数情况下,以 1/10 的体积无痛替换官方 opencv,尤其适合对体积有特殊要求的移动端和嵌入式环境
下载编译工具链 https://github.com/MYIR-ALLWINNER/toolchain
git clone https://github.com/MYIR-ALLWINNER/toolchain.git MYIR-ALLWINNER-toolchain
打开 https://github.com/nihui/opencv-mobile
下载最新 opencv-mobile 源码
使用 cmake 搭配 opencv-mobile 的 toolchain 文件进行编译
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER "arm-linux-gnueabi-gcc")
set(CMAKE_CXX_COMPILER "arm-linux-gnueabi-g++")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv4")
set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv4")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
具体命令
export PATH=$PATH:/home/nihui/osd/MYIR-ALLWINNER-toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../../toolchains/arm-linux-gnueabi.toolchain.cmake -DCMAKE_C_FLAGS="-fno-rtti -fno-exceptions" -DCMAKE_CXX_FLAGS="-fno-rtti -fno-exceptions" -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release `cat ../options.txt` -DBUILD_opencv_world=OFF -DOPENCV_DISABLE_FILESYSTEM_SUPPORT=ON ..
make -j4
make install
测试opencv-mobile
编写个使用 opencv 读取图片,缩放到200x200大小,保存图片的测试程序
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main()
{
cv::Mat bgr = cv::imread("in.jpg", 1);
cv::resize(bgr, bgr, cv::Size(200, 200));
cv::imwrite("out.jpg", bgr);
return 0;
}
编写个cmake工程文件
project(opencv-mobile-test)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV REQUIRED)
add_executable(opencv-mobile-test main.cpp)
target_link_libraries(opencv-mobile-test ${OpenCV_LIBS})
编译命令
cmake -DCMAKE_TOOLCHAIN_FILE=../arm-linux-gnueabi.toolchain.cmake -DOpenCV_DIR=/home/nihui/osd/opencv-mobile-4.8.1/build/install/lib/cmake/opencv4 ..
make
将测试程序以及图片一起上传到开发板
adb push opencv-mobile-test /root/
adb push in.jpg /root/
adb shell
登录开发板,运行提示缺库报错
sh-4.4# ./opencv-mobile-test
./opencv-mobile-test: error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directory
这是因为开发板系统中没有 libgomp.so.1 文件,我们可以把工具链中的 libgomp.so.1 拷贝到开发板上使用
adb pull /home/nihui/osd/MYIR-ALLWINNER-toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/lib/libgomp.so.1 /root/
设置 LD_LIBRARY_PATH 后再次运行成功,并存出了结果图片
sh-4.4# LD_LIBRARY_PATH=. ./opencv-mobile-test
this device is not whitelisted for jpeg decoder cvi
this device is not whitelisted for jpeg decoder cvi
this device is not whitelisted for jpeg decoder cvi
this device is not whitelisted for jpeg encoder rkmpp
sh-4.4# ls -l
total 3832
-rw-rw-rw- 1 root root 557455 Sep 2 2023 in.jpg
-rwxrwxrwx 1 root root 918576 Dec 27 2023 libgomp.so.1
-rwxrwxrwx 1 root root 2420200 Dec 27 2023 opencv-mobile-test
-rw-rw-rw- 1 root root 18091 Jan 1 00:29 out.jpg
将输出图片下载到电脑上
adb pull /root/out.jpg
打开out.jpg 可以看到缩放后的图片,验证 opencv 功能正常可用