Windows10+Ubuntu20.04 arm-linux-gcc交叉编译环境搭建
注意:每个人的开发环境以及需求不同,请不要盲目按照本文搭建你的开发环境,酌情参考。
首先讲一下我的需求:
宿主机系统: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编译程序,传到板子上检查是否能正常运行
至此,环境已经搭建完成。
- 感谢你赐予我前进的力量