目录
1.把交叉编译器工具链的压缩包,放到自己Linux下面(家目录)
1.2.3通过网络方式传输:开发板有一个有线网卡,可以直接联网
交叉开发
也是一种开发方式,也是用来开发软件的
编写代码------->编译代码(gcc)--------->运行代码
1.交叉编译
交叉编译,也是一种编译方式,也是把一种程序语言翻译为一种机器语言
交叉?(corss-compiling)
编译环境:一般指的是编写代码和编译代码的环境(主机的信息:x86-64,windows/x86-64,Linux-ubuntu)
运行环境:一般指的是你运行程序的那一个主机的信息(x86-64,Linux-ubuntu/ARM/linux)
在实际开发中,编译环境和运行环境一般是不相同的(产品一般是不具备写代码和编译代码的条件的,没有编辑器和编译器)
我们只能在自己的PC上面写完代码(keil/ubuntu),编译好,再下载(烧写)到具体的产品上面运行,这个过程就是我们所说的交叉开发
如:
在PC机上去写一个代码,编译好,下载带51单片机上运行
在PC机上去写一个代码,编译好,下载带ARM开发板上运行
....
查资料:ARM和x86是什么?
ARM开发板的程序如何编译呢?
gcc ------>编译器(生成的可执行文件,可以放到x86上面运行)
arm-linux-gcc ----->交叉编译器(生成的可执行文件,可以放到ARM上面运行)
PC机(编写)--->PC机上进行交叉编译--->可执行程序--->下载到目标板上运行
1.1.交叉编译器的安装
sudo apt-get install gcc 安装普通的编译器(前提:联网)
sudo apt-get install arm-linux-gcc 新版本的Ubuntu可以下载,但是下载之后,可能用不了
一般来说,交叉编译器都是芯片厂商做好的,编译好的(我们也可以自己做),直接拿过来使用就可以了
交叉编译器的安装:
1.把交叉编译器工具链的压缩包,放到自己Linux下面(家目录)
cp arm-linux-gnueabi-5.4.0.tar.xz /home/china/
把交叉编译器复制到家目录
cd /home/china
2.解压到一个合适的目录
sudo mkdir /usr/local/arm //自己新建一个目录
解压到指定的目录
sudo tar -xvf arm-linux-gnueabi-5.4.0.tar.xz -C /
cd /usr/local/arm 里面就有你需要的编译器
3.找到你解压之后的编译器目录
/usr/local/arm/5.4.0/usr/bin
这个目录里面就有常用的交叉编译器工具
就可以使用这个工具去编译我们的可执行程序
/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc 1.c -o 1
使用编译器的时候需要加路径?
因为编译器所在的路径不是系统的默认路径,把这个路径加入到默认的
路径中(环境变量PATH)
4.修改环境编译
把我们编译器所在的路径变成默认路径的一部分
====>参考shell中的环境变量
1.2.将程序下载到嵌入式开发板上面运行
1.2.1 通过串口和PC通信传输程序方式
windows中先要安装串口线的驱动
设备管理器中显示:
usb2.0-ser! 表示没有安装驱动(不识别此设备)
右击设备名称---->更新驱动程序软件--->浏览计算机以查找驱动---->找到解压之后的usb_com文件夹(包含子目录)----->下一步
设备名称
USB-SERIAL CH340(COMX)
ch340表示的是设备名称
COMx表示设备连接到计算机的哪一个端口
使用串口软件去读写串口的数据
secureCRT(windows)
putty(windows)
xshell(windows)
minicom(linux)
Linux中常用的命令行串口工具
sudo apt install minicom
设置串口通信协议:
sudo minicom -s
....
打开secureCRT,点击快速连接
协议:serial 串口协议
端口:COMX 连接到你计算机的哪一个USB口
波特率: 115200 没秒发送的bit数
把流控去掉
确定,出现绿色的小√就可以了
Ctrl+C 会出现一个虚拟终端,这个终端就是控制开发板的
进入开发板之后,建议设置一个自己的工作文件夹(可以修改/etc/profile)
自己的数据都放到自己的工作文件夹
cd ~
mkdir HMW
cd HMW
通过串口下载文件到开发板上面运行
开发板没有编译器,所以我们需要先在PC上编译好,再下载到开发板上面运行
a.串口下载文件(Xmodem/Ymodem/Zmodem)
rx recive Xmodem
在开发板上面使用xmodem协议去接收数据
开发板已经做好了接收准备,在PC上面发送文件即可
开发板:
rx hello
开发板使用xmodem的协议接受一个名字叫做hello的文件
CRT上发送:
传输--->发送xmodem--->选择你要发送的文件
b.运行开发板上面的文件
./hello
-/bin/sh: ./hello: Permission denied
权限不够
======>
chmod +x hello
./hello
./hello: line 1: syntax error: unexpected "("
放到开发板上面运行的程序都需要使用arm-linux-gcc编译器编译
1.2.2 通过U盘传输程序:
1.给自己的U盘建立文件系统分区
Linux中的分区命令(fdisk)
sudo fdisk -l 列举当前系统中所有存储设备的信息
fdisk /dev/sda1
需要操作/dev/sda1这个设备
2.格式化(mkfs)
Linux系统有可能不认识你U盘的数据
U盘中的数据有自己的文件系统(由自己的存储格式)
也可以把U盘格式化为指定的文件系统(把文件系统的元数据写入到分区的最前面)
3.挂载(mount)
把指定的存储设备(U盘的分区文件系统),加载到操作系统的文件系统的某一个路径下面(一般都是自动挂载的,windows)
在Linux下面,也可能会自动挂载,一般在如下的位置
/mnt/media
or
/media
or
/mnt/udisk <------------ 我们的开发板
U盘的内容就出现在了这个目录下面,U盘自动挂载到/mnt/udisk
如果没有自动挂载,可以尝试使用mount命令手动挂载
mount /dev/sdb1 /mnt
/dev/sdb1 你要挂载的分区的名称
/mnt 你要把设备挂载带操作系统的哪一个目录下面去
挂载成功,/dev/sdb1磁盘中的内容就会出现在/mnt目录下面
4.卸载
umount /mnt
1.2.3通过网络方式传输:开发板有一个有线网卡,可以直接联网
虚拟机联网:参考Linux基础的内容
开发板连接步骤:
a.连接网线
可以直接用一根网线连接PC机和开发板(开发板和PC机两台机器构成了一个局域网),这样做的话,PC就不要连wifi
b.设置网络信息(IP地址)
主要是利于自己后序使用方便。
如果使用局域网,可以使用命令自动获取IP地址
udhcpc
可以通过命令设置IP地址(但是是临时的---关闭命令界面就会失效)
ifconfig eth0 172.11.0.4 netmask 255.255.254.0 up
route add default gw 172.11.1.1
需要开机就设置,可以使用配置文件(把上面的语句中的一种写入/etc/profile)
或者还有一种方式:
在开发板的 /etc/init.d目录下面建立一个简单的脚本文件
名称必须是 Start.sh
系统每一次重启都会执行这个脚本
内容为:
#!/bin/sh
#关闭eth0的网卡
ifconfig eth0 down
#设置eth0网卡的物理地址(最后两位建议不相同)
ifconfig eth0 hw ether 08:90:00:A0:35:88
#设置网卡的IP和子网掩码
ifconfig eth0 172.11.0.4 netmask 255.255.254.0 up
#设置网关
route add default gw 172.11.1.1
#打开telnetd服务
telnetd &
注意:
脚本必须有可执行权限
手动运行一次脚本或者重启开发板才可以生效
IP地址不能和Windows相同
同一个局域网中网关和子网掩码必须相同
如果开发板需要访问外网网址,还需要添加域名解析服务器地址
设置DNS服务区
vi /etc/resolv.conf
增加一行:
nameserver 114.114.114.114
开发板就可以ping通百度了
经过上面的操作,你的开发板,虚拟机和windows应该处于同一个局域网
可以相互ping通
例如
windows:
地址 172.11.0.1
子网掩码 255.255.254.0
网关 172.11.1.1
DNS 114.114.114.114
Ubuntu:
地址 172.11.0.3
子网掩码 255.255.254.0
网关 172.11.1.1
DNS 114.114.114.114
开发板:
地址 172.11.0.4
子网掩码 255.255.254.0
网关 172.11.1.1
DNS 114.114.114.114
c.在虚拟机中搭建一个文件传输服务器(tftp/ftp)
目的:使用网络传输文件到开发板
tftp是一个网络服务程序,是CS架构
C:client 客户端
S:server 服务器
可以在虚拟机中搭建一个tftp的服务器,在开发板上面就可以使用tftp客户端下载文件
在虚拟机中安装:
安装:
sudo apt-get install tftpd-hpa
启动:
sudo service tftpd-hpa start
停止:
sudo service tftpd-hpa stop
重启:
sudo service tftpd-hpa restart
配置tftp的配置文件:(/etc/default/tftpd-hpa )
# /etc/default/tftpd-hpa 注释
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/china/tftpboot"
//服务器共享到网络上面的目录(必须有可执行权限)
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
查看当前虚拟机中的tftp服务器的进程是否正常启动:
ps -ef | grep tftp
在同一个局域网中的其他设备(虚拟机/开发板)上就可以使用tftp从服务器上面下载文件,也可以上传文件到服务器(前提是网络正常)
在开发板上使用tftp命令下载:
tftp -g(get获取) -r(remote远程) 远程文件名 服务器地址
如:
tftp -g -r a.txt 172.11.0.3
从172.11.0.3这个服务器(虚拟机/home/china/tftpboot)上面下载一个叫做a.txt的文件到本地(开发板)的当前目录
在开发板上使用tftp命令上传:
tftp -p -l 本地文件名 服务器地址
如:
tftp -p -l a.txt 172.11.0.3
把当前目录下面的b.txt文件推送到服务器172.11.0.3的目录(/home/china/tftpboot)
Ubuntu中也可以使用tftp服务器(本地下载与上传----不同目录下)
tftp 172.11.0.3 进入tftp的命令行
or
tftp localhost 表示本地IP地址
下载: get b.txt
上传: put n.txt
quit 退出tftp
ps. 计算机中如何比较两个文件是否相同(大小/内容)?
一般使用md5sum
md5sum a.txt 计算这个文件的md5值
如果两个文件的md5值相同,那么我们认为这两个文件是相同的!!!!
刷机:(最好不要实验)
USB线连接到OTG(注意安装OTG的驱动)
步骤:
让开发板进入boot命令行(类似于BIOS)
开机启动的时候,在5S内按任意键,进入boot命令行
如果需要继续启动:
输入命令boot
如果需要刷机:
a.在boot命令行输入fastboot
b.打开windows中的刷机包,刷机auto.bat (windows中的脚步)
等待完成即可
ps:
1.查资料了解telnetd服务怎么搭建并且搭建一个telnet服务(搭建到虚拟机)
可以使用CRT连接虚拟机或者开发板
安装telnetd 服务
sudo apt-get install telnetd
sudo apt-get install xinetd
sudo apt-get install telnetd-ssl
查看telnet运行状态
sudo netstat -a | grep telnet
telnet localhost
telnet 172.11.0.3
输入用户名(china)和密码(123456)即可
exit退出
https://www.cnblogs.com/smartmsl/p/10878287.html
也可以使用超级终端工具(CRT)连接
快速连接--->协议:telnet
主机名:IP地址
2.在ubuntu中搭建一个ftp服务器
//注意:Ubuntu18.04配置文件不需要修改,ftp的共享目录默认为家目录下面的ftpboot
1.虚拟机联网
可以使用wifi,能ping通baidu即可。
ping www.baidu.com
2.下载ftp服务器
sudo apt-get install vsftpd
3.修改ftp服务器配置文件
sudo vim /etc/vsftpd.conf
修改大概第23行,把
anonymous_enable=NO
修改为
anonymous_enable=YES
添加一句,指定共享目录(此处我修改了共享目录)
anon_root=/home/china/ftpboot
保存退出。
4.重启ftp服务
sudo service vsftpd restart
5.下载至开发板
a.把要下载的文件放入(默认情况)
/srv/ftp 目录下面(/home/china/ftpboot)
b.在开发板终端使用 wget 下载
如:我要下载的文件名叫做hello
1.把hello文件放入 /srv/ftp (/home/china/ftpboot)
2.wget ftp://ftp服务器IP/hello
我的服务器IP为172.11.0.3
wget ftp://172.11.0.3/hello
3.学习一下scp这条牛逼的命令(跨主机复制)
只有能够ping通,就可以自由的复制文件
例如:
scp 1.c china@172.11.0.1:/home/china/123
把当前目录下面的1.c文件复制到IP地址为172.11.0.1上面的china用户的/home/china/123目录下面
前提是安装ssh服务
4.ssh协议,搭建一个ssh服务器,可以实现远程登录
https://blog.youkuaiyun.com/gymaisyl/article/details/86570426/
上面三个都是建立在网络连通的情况下。