海思3559A使用docker镜像快速在PC开发经验总结
这里可以清晰看到,CPU部分无非是A73和A53,跑的系统还是linux,architecture都是”aarch64”。所以有了一个想法,就是呢,我使用RK3399的ubuntu系统编译了一个小程序,只有print函数的,生成可执行程序,移植到3559A上运行,一切正常。这个实验证明,3559AV100的linux本质上与TX2或者是RK3399的ubuntu16.04并没有什么区别,它依旧是arm64v8的linux。所以我就顺其自然地想到了一个快速在PC开发的方法:
使用arm64v8/ubuntu:xenial这样的docker镜像,不使用海思提供的交叉编译工具,毕竟这样我就可以很方便的,在PC上的docker使用apt-get install somepackages,不需要啥第三方库都得自己用交叉编译器撸一遍,然后很愉快地编译pytorch,caffe,opencv这些我需要的第三方库了。
一、 docker准备
docker基本知识汇总[1] 请先了解docker是干什么的,同时在自己PC上面配置好docker。 Deepin安装docker[2]
二、 使用docker安装3559A系统
安装3559A可以使用的ubuntu:xenial的docker镜像 这个是我测试过的镜像,完美模拟ARM64.地址[3]
Once you need to configure binfmt-support on your Docker host. This works locally or remotely (i.e using boot2docker or swarm).
# configure binfmt-support on the Docker host (works locally or remotely, i.e: using boot2docker)
docker run --rm --privileged multiarch/qemu-user-static:register --reset
- 1
- 2
It also works for ubuntu16.04 arm64 Host#
$ docker run -it --rm multiarch/ubuntu-core:arm64-xenial
root@723fb9f184fa:/# uname -a
Linux 723fb9f184fa 4.1.13-boot2docker #1 SMP Fri Nov 20 19:05:50 UTC 2015 aarch64 aarch64 aarch64 GNU/Linux
- 1
- 2
- 3
一般进入后,最好换成国内的源:aarch64的docker容器
#加入源
echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse\n\
#deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse\n\
#deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse\n\
#deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted\n\
#deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted\n\
' > /etc/apt/sources.list
#更新
apt-get update
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
这里推荐使用我push到dockerhub的一个镜像xxradon/jetson-tx2-ubuntu:latest: 使用 Host#
docker pull xxradon/jetson-tx2-ubuntu:latest
- 1
进行拉取,这里面常用的开发库都已经安装完毕。并安装oh my zsh,所以方便的设置容器启动自启,我的容器里设置了ssh自启,方便使用ssh访问docker容器。使用docker run启动后,直接键入
su
- 1
Tips:如果docker run出现如下错误:Host#
standard_init_linux.go:190: exec user process caused "exec format error"
- 1
请重新使用下面的指令进行注册qemu-user-static修复。Host#
configure binfmt-support on the Docker host (works locally or remotely, i.e: using boot2docker)
docker run --rm --privileged multiarch/qemu-user-static:register --reset
- 1
- 2
三 、3559A硬件连接Linux PC,调试运行
1.通过minicom进行串口连接
首先进行minicom-linux下USB转串口配置[4],将3559A的板子连接好PC 现在的笔记本越做越薄,好些电脑已经没有串口了,做硬件开发会非常头疼,不过有了USB转串口设备,PC机只需要有USB接口就可以了。在linux下我们使用minicom与目标设备通信,在此记录一下linux下USB转串口的配置过程。
1.1 查看驱动是否正常: Host#
sst@ubuntu:~/work/test$ lsmod |grep usbserial
usbserial 45014 1 ch341
- 1
- 2
如果有usbserial这一行,说明系统支持USB转串口。
1.2 查看USB设备
Host#
sst@ubuntu:~/work/test$ dmesg |grep ttyUSB0
[221102.440589] usb 3-10: ch341-uart converter now attached to ttyUSB0
- 1
- 2
1.3 安装minicom Host#
sudo apt-get install minicom
- 1
1.4 配置minicom Host#
sudo minicom -s
- 1
按A键,设置Serial Device为:/dev/ttyUSB0
按F键,设置Hardware Flow Control 为No
按G键,设置Software Flow Control为No
按回车,保存。
如果想把你的配置设置为默认配置,在configuration选择Save setup as dfl,然后退出。
1.5 启动minicom Host#
sudo minicon
- 1
我的串口输出是二进制数据,所以看上去就是乱码啦按下CTRL-A Z后会弹出帮助菜单,在菜单下按Q可以退出。
2.NFS开发环境搭建
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
2.1 安装 NFS 服务包
由于我的Host# 主机是Deepin操作系统,其他类debian的操作系统,如ubuntu执行的命令基本一致,在 Deepin 终端执行以下命令安装 NFS 服务包:
Host#
sudo apt-get install nfs-kernel-server
- 1
2.2 设置配置文件
NFS 允许挂载的目录和权限需要在文件“/etc/exports”中进行定义。执行如下指令,创建 NFS 共享目录,打开 NFS 配置文件 exports: //建立 NFS 共享目录
Host#
sudo mkdir /home/shining/nfs_share
sudo gedit /etc/exports //打开 NFS 配置文件
- 1
- 2
在文件最后加入如下配置信息,添加完毕保存并退出。如下图所示: Host#
/home/shining/nfs_share/ *(rw,sync,no_root_squash)
- 1
2.3 重启 NFS 服务
执行以下命令重启 NFS 服务器,结果如下图所示:
Host#
sudo /etc/init.d/rpcbind restart
- 1
Host#
sudo /etc/init.d/nfs-kernel-server restart //重启 NFS
- 1
2.4. 开发板挂载
NFS 服务器共享目录 开发板和 PC 先通过路由器或者交换机互联,也可以通过网线直联。
2.5. 开发板和 deepin 之间 ping 测试
请进入开发板和 deepin 系统,使用 ifconfig 命令查看各自当前 IP 和子网掩码。此处查询到 deepin IP 为: 192.168.1.243,开发板 IP 为: 192.168.1.242,子网掩码为: 255.255.255.0. 如果未设置好IP,请按照如下方案设置ip:在deepin操作系统上,由于deepin的系统自带网络配置无法同时配置2个IP,使用如下指令安装辅助工具:Host#
sudo apt-get install network-manager
- 1
如下图编辑自己的网络IP。
海思3559A开发板上设置,在vi /etc/init.d/rcS下加入:3559A#
ifconfig eth0 192.168.1.242 netmask 255.255.255.0
route add default gw 192.168.1.1
- 1
- 2
设置完成后,请使用ping指令相互ping一下,确保连接正常。
2.6. 开发板挂载 NFS 服务器共享目录
进入开发板文件系统,执行如下命令建立 NFS 挂载目录并修改读写权限。
3559A#
mkdirs -p /home/shining/nfs
- 1
3559A#
chmod 777 /home/shining/nfs
- 1
在开发板中当前执行以下命令,挂载 NFS 服务器共享目录到开发板的“/home/shining/nfs”目录,并 查看共享目录内容: 3559A#
mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.1.243:/home/shining/nfs_share /home/shining/nfs
- 1
3559A#
ls /home/shining/nfs //查看挂载的 NFS 共享目录内容
- 1
指令注释:
-t nfs:type,挂载类型为 NFS。
-o nolock:不加文件锁,NFS 挂载时默认选项为文件锁(lock),依赖于 portmap 提供的
动态端口分配功能。
192.168.1.89:/home/shining/nfs_share /nfs/:NFS 服务器 IP 地址为 192.168.1.89,NFS 服务器共享目录为”/home/shining/nfs_share”。
- 1
- 2
- 3
- 4
- 5
如果开发板还没有安装 NFS 客户端,请在开发板联通网络下,执行以下命令安装 NFS客户端,再重新挂载。
在 NFS 共享目录新建的文件,会在开发板挂载目录同步出现。在开发板挂载目录新建的文件,也会在 NFS 共享目录出现。开发板通过 NFS 挂载 Deepin 的 NFS 共享目录已经成功,并且可读可写,以后就可以 通过 NFS 服务器来传输文件,比 U 盘拷贝方式更加便捷。
2.7. 卸载开发板的 NFS 挂载目录
在开发板上执行以下命令,卸载 NFS 挂载目录: 3559A#
umount /home/shining/nfs_share
- 1
3559A#
df //查看系统挂接信息
- 1
用 df 命令查看挂接信息,已经没有挂接信息,说明卸载成功。
四、 使用docker联合3559A开发板进行开发
4.1. docker容器与3559A开发板共享文件夹
通过上面二、四教程,我们知道docker可以进行文件夹映射,这个功能与NFS相同,所以我们将aarch64的docker容器的一个工作文件夹与3559A的NFS共享文件设置为同一个文件夹,这里假设共享的文件夹是/home/shining/Projects/work/His3559A:3559A#
mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.1.243:/home/shining/Projects/work/His3559A /home/shining/nfs
- 1
aarch64 的docker容器#
docker container run --privileged --rm -p 8003:22 -it --ipc=host -v /home/shining/Projects/work/His3559A:/home/shining/nfs -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0 xxradon/jetson-tx2-ubuntu:latest /bin/bash
- 1
上面的-v /home/shining/Projects/work/His3559A:/home/shining/nfs 就是docker配置文件夹映射。
4.2. 开发流程
使用aarch64 的docker容器进行编译,这里需要特别说明,所有的第三方库基本都可以使用了,opencv,caffe,pytorch(怎么编译caffe,opencv,pytorch这些常用的深度学习算法库,请自行百度),只用在aarch64 的docker容器进行编译,然后使用以下脚本[5]deploy.sh: docker容器#
#这里是deploy.sh里的脚本内容
deplist=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )
cp -L -n $deplist $2
- 1
- 2
- 3
使用下面指令 docker容器#
bash deploy.sh 软件名 打包的库文件放置位置
- 1
进行依赖库打包。这里拿编译好的pytorch的libtorch.so为例,假如我想在3559A上使用libtorch.so的ATen 操作,在编译好的pytorch的lib下/home/shining/nfs/3rdparty/install/lib,使用 docker容器#
bash deploy.sh libtorch.so
- 1
将libtorch.so的所有依赖打包至libtorch.so的当前目录下。
4.3. 在3559A上运行程序
第一步当然是使用export,将库路径放在环境变量中去(临时的),如下:
3559A#
RK3588 最新设计文件
- 1
运行pytorch中的AlgorithmsTest例子,如图一切正常:
五、开发Tips
3559A的开发版一般不支持ssh,但是支持Telnet,所以可以通过telnet在PC主机上打开多个窗口。3559A#
# telnetd&
- 1
Host
telnet 192.168.1.242
- 1
- 分享
- 举报

-
浏览量:8091次2017-11-16 16:26:57
-
浏览量:3144次2020-08-05 20:57:46
-
浏览量:3090次2020-07-29 15:38:57
-
浏览量:7398次2018-06-14 23:13:10
-
浏览量:2973次2020-08-10 09:27:13
-
浏览量:3500次2020-08-17 19:59:15
-
浏览量:3550次2020-07-27 16:05:14
-
浏览量:2326次2019-10-10 22:05:41
-
浏览量:1461次2024-01-06 10:33:06
-
浏览量:3359次2020-07-29 11:49:25
-
浏览量:2863次2020-07-29 15:54:29
-
浏览量:2970次2020-07-31 16:50:14
-
2024-01-06 10:44:04
-
浏览量:17408次2018-09-27 20:23:02
-
浏览量:1620次2024-03-19 11:42:03
-
2024-01-06 11:14:41
-
浏览量:13650次2018-12-27 13:16:45
-
浏览量:3980次2020-08-24 21:15:04
-
浏览量:3852次2022-01-04 09:00:18
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖

Keith_Cheung






举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明