注意:每个人的开发环境以及需求不同,请不要盲目按照本文搭建你的开发环境,酌情参考。

首先讲一下我的需求:

宿主机系统:Windows10 LTSC 2021
虚拟机系统:Ubuntu 20.04
开发板: GEC6818
在Windows下使用VSCode编写程序,使用remoteSSH插件连接到虚拟机Ubuntu进行编译,然后telnet连接到开发板,使用tftp将编译好的程序传到开发板上

因此本文将分三部分,Ubuntu下的配置、Windows下的配置、开发板的配置

要想实现需求,必须要保证宿主机系统、虚拟机系统、开发板之间都能互相ping通,因此我们给这三个设备(误)各自指定一个固定的ip
我的配置是:子网掩码:255.255.254.0 默认网关:172.10.1.1
Windows:172.10.1.145
Ubuntu:172.10.1.144
GEC6818:172.10.1.146

Ubuntu下的配置:

如何安装Ubuntu虚拟机已经是老生常谈的问题了,这里就不再赘述

打开网络设置,把ip配置好,过程比较简单,这里也省略(

要实现需求,需要这些软件包:arm-linux-gcc、gcc、openssh、tftpd(tftp-hpa,tftpd-hpa,xinetd)、samba
先把能使用apt-get直接安装的软件包都装上:

sudo apt-get install openssh-server
sudo apt install build-essential
sudo apt-get install samba
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

注意:samba可装可不装,主要是vm-tools总是出现一些奇奇怪怪的bug导致共享文件夹用不了,所以图省事直接安装samba通过映射网络驱动器到Windows实现文件共享。

配置samba:

创建samba用户:
注意:创建samba用户之前,必须先确保有一个同名的用户,否则samba用户会创建失败

sudo smbpasswd -a username

重启samba服务:

sudo service smbd restart

之后右击要共享的文件夹,点属性,在本地网络共享中打开共享。

在Windows中映射网络驱动器即可。

配置tftp:

sudo vim /etc/xinetd.conf

配置xinetd相关服务文件。vim打开 /etc/xinetd.conf 查看内容,看是否与下面的一致,若不一致或者文件不存在则修改内容如下:

# Simple configuration file for xinetd
#
#Some defaults, and include /etc/xinetd.d/
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d

配置/etc/default/tftpd-hpa
sudo vim /etc/default/tftpd-hpa
打开tftp的配置文件,修改内容为:

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/chino/桌面/ftpfiles"
#这是你 tftp 服务器的工作目录,自行修改
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"

在桌面新建tftp的工作目录:
mkdir ftpfiles
chmod 777 ftpfiles

配置/etc/xinetd.d/tftp

sudo vim /etc/xinetd.d/tftp
查看文件内容是否如下,若不同或不存在则修改内容为:

service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /home/chino/桌面/ftpfiles
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}

其中 server_args 一行是配置服务器的文件存放的位置,也就是上面所说的tftp的工作目录,进行 tftp 传输的时候,都是从该文件夹中搜索文件。

重启服务:
sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
sudo service tftpd-hpa restart

注意:每次修改完配置文件后,都需要重新启动一下服务

安装并配置arm-linux-gcc:

去arm官网下载交叉编译工具链,这里直接贴出网址:
https://developer.arm.com/downloads/-/gnu-a

根据你的板子选择工具版本,我这里选择的是:8.3-2019.02 AArch32 target with soft float (arm-linux-gnueabi)

下载后解压,重命名文件夹为arm-gcc-8,并放到/usr/local下

进入工具的运行目录
cd /usr/local/arm-gcc-8/bin
为常用的几个工具创建软链接,方便后续使用时不必敲太长的命令:

ln -s arm-linux-gnueabi-gcc arm-linux-gcc
(或者ln -s arm-linux-gnueabi-gcc agcc,这样更短)
ln -s arm-linux-gnueabi-gdb arm-linux-gdb
(或者ln -s arm-linux-gnueabi-gdb agdb,这样更短)
ln -s arm-linux-gnueabi-ar arm-linux-ar
(或者ln -s arm-linux-gnueabi-ar arm-ar,这样更短)

添加环境变量:
sudo vim /etc/profile
在最后面加上:
export PATH=/usr/local/arm-gcc-8/bin:$PATH
保存,输入命令source /etc/profile
重启

在终端里输入刚刚自己创建好的软连接,出现报错就说明能用了

至此,Ubuntu下的全部配置已完成

Windows下的配置

将Windows的ip配置好,过程省略,如有需要可自行网上查阅(

安装telnet客户端:
控制面板→程序→启用或关闭Windows功能→勾选上"Telnet客户端"

打开VSCode,安装Remote-SSH扩展

安装完成之后点击左下角的图标,打开ssh的配置文件

修改文件内容如下:

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host Ubuntu
	HostName 172.10.1.144
    User chino

其中的Host是名称,写你喜欢的即可,HostName写虚拟机的ip,User写你虚拟机Ubuntu的用户名

保存之后,再次点击左下角的图标,连接到SSH:

之后输入虚拟机的密码,就连接成功了。
这里没有配置sshkey免密登录,如有需要可自行网上搜索(

至此,Windows下的配置已全部完成

开发板上的配置:

因为此时没有为开发板配置ip等,此时还只能通过串口连接开发板

Windows下打开SecureCRT,连接到开发板
vi /etc/profile
在文件末尾加上:
ifconfig eth0 172.10.1.146

cd /etc/init.d/
vi rcS
在文件末尾加上:

ifconfig eth0 down
ifconfig eth0 hw ether
08:90:00:A0:71:46   (后三位为给板子配置的ip的最后三位)
ifconfig eth0 172.10.1.146 netmask 255.255.254.0 up

telnetd & 

保存后重启开发板

给开发板插上网线,Windows下打开cmd或者powershell,输入命令:
telnet 172.10.1.146

弹出登录界面要求输入用户名,输入root并回车

此时会弹出一堆东西,按Ctrl+C,clear清屏即可

此时已经成功通过telnet连接到板子了,以后基本上可以丢掉串口线

至此,板子上的配置也基本完成了

测试

测试以下功能是否正常,若正常环境即搭建完成,否则需检查前面哪些步骤出现了问题
1.Ubuntu、开发板、Windows是否能互相ping通

2.开发板上使用命令:tftp -g -r 文件名 Ubuntu的ip,使用检查tftp传输文件是否正常

3.使用arm-linux-gcc编译程序,传到板子上检查是否能正常运行

至此,环境已经搭建完成。


逸一时,误一世