Nvidia Jetson Xavier
关于Nvidia Jetson Xavier Development Kit
Xavier 平台简介
- PASS
Xavier 相关资源
- PASS
搭建工作环境
刷机
- PASS
刷机完成的起手式
1 | # Start |
- 上述过程中
pip
可能会抛出一个异常ImportError: cannot import name 'main'
,需要编辑/usr/bin/pip
,将from pip import main
下的三行修改如下即可解决问题。1
2
3from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
创建swap分区
创建一个8G的交换分区文件
1
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
更改swapfile的权限
1
sudo chmod 600 /swapfile
创建swap区
1
sudo mkswap /swapfile
手动挂载swap区
1
sudo swapon /swapfile
确认swap区是否正在使用
1
swapon -s
Swap分区和磁盘的自动挂载
- Linux系统开机时自动挂载的分区由
/etc/fstab
文件负责指定,Xavier的30G空间在装好系统后已经所剩无几,但可以额外安装M2接口的固态硬盘来拓展其空间,将挂载的配置信息添加进/etc/fstab
即可,对于Swap分区和硬盘设备,其可采用下面的模板:1
2
3
4
5
6# Swap
/swapfile swap swap defaults 0 0
# NVME SSD
/dev/nvme0n1 /mnt/ssd ext4 defaults 1 1
TensorFlow
安装必要依赖(这个过程可能会很漫长)
1
2
3sudo apt-get install libhdf5-serial-dev hdf5-tools
sudo apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev
sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker grpcio six mock requests gast h5py astor termcolor安装TensorFlow
1
pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu --user
修改
~/.bashrc
,将/home/li/.local/bin
添加到PATH
中开启高功率模式和AMP为TensorFlow加速
1
2
3
4
5
6
7## Best Practice
sudo nvpmodel -m 0 # Open Max-N Model
## Append in .bashrc
export TF_ENABLE_AUTO_MIXED_PRECISION=1
## TODO : Automatic Mixed Precision
安装开发工具
Visual Studio Code
Xavier采用ARM64架构,而Microsoft官方只提供了i386和amd64架构下的VSCode的安装包。不过,在Xavier上可以使用VSCode的一个由Headmelted维护的开源复刻版本Code-OSS,该版本提供了arm64和armhf架构上的版本,故而可以运行在Xavier以及树莓派这样的ARM架构的平台上。下面是该项目的软件包发布地址:
headmelted给出了多种安装方式,在上述连接中均可以看到,搬运来一种简单暴力的方式,以1.32.0版本为例:
1
2
3
4
5wget --content-disposition https://packagecloud.io/headmelted/codebuilds/packages/debian/stretch/code-oss_1.32.0-1550644676_arm64.deb/download.deb
sudo dpkg -i '/home/nvidia/code-oss_1.32.0-1550644676_arm64.deb'
sudo apt install -f
IPython
- IPython是笔者非常喜欢的一款Python交互式Shell,其安装方式如下:
1
2
3
4
5# Python 2
sudo apt-get install python-ipython ipython
# Python 3
sudo apt install python3-ipython ipython3
PyCharm
- PASS
工程开发笔记
LaneNet-ROS
LaneNet(MaybeShewill-CV实现)
- Pass
创建适合Python3使用的ROS工作空间
ROS(Robot Operating System)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。
ROS在Xavier上的安装@Jetsonhacks给出了一个相当好用的轮子,这是其GitHub上的Repo地址Jetsonhacks/installROSXavier,不过ROS默认的Python版本是Python2,因此使用Python3编程的程序不能使用部分ROS组件,譬如
tf
和cv_bridge
等,诸如下面的错误就是因为这样的原因,所以笔者对@Jetsonhacks的脚本加以维护构建了一个适合Python3的ROS工作空间。1
2
3File "/opt/ros/kinetic/lib/python2.7/dist-packages/cv_bridge/core.py", line 91, in encoding_to_cvtype2
from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)笔者维护的版本,调整了ROS的Ubuntu镜像源的GPG Key服务器,并在创建工作环境的脚本中添加了一段命令用于创建Python3的虚拟环境,并将geometry库编译出Python3的接口。笔者的安装脚本发布在Bye-lemon/installROSXavier上,可以使用如下命令安装ROS并创建工作环境。
1
2
3
4
5
6
7
8
9
10# 获取安装脚本
git clone https://github.com/Bye-lemon/installROSXavier
# 安装ROS
cd installROSXavier
./installROS.sh -p [ros-melodic-ros-base | ros-melodic-desktop | ros-melodic-desktop-full]
# 创建工作空间
./setupCatkinWorkspace.sh [optionalWorkspaceName]在创建了工作空间之后,还需要在工作空间中继续编译Python3版本的
cv_bridge
,其具体操作如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 安装必要依赖
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
# 打开ROS工作空间
cd ~/catkin_ws
rm -rf /build /devel
# 获取源码并签出与ROS对应的版本
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
cd src/vision_opencv/
git checkout $(apt-cache show ros-melodic-cv-bridge | grep Version | cut -d ':' -f 2 | cut -d '-' -f 1 | sed 's/^[ \t]*//g')
# 编译
cd ../../
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so
# 使用该工作空间
source venv/bin/activate
source devel/setup.sh如果在编译的过程中出现类似下面的错误,是因为CMake尝试寻找库
libboost_python3.so
,但在Ubuntu系统中正确的库应该是libboost_python-py36.so
(/usr/lib/aarch64-linux-gnu/libboost_python-py36.so
),故而需要将文件src/vision_opencv/cv_bridge/CMakeLists.txt
中的find_package(Boost REQUIRED python3)
替换为find_package(Boost REQUIRED python-py36)
并重新编译。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message):
Unable to find the requested Boost libraries.
Boost version: 1.58.0
Boost include path: /usr/include
Could not find the following Boost libraries:
boost_python3
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.
Call Stack (most recent call first):
CMakeLists.txt:11 (find_package)References:
在ROS中使用Python3: https://community.bwbot.org/topic/499/%E5%9C%A8ros%E4%B8%AD%E4%BD%BF%E7%94%A8python3
Unable to use cv_bridge with ROS Kinetic and Python3: https://stackoverflow.com/questions/49221565/unable-to-use-cv-bridge-with-ros-kinetic-and-python3?rq=1
Airsim-ROS
调试与运行
安装RQT
1
sudo apt install ros-melodic-rqt ros-melodic-rqt-common-plugins ros-melodic-rqt-robot-plugins
tmux+rqt_image_view
1
2
3
4
5
6roscore
rosrun airsim car_image_raw.py
roslaunch lane_detector lanenet.launch需要注意的是,
scripts
文件夹下的文件必须具有执行权限,如果遇到形如ERROR: cannot launch node of type [<packagename>/<filename>]: can't locate node [<filename>.py] in package [<packagename>]
的错误,且可以确认scripts
目录下确实有这一文件,那么很有可能就是因为该文件失去了执行权限,可以通过下面的指令为其赋予权限:1
sudo chmod +x /path/to/your/file
LaneNet-ENet(stesha2016实现)
- PASS
视觉SLAM
编译安装OpenCV4Tegra
- OpenCV4Tagra是对OpenCV进行了CPU和GPU两个层次的优化的一个发行版,Jetpack默认安装了OpenCV4Tegra,不过,这个版本的OpenCV不包含SIFT和SUFT的包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36# Remove Old Version
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
# Required Package
sudo apt-get install build-essential
sudo apt-get install cmake cmake-curses-gui g++ git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libglew-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
sudo apt-get install libgstreamer1.0 libgstreamer1.0-dev libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-dev
# Download Source Code
wget https://github.com/opencv/opencv/archive/4.1.0.zip
wget https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
unzip 4.1.0.zip
unzip 4.1.0.zip.1
# Create Workspace
cd opencv-4.1.0
mkdir build
cd build
# Create CMake Script
PASS
# Build
chmod u+x cmake_target.sh
./cmake_target.sh
make -j8
sudo make install
DJI无人机
DJI-SDK的编译安装
- 一个完整的安装过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 安装必要依赖
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential git cmake pkg-config
# 克隆源代码
cd ~
git clone https://github.com/dji-sdk/Onboard-SDK.git
# 编译安装
cd Onboard-SDK
mkdir build
cd build
cmake ..
make -j4
make install
Nvidia Jetson Nano
关于Nvidia Jetson Nano Development Kit
Nano 平台简介
- PASS
Nano 相关资源
- PASS
Compute Capability: https://developer.nvidia.com/cuda-gpus
搭建工作环境
刷机
- PASS
刷机完成的起手式
PATH
1 | export PATH=$PATH:/usr/local/cuda-10.0/bin |
JetCard
- PASS
Jetcam
- Jetcam是英伟达官方给出的一款应用于Jetson Nano的摄像头模块驱动库,其安装方式如下:
1
2
3git clone https://github.com/NVIDIA-AI-IOT/jetcam
cd jetcam
sudo python3 setup.py install
YOLO开发笔记
YOLO
- PASS
Deploy YOLO & Run Official Demo
Clone Darknet Framework
1
2git clone https://github.com/pjreddie/darknet.git
cd darknetModify Makefile
1
2
3
4
5
6
7GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0
ARCH=-gencode arch=compute_53,code=[sm_53,compute_53]Compile
1
make -j4
Download YOLOv3’s Pre-train Weight
1
wget https://pjreddie.com/media/files/yolov3.weights
Modify Config
1
2
3
4
5
6
7# Testing
batch=1
subdivisions=1
# Training
#batch=64
#subdivisions=16Test
1
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
Huawei HiKey 970
HiKey 970 平台简介
PASS
开发平台构建
起手式
中文字体
1 | sudo apt install fonts-wqy-zenhei |
exFat U盘读取
1 | sudo apt install exfat-utils |
dlib
1 | sudo apt install build-essential cmake pkg-config |
Raspberry Pi
魔镜INOM
魔镜·INOM开发资源
项目参考源Repo
Dingdang-robot: https://github.com/dingdang-robot/dingdang-robot
MagicMirror: https://github.com/MichMich/MagicMirror
DDDD魔改版本
修改内容:
- 添加数据库支持。
镜像发布地址:
部分必要依赖的安装说明
(Option) 树莓派系统清理
- 当树莓派仅用来运行魔镜时,树莓派系统中很多程序是没用的,如果内存卡的空间不足,可以将它们拆卸,可拆卸的软件可参考下面两条指令。
1
2sudo apt-get remove --purge idle3 java-common libreoffice* minecraft-pi scratch nuscratch penguinspuzzle python-minecraftpi python3-minecraftpi smartsim sonic-pi wolfram-engine
sudo apt-get autoremove
淘宝定制版cnpm的安装
MagicMirror基于node.js开发,npm是必备的工具,淘宝为npm官方源提供了一个镜像来解决国内使用官方源速度过慢的问题。可以修改npm的registry来指定淘宝镜像源,更好的方法是使用淘宝定制的cnpm工具来代替npm。cnpm可以通过npm安装。
1
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm也可以通过给npm设置参数并添加别名实现等效效果,具体操作为:
1
2
3
4
5
6
7
8
9
10alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"
# Or alias it in .bashrc or .zshrc
$ echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc
OpenCV 3.3.0的编译安装
- MagicMirror的插件MMM-Facial-Recognition-OCV3的一个必要依赖是包含contrib包的OpenCV 3.3.0版本,通过包管理工具apt无法获取到高版本的OpenCV,只能通过源码编译的方式安装。MMM-Facial-Recognition-OCV3 Repo的README中给出了比较详细的安装方式,不过由于我们只需要3.3.0版本的OpenCV,故而没有必要对整个Repo进行Clone,笔者给出如下编译方案。
安装必要依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential git cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python2.7-dev python3-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
pip install numpy获取3.3.0版本的OpenCV及contrib包源代码
1
2
3
4
5
6
7cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
unzip opencv_contrib.zip修改配置文件
/etc/dphys-swapfile
中交换空间的大小如下,以避免启用多核编译可能会存在存储空间问题1
2
3
4# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024重启交换服务,使刚修改的配置生效
1
2sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start编译安装OpenCV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16cd ~/opencv-3.3.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
-D BUILD_EXAMPLES=ON ..
make -j4
sudo make install
sudo ldconfig
常见问题自助
树莓派2的镜像在树莓派3中启动卡彩虹屏的问题
- 这一问题发生在我将树莓派2的内存卡放在树莓派3上启动时。树莓派2和3的内核、启动文件、文件系统等都有一定的区别,使得树莓派2的镜像不能在树莓派3上启动,这时树莓派会一直显示彩虹屏。关于通过修改内核和启动文件以完成2向3的迁移的内容,CSDN等平台皆有文章讨论。笔者选择了最保险也是最暴力的方式,就是将一切在树莓派3上重建一遍~(手动摊手)
树莓派连接HDMI显示器开机黑屏的解决方案
这一问题发生在我把树莓派进行系统更新时。树莓派没有传统意义上的BIOS,它的启动参数全部在boot分区的Config.txt中,进行系统内核的更新之后,该配置文件被覆盖,默认的配置文件中没有开启HDMI这一项,故而无法显示。Config.txt的修改可以参考下面一篇文章:
Config.txt文件说明:http://shumeipai.nxez.com/2015/11/23/raspberry-pi-configuration-file-config-txt-nstructions.html
树莓派无法安装MySQL_Python库的解决方案
- SQLAlchemy连接MySQL需要MySQL_Python的依赖库,这个库在安装时会报出
EnvironmentError: mysql_config not found
的错误,可以通过使用apt安装default-libmysqlclient-dev包来解决。1
sudo apt-get install default-libmysqlclient-dev
SQLAlchemy不使用UTF-8编码的解决方案
- SQLAlchemy默认使用latin-1编码,故而在向使用UTF-8编码的数据库传输UTF-8方式编码的数据时会出现乱码或者报错的情况。这种问题需要在创建Engine时显式地指定数据的编码方式为UTF-8,具体的操作是:
1
engine = create_engine("mysql+pymysql://user:password@host:port/database?charset=utf8", encoding='utf-8')
树莓派#@|等键位错乱的问题
- 由于树莓派是英国人发明的,故而树莓派的默认键位环境是英国键盘布局,而我们使用的是美国标准键盘布局,因而会有键位不同的情况。在系统设置中或输入法设置中将键盘布局调整为美式布局即可。
使用pip安装lxml失败的解决方案
- 笔者在安装tushare库时,其必要依赖lxml在编译过程中报出一系列错误,形如
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
,但事实上libxml2库在系统中已经安装了。查找资料,这个问题可以通过安装下列库解决。1
sudo apt-get install python-dev libxml2-dev libxslt1-dev zlib1g-dev
MMM-Facial-Recognition使用中的问题
MMM-Facial-Recognition插件在配置完成被MagicMirror调用时发生如下错误
TypeError: PythonShell is not a constructor at Class.python_start (/home/pi/MagicMirror/modules/MMM-Facial-Recognition/node_helper.js:11:21)
。造成这个错误的原因是npm包python_shell的后续版本相较于作者使用的包版本在接口上有差异,而作者在package.json中并没有指定特定的版本,安装一个较低版本的包即可。1
npm install python-shell@0.4.0
在Github Repo中,作者在使用识别功能之前通过export命令导出了算法和用户列表两个参数,这样的到处是临时的,重启树莓派之后会重置,为了避免每次启动树莓派后重复操作过于繁琐,可以将两个export语句写入.bashrc文件,这样重启后会自动加载。
PowerShell禁止执行脚本的解决方案
- 在Win10系统中使用PowerShell执行脚本时,报出
无法加载文件[filename].ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"。
的错误。这是因为首次在计算机上启动Windows PowerShell时,其执行策略很默认是Restricted,Restricted 策略不允许任何脚本运行。运行未签名脚本和来自其他用户的签名脚本,需要修改执行策略为RemoteSigned,这一修改需要指令:1
set-ExecutionPolicy RemoteSigned
树莓派重启之后原有声音设置失效的解决方案
- 树莓派存在重新启动之后扬声器或麦克风声音变低甚至置零的现象,这种现象的最佳实践实在调整音量后使用指令
sudo alsactl store
将设置保存到系统。然而,实测并无效果。(就好比网上的教程都说NTP就能解决树莓派的时间问题……)实测有效的一种折中的方案是,将配置文件保存到某一个位置,尔后,条件一个开机启动项,用于加载声音配置。具体操作是:1
2
3
4
5
6
7
8
9
10
11
12# 保存配置到本地
alsactl --file ~/.config/asound.state store
# 创建开机启动服务
vim ~/.config/autostart/alsarestore.desktop
# 将如下内容输入至文件
[Desktop Entry]
Type=Application
Terminal=false
Name=alsarestore
Exec=alsactl --file ~/.config/asound.state restore
树莓派时间自同步的实现
- 树莓派没有主板电池,断电之后无法自行维护系统时间,故而时常出现因为本地时间与服务器时间不符引发的网络故障。网上说可以通过配置NTP服务解决,实测无效,寻找到的一种折中的方案是维护一个自启动脚本,从互联网上获取时间。具体操作可参考这篇文章:https://www.colabug.com/3235071.html。
在Windows系统下访问树莓派分区的方法
- Linux操作系统的文件系统一般是EXT而Windows一般是NTFS,故而,Windows系统无法直接读取树莓派的文件系统。一种解决方案是为Windows系统安装EXT文件管理器。一款比较推荐的产品是Ext2FSD,这款产品以服务形式启动,可以将树莓派的文件系统挂在成磁盘,经过设置后对Linux分区可读可写,对于树莓派的开发来说还是很方便的。Ext2FSD是一个开源项目,下面是其地址和下载链接:
项目官网:https://www.ext2fsd.com/
下载地址:https://sourceforge.net/projects/ext2fsd/
树莓派打不开摄像头的问题
- 这一问题发生的很莫名,有几天没打开设备使用,再开机运行程序就发现树莓派打不开摄像头了。自检过程中确认v4l2的驱动已添加到
/etc/modules-load.d/modules.conf
,且无连接错误,使用vcgencmd get_camera
显示supported=1 detected=0
。控制变量,使用另一块树莓派,发现问题依然存在,说明是TF卡中系统的问题。问题的解决也很莫名,sudo apt update
和sudo apt upgrade
二连就结束了,具体细节受限于时间没有继续确认。
参考阅读:https://www.raspberrypi.org/documentation/raspbian/applications/camera.md
为树莓派系统备份img镜像的方法
琐碎且毫无用处的知识
- ics日历交换格式:.ics 文件格式是RFC 5545所定义的标准的日历数据交换格式,能够被大多数日历应用所接受,比如Windows的日历、Outlook,macOS的日历APP,以及iOS、Android等自带的日历应用。可以推荐的ics源有很多,网上也有专门的ics聚合平台。这里给出一个来自苹果官方的中国节假日日历表的源:https://p10-calendars.icloud.com/holiday/CN_zh.ics。
Altera FPGA
Quartus Internal Error Code 82 Occured的解决
Intel给出的解决方案
- Internal Error Code 82 Occured是一个较为常见的错误,这一错误意味着连接JTAG Server出现了问题。Intel给出了这一问题的解决方案。方案的地址为https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd04042011_1000.html。
Description
You may be receiving the “Attempted to access JTAG server —internal error code 82 occurred” if you have a firewall or anti-virus program running when you installed Quartus® II and the Altera® JTAG Server. To resolve this you will have to disable/uninstall your firewall or anti-virus program then start the JTAG server. Once you have started the Altera JTAG Server then you may enable/reinstall the firewall or anti-virus program.
To Start, Stop, or Restart the Altera JTAG Server.
- Open the “Control Panel”
- Select “Adminstrative Tools”
- Select “Services”
- Highlight “Altera JTAG Server” then select Start, Stop, or Restart
- 简单地说就是:关闭防火墙和杀毒软件,将JTAG Server服务打开。
实际操作中遇到的问题
- 笔者在实际操作中发现服务中并没有JTAG Server这个选项,故而无法启动服务。在Quartus的安装目录的bin文件夹下有一个可执行文件
jtagserver.exe
,在这一目录下打开命令行,执行命令jtagserver.exe --install
,尔后使用命令jtagserver.exe --status
查看服务器状态,出现Server is running
字样即可,此时回到Quartus中就可以正常使用JTAG来编程和调试了。
Xilinx FPGA
What is PYNQ?
例行在开始正题之前介绍一下文章主角来凑字数~PYNQ 是什么,官方给出的介绍是这样的:
PYNQ is an open-source project from Xilinx® that makes it easy to design embedded systems with Xilinx Zynq® Systems on Chips (SoCs).
Using the Python language and libraries, designers can exploit the benefits of programmable logic and microprocessors in Zynq to build more capable and exciting embedded systems.
PYNQ users can now create high performance embedded applications with
- parallel hardware execution
- high frame-rate video processing
- hardware accelerated algorithms
- real-time signal processing
- high bandwidth IO
- low latency control
简单的翻译一下,就是说:PYNQ 是一种
符合时代潮流的可以使用Python语言进行编程的FPGA开发平台。工欲善其事,必先利其器。愉快的使用PYNQ-Z2开发,大概需要下面这些工具:
硬件设备:一块PYNQ-Z2的板子、一张至少8G的内存卡、一个读卡器、一根网线。
软件工具:Xilinx Vivado 开发环境、镜像烧写工具(Rufus or Win32diskimager)、终端模拟器(PuTTY or XShell)。
PYNQ 相关资源
官方资源
PYNQ 官网:http://www.pynq.io
TUL PYNQ-Z2首页:http://www.tul.com.tw/ProductsPYNQ-Z2.html
PYNQ 文档:https://pynq.readthedocs.io/en/latest/index.html
PYNQ Github Repo:https://github.com/Xilinx/PYNQ
PYNQ Workshop Repo:https://github.com/Xilinx/PYNQ_Workshop
PYNQ 社区:http://www.pynq.io/community.html
Xilinx 开发工具:https://www.xilinx.com/support/download.html第三方资源
FPGA Developer:http://www.fpgadeveloper.com/
连接并进入PYNQ-Z2
使用网线连接并进入PYNQ-Z2
开始之前,首先要将PYNQ的原始镜像烧写到内存卡中,将内存卡插入Z2板子上的内存卡槽。这时,拿起你的板子,使得XILINX的Logo和文字处在一个正常的方向,在右上角找到BOOT的跳线帽,选择从SD卡启动;在左下角找到电源跳线帽,选择使用USB供电,或者跳到REG使用电源线供电。
使用网线将PYNQ与计算机连接,打开网络配置,将本机的IP改成2网段下除99之外的任一IP,后续操作有一定概率需要关闭Windows防火墙。
将Z2供电并开机,此时,通过SSH访问
192.168.2.99
即可进入镜像系统,用户名和密码均默认为xilinx
;在资源管理器地址栏输入\\192.168.2.99\xilinx
即可进入默认目录下,拖拽或复制粘贴即可将文件传到Z2上;镜像默认自启动Jupyter Notebook,在浏览器中输入192.168.2.99:9090
即可打开Notebook执行程序。
使用COM口连接并进入PYNQ-Z2
- PYNQ支持通过串口进入Linux Terminal,将Z2与PC通过Micro USB线相连,在设备管理器中找到Z2对应的COM口(可能有两个,一个是Debug,一个是Console),在PuTTY或XShell中打开对应的串口,波特率设置为115200,即可进入Linux Terminal。
将PYNQ-Z2接入无线网并连接
首先,我们需要一块USB网卡,不过很多网卡Z2并不支持,实测发现360随身WiFi无线网卡是可用的。
先连接PYNQ到PC,使用串口连接可能比较方便,新建一个Python脚本,内容如下:
1
2
3
4
5
6
7from pynq.lib.wifi import WiFi
wifi = WiFi()
ssid = "[Your Wi-Fi SSID]"
password = "[Password]"
wifi.connect(ssid, password)- 这时的设备已经可以通过无线网卡访问网络了,如果希望通过IP访问Z2,可以在Terminal下使用
ifconfig
命令查看设备IP地址。
使用VNC连接并进入PYNQ-Z2
- PYNQ-Z2官方镜像中的apt软件源只是ARM架构下apt软件源的一小部分,这其中并不包含VNC服务器,所以,要对Z2的apt源进行维护。在Super权限下修改
(路径待维护)下的文件。使用中科大镜像站的Ubuntu Ports源:/etc/apt/
1
2
3
4
5
6
7
8
9
10
11
12
13# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main restricted universe multiverse 安装VNC服务器:tightvncserver
1
2sudo apt-get update
sudo apt-get install tightvncserver使用命令
vncserver :1
即可启动一个VNC窗口,首次启动会需要输入一个VNC密码并选择是否开启只读的VNC连接。服务启动后默认监听5901端口,详细的信息在日志文件中会找到,在局域网下的PC机上使用VNC Client访问5901端口即可进入图形化的操作界面中。如需关闭VNC Server,可以使用命令vncserver -kill :1
。
配置Jupyter
当然,Jupyter Notebook不做任何配置也不是不能用,但是作为一个学艺不精的不折腾不舒服斯基主义者总归是要搞一搞的,换个暗色皮肤,装点使用的插件还是有必要的。写代码的人,何必自己为难自己,换个舒服的环境自己用着舒服就好。
1
2
3
4
5
6
7
8
9# Jupyter Notebook Themes
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterthemes
# Jupyter Notebook Plugins
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter_contrib_nbextensions && sudo jupyter contrib nbextension install
# Start NBExtension GUI
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter_nbextensions_configurator sudo jupyter nbextensions_configurator enable
# Install Wheels
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple autopep8PYNQ上的安装过程比较缓慢,建议做一杯手冲咖啡,然后静心等待即可。安装完毕后,就可以愉快的玩耍了,NBExtension被集成在了Jupyter Notebook的网页端之中,通过http://pynq:9090/nbextensions即可访问,当然,CLI也是有滴;而主题工具提供的是CLI。jupyterthemes的使用非常简单,使用
jt -l
命令,可以查看主题列表;使用jt -t <Theme Name>
命令,可以切换主题的css样式表;使用jt -r
指令可以恢复主题的css样式表。下面是笔者个人使用的插件,需要注意的是不论是插件还是主题,配置过后都需要重启Jupyter Notebook:
插件名 | 功能 |
---|---|
2to3 Converter | 提供一个按钮,将Python2代码转化为Python3的代码 |
Autopep8 | 代码格式化插件 |
Codefolding in Editor | 在cell内折叠代码块 |
Hinterland | Tab代码补全 |
nbTranslate | 翻译插件 |
Snippets | 代码片段管理 |
Table of Contents (2) | TOC插件 |
Tree Filter | 在Tree页面提供搜索功能 |
Variable Inspector | 变量查看器 |
BaseOverlay的接口
LED和彩色LED
- PASS
拨挡开关和按键
- PASS