ZYBO開發板:開發環境搭建

Posted by Jason Wong on March 16, 2019

概览 进行嵌入式开发的第一步是搭建开发环境,由于开发板的资源有限,主要的开发工作在PC机上进行,开发完成后在下载到开发板使用;而开发板和PC机的硬件平台又不一样,所以需要在PC机上搭建一个适合的开发环境,后续所有的开发都依赖这个开发环境。宗上,开发环境搭建的主要工作包括: (1).在PC机上搭建ftp server, nfs server. (2).安装交叉编译工具链

1.安装ftp服务器 (1).在Debian/Ubuntu系统上安装ftp服务器tftpd-hpa和ftp客户端tftp-hpa,其中安装客户端可选,主要是用来测试ftp server是否安装正确。使用命令:

sudo apt install tftpd-hpa tftp-hpa

安装完成后到/etc/default/tftpd-hpa进行ftp服务器的配置,使用命令打开配置文件:nano /etc/default/tftpd-hpa,默认情况下会看到以下内容

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

我们对它进行一些修改

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"     #把ftp服务器的目录修改成/srv/tftp
TFTP_ADDRESS=":69" 
TFTP_OPTIONS="--secure"

编辑完成,使用ctrl + o保存,再使用ctrl + x退出nano编辑器。 (2).在/srv目录建立tftp文件夹并修改权限

sudo mkdir -v /srv/tftp
#创建成功会出现下面的提示:
mkdir: created directory '/srv/tftp'

修改权限,先把文件夹的拥有者由root变为普通用户:

chown -v ubuntu /srv/tftp -R    #这里的普通用户名是ubuntu
#成功后会出现下面的提示:
changed ownership of '/srv/tftp/' from root to ubuntu

在修改文件夹的访问权限

chmod -v 777 /srv/tftp/ -R     #777表示赋予最高的读写,执行权限。
#成功后会出现下面的提示:
mode of '/srv/tftp/' changed from 0755 (rwxr-xr-x) to 0777 (rwxrwxrwx)

到此,普通用户已经可以读写tftp文件夹了。我们重启一下tftp服务器

sudo /etc/init.d/tftpd-hpa restart
#
[ ok ] Restarting tftpd-hpa (via systemctl): tftpd-hpa.service.

(3).测试 在/srv/tftp目录下建立一个test文本:nano /srv/tftp/test,并保存

ubuntu@VM-0-2-ubuntu:~/Documents$ ls /srv/tftp/    #已经建立的test文本文件
test

我们使用tftp客户端测试,如果能从/srv/tftp下载test文件,证明tftp服务器搭建成功。

ubuntu@VM-0-2-ubuntu:~/Documents$ ls      #Documents没有文件
ubuntu@VM-0-2-ubuntu:~/Documents$ tftp 127.0.0.1   #连接tftp服务器,127.0.0.1表示本地连接
tftp> get test       #连接成功,使用get命令获取test文件
tftp> quit       #退出
ubuntu@VM-0-2-ubuntu:~/Documents$ ls      #再次查看Documents文件夹,多出了刚刚使用tftp下载的test文件
test

到这里tftp服务器搭建完成,以后在开发板里可以使用命令从PC机上的/srv/tftp目录下载需要的文件。

2.搭建nfs服务器 (1).安装nfs服务器 在Debian/Ubuntu系统安装nfs服务器

sudo apt install nfs-kernel-server

(2).安装后的配置 在/srv建立nfs服务器的文件夹nfs

ubuntu@VM-0-2-ubuntu:/srv$ sudo mkdir -v nfs
mkdir: created directory 'nfs'

修改权限

//修改拥有者
ubuntu@VM-0-2-ubuntu:/srv$ sudo chown -v ubuntu nfs/ -R
changed ownership of 'nfs/' from root to ubuntu
//修改访问权限
ubuntu@VM-0-2-ubuntu:/srv$ sudo chmod -v 777 nfs/
mode of 'nfs/' changed from 0755 (rwxr-xr-x) to 0777 (rwxrwxrwx)

通过修改/etc/exports配置文件来配置nfs服务器:sudo nano /etc/exports

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#在这里添加语句
/srv/nfs *(rw,sync,no_subtree_check,no_root_squash)   #*表示任何ip地址都可以访问nfs服务器的内容,最好修改成与PC机在同一子网的地址,比如PC机的局域网地址是192.168.65.4,开发板的ip也应该设置成与PC机的ip在同一网段,比如设置成192.168.65.240,否则无论是tftp还是nfs都无法访问到PC机上的内容。括号里面是权限设置,一般都这样设置。

保存并退出,执行exportfs -rv命令使配置生效

ubuntu@VM-0-2-ubuntu:/srv$ sudo exportfs -rv       #-r表示重新挂载,-v表示显示共享的目录
exporting *:/srv/nfs      #nfs的共享目录

重启nfs服务器

ubuntu@VM-0-2-ubuntu:/srv$ sudo /etc/init.d/nfs-kernel-server restart
[ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.

(3).测试 在/srv/nfs文件夹下建立一个测试文件nfs_test

ubuntu@VM-0-2-ubuntu:/srv$ nano nfs/nfs_test      #注意,当前是在/srv目录下操作
#查看刚刚建立的文件
ubuntu@VM-0-2-ubuntu:/srv$ ls nfs/
nfs_test       #建立的nfs_test文件

执行挂载,把nfs服务器的主目录挂载到/mnt目录下

ubuntu@VM-0-2-ubuntu:/srv$ sudo mount -t nfs 127.0.0.1:/srv/nfs /mnt
#mount命令选项说明
#-t	挂载的文件系统类型,由于通过nfs服务器挂载,文件系统类型当然是nfs
#127.0.0.1表示nfs服务器的地址,由于是本机测试,所以填写127.0.0.1,如果是在开发板操作,地址应该填写PC机的地址,如开发板地址:192.168.65.240;PC机地址:192.168.65.4,那么:
#sudo mount -t nfs 192.168.65.4:/srv/nfs /mnt
#地址:后面是nfs服务器目录的绝对路径,指示nfs服务器的目录在/srv/nfs
#/mnt是挂载的目标地点,也可以选/home,注意挂载的目标文件夹是开发板上的,不是PC机上面的目录。这样,把在PC机上把文件放到/srv/nfs目录下,打开开发板上的/mnt目录时,就可以看到刚刚放进来的文件。

最后,我们到/mnt目录下看看是否有nfs_test文件在里面

ubuntu@VM-0-2-ubuntu:/srv$ ls /mnt/ 
nfs_test        #/srv/nfs文件夹里的文件,说明nfs服务器搭建成功

3.安装交叉编译工具链 要移植的目标平台是ZYNQ系列的开发板,具体的处理器型号是ZC702,所以我们需要安装与开发板相匹配的交叉编译工具链,由于xilinx已经不再单独提供工具链下载,而是集成在SDK中,所以要想获得最新的交叉编译工具链,需要安装xilinx的开发工具Vivado和SDK。因为我的电脑已经安装了SDK,所以我把它提取出来打包好,使用的时候把文件解压,再设置环境变量就可以了 在这里,我把工具链解压到/opt目录下(也可以放在其他地方),使用tar命令解压:

ubuntu@VM-0-2-ubuntu:~/source/tar$ sudo tar -C /opt -xvf gcc-arm-linux-gnueabi.tar.xz

配置环境变量,编辑.profile文件:nano ~/.profile 在.profile文件的末尾找到语句:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"

把工具链的路径添加进来,注意不同路径之间使用:隔开

PATH="$HOME/bin:$HOME/.local/bin:/opt/gcc-arm-linux-gnueabi/bin:$PATH"       #/opt/gcc-arm-linux-gnueabi/bin是工具链的路径

保存并退出,执行命令:source ~/.profile 使配置文件生效

ubuntu@VM-0-2-ubuntu:~/source/tar$ source ~/.profile 

检查:在终端输入命令:arm-linux-gnueabihf-gcc -v查看是否有信息输出,如果配置成功,会显示如下信息;否则会提示不能识别此命令

ubuntu@VM-0-2-ubuntu:~/source/tar$ arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm-linux-gnueabi/bin/../libexec/gcc/arm-linux-gnueabihf/6.2.1/lto-wrapper
Target: arm-linux-gnueabihf

.................

Thread model: posix
gcc version 6.2.1 20161114 (Linaro GCC Snapshot 6.2-2016.11) 

结束 我们在文章开头介绍了搭建开发环境的必要性,接下来引出了具体的搭建方法;包括ftp服务器和nfs服务器的安装,搭建,配置及最后的测试;最后介绍了交叉编译工具链的安装和环境变量的设置。