【北京迅为】iTOP-4412全能版使用手册-第十九章 搭建和测试TFTP服务器

news2024/11/29 10:40:56

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。


第十九章 搭建和测试TFTP服务器

在前面的视频中介绍了控制 led 的程序的实现,需要把编译好的 led 可执行文件拷贝到文件系统里面,用 make_ext4fs 命令重新制作 system.img 文件系统,然后再烧写到 iTOP- 4412 开发板,然后再运行 led 可执行文件。这种方式的缺点是每次修改了应用程序,都需要重新制作文件系统,在重新烧写文件系统,效率很低。

这一章先讲解如何通过 TFTP 来实现在线传输文件,先在虚拟机 Ubuntu 上搭建一个服务器,并在虚拟机 Ubuntu 上做客户端进行测试。

TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。TFTP 协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。

本章配套视频为:

“视频 08TFTP 服务器搭建和测试”

Linux 网络部分的学习方法

这里并不会费劲的去介绍 TFTP 协议,那个意义不大,主要是教大家如何操作,在这个过程中进步。网络协议非常复杂,完整的网络协议一个人将资料看一遍,估计这辈子就过去了。在这个庞大的网络工程中,不同的工程师分别做不同的工作,作为嵌入式 linux 工程师,要做的就是拿别人做好的东西移植,在嵌入式上完善功能。

其实嵌入式上的所有功能从最开始,几乎都是从 PC 上移植过来的,很多代码以及软件都是在 PC 机上实现过,嵌入式 ARM 处理器的发展相对于滞后(ARM 的流行是 2000 年之后的事情),所以在嵌入式上移植就成了非常重要的一项能力。

19.1 Ubuntu服务端的搭建

在虚拟机 Ubuntu 上打开终端,如下图

 

首先输入命令“sudo apt-get install xinetd”,安装 xinetd,如下图。 

 

安装完 xinetd,如下图。

接下来输入命令“sudo apt-get install tftp tftpd”安装 tftp 和 tftpd,如下图。 

 

安装完成后,如下图 

 

然后建立 TFTP 的配置文件,使用命令“vi /etc/xinetd.d/tftp”建立文件,如下图。 

 

写入下面的内容:  

service tftp
{
socket_type	= dgram 
protocol	= udp
wait	= yes
user	= root
server	= /usr/sbin/in.tftpd 
server_args	= -s /var/tftpboot/ 
disable		= no
per_source	= 11
cps	= 100 2
flags	= IPv4
}

如下图。

注意:如上图所示,这个文件在粘贴内容之后,必须按照上面的格式严格对齐。

退出并保存。其中 server_args 设置的/var/tftpboot 目录是 tftp 服务器的目录,TFTP 客户端就是从这个目录里面获取服务器上的文件的。使用命令 mkdir /var/tftpboot 建立 tftp 服务器的目录,如下图。

 

然后设置/var/tftpboot 的访问权限为 777,如下图。 

 

输入:sudo /etc/init.d/xinetd restart 命令重启 xinetd 服务,如下图。 

 

服务器到这一步就搭建好了,后面来进行测试。

服务器测试

本机测试:在/var/tftpboot 下面建立一个文件 test,在里面输入 hello world,然后保存该文件,如下图。

 

在启动另外一个终端,如下图。

 

然后输入:tftp 127.0.0.1,如下图。 

 

输入 get test 获取 test 文件,如下图。 

 

在上图看到获取到 test 的信息 13 字节,然后输入 q 退出 tftp,如下图。 

 

然后输入 ls 查看当前目录下是否有 test 文件了,通过查看,发现当前目录下应经有 test 文件了,这就是/var/tftpboot 目录下的那个 test 文件,如下图。 

 

使用 cat 命令查看一下 test 文件的内容,如下图。 

 

通过上面的截图,看到 test 文件里面的内容是 hello world,与/var/tftpboot 目录的test 是一样的,至此的 TFTP 服务器端的配置和测试就完成了。

19.2 开发板实现TFTP文件传输

本章介绍如何使用 TFTP 服务器在开发板和虚拟机的 Ubuntu 进行传文件。

本章配套视频为:

“视频 09_01 同一网段的概念”

“视频 09_02 开发板实现 TFTP 文件传输”

在不少实验中,都会需要用到局域网的一些基础知识,在技术支持的过程中,发现不少用户对于这个概念非常模糊,导致 IP 地址或者网络环境稍微有点变化,就无法完成实验。如果没有接触过这个概念,建议将这一小节好好看一下,最好手动计算并验证两个 IP 地址是不是在同一网段。

局域网通信中会经常用到“同一网段”的概念。要弄明白这个概念需要结合 IP 地址以及子网掩码。

19.3 IP地址

关于 IP 地址的理论知识,网络上有大量的文章。

这里主要是介绍和开发板有关系需要注意的 IP 地址。

如下图所示,使用 ifconfig,可以查看 Ubuntu 系统下的 IP,下图表面 Ubuntu 的 IP 地址是 192.168.0.226。

在使用 SSH 软件和 Ubuntu 连通传文件,就需要先在 Ubuntu 下查看 IP 地址。

再来看一下开发板的 IP,如下图所示,在查看最小文件系统的 etc 文件可以看到默认的IP 地址为 192.168.1.230。

 

上图是没有打包编译的最小系统,如下图所示,是运行着的最小 linux 系统,也是可以查询和修改 IP 地址的。 

 

最小系统在开发板上运行的时候,也可以使用 vi 命令来修改 IP 地址。

子网掩码

子网掩码的查询和 IP 的查询方式一模一样。

如下图所示,使用 ifconfig,可以查看 Ubuntu 系统下的子网掩码,下图表面 Ubuntu 的子网掩码是 255.255.255.0。

 

再来看一下开发板的子网掩码,如下图所示,在查看最小文件系统的 etc/eth0-setting 文件可以看到默认的子网掩码。 

 

上图是没有打包编译的最小系统,如下图所示,是运行着的最小 linux 系统,也是可以查询和修改子网掩码。 

 

最小系统在开发板上运行的时候,也可以使用 vi 命令来修改 IP 地址。

确认IP在同一网段

本小节主要介绍如何确认两个 IP 是不是在同一网段。

如果大家计算发现 Ubuntu 系统的 IP 和开发板的 IP 不在同一网段,则需要修改开发板的IP。

单纯的两个 IP 不能直接拿来确认是不是在同一网段,必须结合子网掩码经过计算才能得出结论。计算方法是:两个 IP 分别和相应的子网掩码做与运算,得出的结果相等则表明在同一网段。这里给大家举例说明:

Ubuntu 系统的 IP 和子网掩码分别是:192.168.0.226 和 255.255.255.0

开发板的 IP 地址和子网掩码分别是:192.168.1.230 和 255.255.255.0

进行与运算需要转换为二进制

Ubuntu 系统:

IP:11000000 10101000 00000000 11100010

MASK:11111111 11111111 11111111 00000000

Result 二进制:11000000 10101000 00000000 00000000

Result 十六进制:192.168.0.0

开发板:

IP:11000000 10101000 00000001 11100110

MASK:11111111 11111111 11111111 00000000

Result 二进制:11000000 10101000 00000001 00000000

Result 十六进制:192.168.1.0

对比上面两个十六进制结果,可以发现这两个例子中的 IP 地址并不在同一个网段。开发板需要重新根据路由器或者交换机来修改 IP

根据实际情况修改 IP 和子网掩码

如下图所示,作者的路由器地址为 192.168.0.1,大家根据实际情况登陆路由器,路由器背面一般都有这个地址,如果没有查一下路由器的手册。

 

注意上图中 WAN 设置界面中的网关是 192.168.1.1,这个是广域网的网关,实验中使用的是局域网的网关,需要选择“LAN 口设置”再查找网关。

如下图所示,选择 DHCP 服务器,这里会有一个分配局域网中的 IP 区间。也就是说 IP 可以设置为 192.168.0.220 到 192.168.0.250 这个区间。

 

如下图所示,选择“LAN 口设置”再查找,子网掩码为 255.255.255.0。

另外在后面的 NFS 文件系统实验的时候需要上面的 192.168.0.1 这个地址,可以把这个地址看成局域网的网关,而不能使用 WAN 中的网关!

 

了解了 IP 地址,子网掩码,查看了路由器设置之后,首先可以确定子网掩码为255.255.255.0,然后 IP 地址可以处于 192.168.0.220 到 192.168.0.250 这个区间。大家可以在这个区间取一个地址来计算。

最后根据大家的实际情况,确认了 IP 地址和 MASK 地址之后,修改最小 linux 系统中的etc/eth0-setting 文件,将它们的 IP 设置到同一网段!

弄明白“同一网段”的概念之后,后面和网络相关的实验会简单很多。

19.4 配置

注意:搭建最小 Linux 文件系统的目录是在“/home/minilinux”上,用户只要在对应的目录下修改即可。学习到这里,大家对于 linux 的目录应该是搞得清楚了,不会成为大家学习的障碍

iTOP-4412 开发板制作的 linux 文件系统已经支持 TFTP 客户端命令了,编译 Busybox 时默认是支持该命令的,linux 文件系统在启动的时候通过脚本设置了以太网的 IP 地址是192.168.1.230,这个脚本是在文件系统的 etc/eth0-setting 文件,查看这个文件,如下图。

 

如果想修改默认的 IP,子网掩码,网关,DNS,MAC 就编辑这个文件对应的选项就可以了。

19.5 客户端的测试

在 iTOP-4412 上获取 TFTP 服务器上的文件,首先看一下 TFTP 服务器的 IP 地址,如下图。

 

通过上面的截图可以知道 TFTP 虚拟机的 IP 地址是 192.168.1.109,开发板的默认 IP 是192.168.1.230,它们在同一个网段,如果不在同一个网段需要修改开发板的 IP 地址,修改方法就是设置前面介绍的 etc 目录下的 eth0-setting 文件。

连接开发板的网口到路由器上,然后输入 ping 命令确认开发板和 TFTP 服务器是连通的,如下图。

 

如果返回上面的信息就表示开发板和 TFTP 服务器是连通的,现在获取 TFTP 上的文件, 在开发板的串口输入:tftp -g -l test -r test 192.168.1.109,如下图。 

 

执行完上面的命令,已经把 TFTP 上的 test 文件下载到开发板的当前目录下了,使用 cat 查看当前目录下 test 文件中的内容,如下图。 

 

通过上面的截图,可以看到文件的内容和 TFTP 上的文件内容是一样的,至此 TFTP 搭建完成了,以后再调试程序的时候可以用 TFTP,这样就避免了每次都要生成镜像,烧写镜像了。

19.6 TFTP传输应用程序

下面给大家演示一下调试应用程序的方法,在虚拟机的 Ubuntu 上编写过一个输出helloworld 的小程序,然后通过交叉编译器编译这个程序生成了可执行文件 helloworld,通过 cp 命令把这个可执行程序 helloworld 拷贝到了/var/tftpboot 目录下面,接下来我要在开发板端把 hello 文件下载到开发板上,需要在开发板的串口上执行“tftp -g -l helloworld -r helloworld 192.168.1.109”,如下图。

 

然后输入 ls 命令查看一下当前目录,可以看到已经有 helloworld 这个文件了,如下图, 使用命令“./helloworld”运行程序,提示没有权限。

因为 helloworld 这个文件现在没有执行权限,所以需要输入 chmod 777 helloworld 命令来修改下 helloworld 的权限,然后运行 helloworld,如下图。 

 

看到程序输出:“hello world!”了。通过 TFTP 这种方式可以提高调试程序的效率。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webrtc 3A移植以及实时处理

文章目录 前言一、交叉编译1.Pulse Audio webrtc-audio-processing2.交叉编译 二、基于alsa进行实时3A处理1.demo源码2.注意项3.效果展示 总结 前言 由于工作需要,硬件3A中的AEC效果实在太差,后面使用SpeexDSP的软3A,效果依旧不是很好&#…

Python学习第十天--处理CSV文件和JSON数据

CSV:简化的电子表格,被保存为纯文本文件 JSON:是一种数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…

Layui表格的分页下拉框新增“全部”选项

1、首先需要从后端接口获取表格的全部数据长度,这里以100为例。 2、根据请求到的数据进行表格的渲染。示例代码: let pageSize 5 let pageNo 1 let count 100 table.render({elem: XXX,done: function(res, curr, count){pageNo curr; // 将当前选…

CBK7运营安全

1 运营部门的角色 ​ prudent man、due care(按要求执行)VS due diligence(承担管理者责任) ​ 应尽关注:执行了负责任的动作降低了风险。 ​ 应尽职责:采取了所有必要的安全步骤以了解公司或个人的实际风…

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC(Artificial Intellige…

Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)

上篇文章:Linux操作系统2-进程控制2(进程等待,waitpid系统调用,阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库:Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点:进程替换 目录 …

Java函数式编程+Lambda表达式

文章目录 函数式编程介绍纯函数Lambda表达式基础Lambda的引入传统方法1. 顶层类2. 内部类3. 匿名类 Lambda 函数式接口(Functional Interface)1. **函数式接口的定义**示例: 2. **函数式接口与Lambda表达式的关系**关联逻辑:示例&…

DI依赖注入详解

DI依赖注入 声明了一个成员变量(对象)之后,在该对象上面加上注解AutoWired注解,那么在程序运行时,该对象自动在IOC容器中寻找对应的bean对象,并且将其赋值给成员变量,完成依赖注入。 AutoWire…

自动化运维(k8s)之微服务信息自动抓取:namespaceName、deploymentName等全解析

前言:公司云原生k8s二开工程师发了一串通用性命令用来查询以下数值,我想着能不能将这命令写成一个自动化脚本。 起初设计的 版本一:开头加一条环境变量,执行脚本后,提示输入:需要查询的命名空间&#xff0c…

[Python/网络安全] Git漏洞之Githack工具基本安装及使用详析

前言 本文仅分享Githack工具基本安装及使用相关知识,不承担任何法律责任。 Git是一个非常流行的开源分布式版本控制系统,它被广泛用于协同开发和代码管理。许多网站和应用程序都使用Git作为其代码管理系统,并将其部署到生产环境中以维护其代…

解决水库安全监测难题 长期无外接电源 低功耗设备智能化监测系统

解决水库安全监测难题 长期无外接电源 低功耗设备智能化监测系统 国内某水库安全监测项目需要监测点分散,且无外接供电。项目年限为4年,不允许使用太阳能电板。因此,我们需要设备具备低功耗且内置电池的功能。为了满足客户的要求,…

蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)

下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划 别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! ! ! 关注博主,更多蓝桥杯nice题目静待更新:) 动态规划 一、数字三角形 【问题描述】 上图给出了…

AD软件如何快速切换三维视图,由2D切换至3D,以及如何恢复

在Altium Designer软件中,切换三维视图以及恢复二维视图的操作相对简单。以下是具体的步骤: 切换三维视图 在PCB设计界面中,2D切换3D,快捷键按住数字键盘中的“3”即可切换; 快捷键ctrlf(或者vb快捷键也…

学习threejs,使用CubeCamera相机创建反光效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️CubeCamera 立方体相机 二、…

长时间无事可做是个危险信号

小马加入的是技术开发部,专注于Java开发。团队里有一位姓隋的女同事,是唯一的web前端工程师,负责页面开发工作,比小马早两个月入职。公司的项目多以定制化OA系统为主,后端任务繁重,前端工作相对较少。在这样…

Llama模型分布式训练(微调)

1 常见大模型 1.1 参数量对照表 模型参数量发布时间训练的显存需求VGG-19143.68M2014~5 GB(单 224x224 图像,batch_size32)ResNet-15260.19M2015~7 GB(单 224x224 图像,batch_size32)GPT-2 117M117M2019~…

Linux 子进程 -- fork函数

子进程 什么是子进程? 子进程指的是由一个已经存在的进程(称为父进程或父进程)创建的进程. 如: OS (操作系统) 就可以当作是一个进程, 用来管理软硬件资源, 当我点击浏览器, 想让浏览器运行起来时, 实际上是由 OS 接收指令, 然后 OS 帮我们将浏览器运行…

DataLoade类与list ,iterator ,yield的用法

1 问题 探索DataLoader的属性,方法 Vscode中图标含意 list 与 iterator 的区别,尤其yield的用法 2 方法 知乎搜索DataLoader的属性,方法 pytorch基础的dataloader类是 from torch.utils.data.dataloader import Dataloader 其主要的参数如下&…

C++入门——“C++11-lambda”

引入 C11支持lambda表达式,lambda是一个匿名函数对象,它允许在函数体中直接定义。 一、初识lambda lambda的结构是:[ ] () -> 返回值类型 { }。从左到右依次是:捕捉列表 函数参数 -> 返回值类型 函数体。 以下是一段用lam…

【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Socket 编程预备 1.1、理解源 IP 和目的 IP 1.2、认识端口号 1.2.1、端口号范围划分 1.2.2、理解 &q…