TX2自身的Linux系统自带了opencv,不过由于版本比较低是2.4.13,而我又需要使用opencv的GPU加速功能,虽然opencv2.4.13已经支持GPU加速,但是3.0以下的opencv对GPU加速的支持不是很好,使用起来很麻烦,于是便想着在TX2上安装opencv3.4。安装opencv之前需要安装依赖库,由此牵出来了一大堆问题。
首先需要换源,TX2默认的Ubuntu的源下载速度太慢,可以通过替换
/etc/lib/apt/sources.list
文件改为国内源(注意修改之前先将原文件备份),还有一点要注意,换源需要换ARM的源,不要换成了pc平台的软件源。这里推荐两个国内源,将原来文件里面的内容全部替换成下面两个源之一就可以:
清华源:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
和科大的源:
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
替换之后,执行
sudo apt-get update
更新源,然后打印出来一堆错误,主要问题有两个。
其中一个是GPG错误: 下列签名无法验证,错误的情况是这样的
W: GPG error: http://repo.mate-desktop.org saucy InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 68980A0EA10B4DE8
我们需要获取系统中的这个公钥,从信息中获取密钥号,比如上面这个错误,密钥号是68980A0EA10B4DE8,执行
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 68980A0EA10B4DE8
后再次更新,这个错误消失,不过还有一个错误,错误的打印如下:
E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/main/binary-arm64/Packages 404 Not Found [IP: 91.189.88.161 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/binary-i386/Packages 404 Not Found [IP: 91.189.88.161 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-backports/main/binary-i386/Packages 404 Not Found [IP: 91.189.88.161 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-security/main/binary-i386/Packages 404 Not Found [IP: 91.189.88.161 80]
这里显示是91.189.161.80这个IP无法访问,但是我用浏览器访问了一下这个ip发现是可以访问的,Ubuntu下所有的开源项目都在这里了,于是我按照log上的目录依次往下查找,到
archive.ubuntu.com/ubuntu/dists/xenial-backports/main/
这个目录之后,发现这个目录下面没有binary-i386这个目录,好了,问题找到了,那么是什么原因导致的更新源时程序会访问这个本来不存在的目录呢。网上查找一番后,找到一个比较关键的问题,在终端执行
dpkg --print-architecture
查看当前CPU的架构,然后打印如下:
终端执行
dpkg --print-foreign-architectures
查看设置的多架构支持,打印如下
发现多架构支持被设置了i386,然而我们的平台是ARM架构的,不需要x86平台的支持,先前的问题可能就是这个原因导致的,于是尝试删除这个设置
sudo dpkg --remove-architecture i386
然后更新源
sudo apt-get update
成功!更新源成功之后就可以安装opencv的依赖,然后安装opencv了。
主要参考:
[1] Ubuntu更新错误修复大全:http://www.linuxidc.com/Linux/2015-06/118678.htm
[2] https://askubuntu.com/questions/917081/how-to-get-rid-of-arm64-in-apt#