在树莓派zero上使用NCS2

在树莓派zero上使用NCS2

简介

树莓派zero是一款低功耗低性能的设备,要在上面跑神经网络模型就需要外接算力设备,英特尔的Intel Neural Compute Stick 2 (NCS2)就是一款合适的设备。本文记录在树莓派zero上使用NCS2的过程以及踩雷。

写在最前边,我因为这个雷耽误了足足一个礼拜。由于树莓派zero使用的是最老的armv6架构(和树莓派一以及iphone1是同一种),而英特尔在当前的openvino版本中已经停止了对armv6的支持,这就意味着使用一般方法并不能在树莓派zero中调用NCS,于是我找到了一篇参考资料。通篇读下来,我理解的是在树莓派上装个qemu虚拟机来模拟高级的架构从而使用NCS,所以在树莓派上一通捣鼓,把树莓派捣鼓死机n次。心态爆炸之后从头开始递归研究参考资料以及参考资料的参考资料,发现我一开始就理解错了!qemu主要的作用是用来在本机模拟其他的架构,arm上模拟arm不等着死循环?正确的流程为:

  1. 在一台Debian(或其他linux系统,未测试)系统的电脑或者虚拟机上装一个qemu虚拟机软件,并在qemu中模拟armv7的树莓派系统。
  2. 在上述armv7树莓派系统中用源代码编译opencv并拷贝到树莓派真机中。
  3. 在上述armv7树莓派系统中用源代码编译openvino并拷贝到树莓派真机中。

没错,这就是个用虚拟机套娃虚拟机进行的交叉编译过程,愚蠢但有效。可以避免乱七八糟的配置污染你的笔记本,并且配环境方面linux比windows好用很多。如果你有自己的好办法也不妨尝试。
下面正文开始(如何使用Vmware安装Debian虚拟机不就不多讲了,请自行查找资料,我默认你现在处于Debian中)(我使用的是Debian10.2)。

参考资料

https://github.com/jacopomaroli/intel-neural-compute-stick-2-raspberry-pi-zero

一、安装qemu

按照参考资料,我们需要的是4.1.0版本。如果使用Debian自带的qemu将会在安装树莓派映像的时候触发Unsupported syscall: 382

qemu简介

总体来说就是个虚拟机。

安装步骤

1、准备工作
更新apt,防止找不到包,如果之后还是找不到就换源再更新,还没有就再换源在更新,总有一个好使的。

sudo apt update

要提前安装flex和bison,编译用。

sudo apt-get install flex bison

提前安装checkinstall,安装用。

sudo apt-get install checkinstall

2、下载资源

wget https://download.qemu.org/qemu-4.1.0.tar.xz 

3、解压资源

tar xvJf qemu-4.1.0.tar.xz

4、编译

cd qemu-4.1.0
mkdir build && cd build
../configure --static --disable-system --enable-linux-user --enable-attr --target-list=arm-linux-user

上边这步可能会出现很多问题,一个一个解决即可,基本都是少东西,把缺的百度一下方法一个一个装上直到成功执行。

make

5、安装
使用checkinstall安装之前要先创建好要用的文件夹,否则可能没有权限导致安装失败。

sudo mkdir /usr/local/var
sudo mkdir /usr/local/share/icons

完了安装就行。

sudo checkinstall

名称写qemu,版本写4.1.0。

二、交叉编译OpenCV(全程缺啥apt install啥)

主要参考 参考资料 和https://blog.csdn.net/weixin_44153007/article/details/109264027

1、安装debootstrap、binfmt-support。
debootstrap是debian/ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)
binfmt-support让我们可以根据一个程序的指纹(比如前十个字节)来选择执行该程序的软件,有点像windows系统的文件后缀。

sudo apt install debootstrap binfmt-support

2、创建树莓派的系统

mkdir ~/raspbian
sudo debootstrap --no-check-gpg --foreign --arch=armhf buster ~/raspbian http://archive.raspbian.org/raspbian

3、告诉系统刚刚创建的系统丢到qemu中打开

sudo update-binfmts --install qemu-arm-static /usr/local/bin/qemu-arm --magic '\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'

4、将树莓派的系统注册到Debian系统中

# qemu要放到树莓派虚拟机中和Debian系统中相同的位置
sudo cp /usr/local/bin/qemu-arm ~/raspbian/usr/local/bin/qemu-arm
sudo chroot ~/raspbian /debootstrap/debootstrap --second-stage

mkdir -p -m 755 ~/raspbian/dev/pts
# 挂载
sudo mount -t proc proc ~/raspbian/proc/
sudo mount -t sysfs sys ~/raspbian/sys/
sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs ~/raspbian/dev
sudo mount -t devpts -o gid=5,mode=620 devpts ~/raspbian/dev/pts
# 更新树莓派的apt并启动
sudo chroot ~/raspbian apt update
sudo chroot ~/raspbian apt upgrade
sudo chroot ~/raspbian

*\如果重启了虚拟机要重新进行挂载

sudo mount -t proc proc ~/raspbian/proc/
sudo mount -t sysfs sys ~/raspbian/sys/
sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs ~/raspbian/dev
sudo mount -t devpts -o gid=5,mode=620 devpts ~/raspbian/dev/pts

sudo chroot ~/raspbian

5、在树莓派虚拟机中配置编译所需环境

# 这里是两个教程中的环境配置,都不全,但两个都执行一遍基本就没大问题了
# 
sudo apt install build-essential gfortran libglib2.0-dev-bin python3-pip python-pip python-dev python-numpy python3-dev python3-numpy libtiff-dev zlib1g-dev libjpeg-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

未完

你可能感兴趣的:(树莓派)