系统移植1:交叉开发环境的搭建,tftp服务,系统烧录

发布于:2023-01-11 ⋅ 阅读:(355) ⋅ 点赞:(0)

TFTP协议简介

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69。
TFTP通常基于UDP协议而实现,但是也不能确定有些TFTP协议是基于其它传输协议完成的。TFTP协议的设计目的主要是为了进行小文件传输,因此它不具备通常的FTP的许多功能,例如,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
TFTP代码所占的内存较小,这对于较小的计算机或者某些特殊用途的设备来说是很重要的,这些设备不需要硬盘,只需要固化了TFTP、UDP和IP的小容量只读存储器即可。因此,随着嵌入式设备在网络设备中所占的比例的不断提升,TFTP协议被越来越广泛的使用。

TFTP安装

我们可以通过在linux系统安装tftp通过网络协议来实现主机和开发板之间的数据传输,非常方便。

通过下面这个指令来查看你是否安装了tftp

dpkg -s tftp-hpa

如果没有安装,执行下面指令进行安装

sudo apt-get install tftpd-hpa tftp-hpa

随后我们要对环境变量进行配置:

sudo vi /etc/default/tftpd-hpa 

将我们建立在用户目录下的mytftp文件夹路径,进行配置:

  1 # /etc/default/tftpd-hpa
  2 
  3 TFTP_USERNAME="tftp"
  4 TFTP_DIRECTORY="/home/hqyj/mytftp"
  5 TFTP_ADDRESS=":69"
  6 TFTP_OPTIONS="--secure" // -c -s -l

随后重启配置生效:

sudo service tftpd-hpa restart

随后我们可以使用指令来将mytffp目录下的文件进行下载,也可以访问同网段的ip下载他的文件,这对于我们团队之间传输文件有了极大的便利。

tftp 192.168.2.54(ip)
get 文件名

在使用tftp实现主机和开发板之间的数据传输之前,我们需要对我们主机设置一个静态ip,以免ip变化导致传输失败(ip是由路由器进行分配的),在ubuntu中进行网络设置

 注意虚拟机的网络设置,桥接我们最好手动选择我们使用的网卡,如果选择自动可能导致,传输中切换到我们笔记本电脑的无线网卡,会导致一些传输问题:

随后我们需要设置通过超级终端来设置开发板的ip,通过pri命令可以看到所有的环境变量

 使用set指令进行设置,save指令进行保存,注意超级终端ip不能和服务器ip一样会冲突,网关和ip需在同一网段,但不能和ip冲突,且不能为广播

set serverip 192.168.3.11
save

 随后我们可以使用ping + ip 看看是否和服务器连接成功

ping 192.168.3.11

连接成功后我们就可以使用tftp指令从主机中下载文件到内存中。

tftp 41000000 1.c

系统烧写

下面我们来试试将一个系统烧写到我们的开发板中:

1.下载文件到相应的内存地址,烧写系统需要将内核文件,根文件系统,设备树文件都进行烧写,所以我们需要将这三个文件都下载到我们的开发板中。

tftp 41000000 uImage//内核文件
tftp 42000000 ramdisk.img //根文件系统
tftp 43000000 exynos4412-fs4412.dtb //设备树文件

注意三个文件存放的地址,小心覆盖!!

2.设置环境变量:

set bootargs  root=/dev/ram  rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc

3.烧写系统:注意烧写顺序!内核--根文件系统--设备树文件

bootm 41000000 42000000 43000000

4.随后我们设置系统的ip

ifconfig eth0 192.168.3.16

5.随后我们就可以通过tftp从主机中下载文件到系统中运行了。

但是这样每次断电后,内存都会被清理,所以我们可以,将其写到自启动指令中

set bootcmd tftp 41000000 uImage\;tftp 42000000 ramdisk.img\;tftp 43000000 exynos4412-fs4412.dtb\;bootm 41000000 42000000 43000000

我们也可以将文件下载到内存中,然后写入我们的emmc对应的位置,这样,断电后也不需要重新下载文件,并且可以直接从emmc中读到内存中,然后启动,非常方便:

tftp 41000000 uImage//内核文件
tftp 42000000 ramdisk.img //根文件系统
tftp 43000000 exynos4412-fs4412.dtb //设备树文件

//写到emmc中
movi write kernel 41000000
movi write dtb 43000000
movi write rootfs 42000000 30000//根文件系统要加大小

//读到内存中
movi read kernel 41000000
movi read dtb 43000000
movi read rootfs 42000000 30000

//写到自启动命令中
set bootcmd movi read kernel 41000000\;movi read dtb 43000000\;movi read rootfs 42000000 30000\;bootm 41000000 43000000 42000000

本文含有隐藏内容,请 开通VIP 后查看