本文已参加「新人创作礼」活动,一同敞开创作之路。
最近做课程设计的时分需求完成开发板和PC的文件传输,打算用FTP来完成,但屡屡呈现FTP衔接不上和指令not found的状况,终于探索出一些经验,那不如分享一下完整的流程吧。
平台:迅为单片机SUM4412,PC(win 10系统)
软件:MobaXterm,tftpd64
硬件:串口线,网线
流程:
1. 将PC和开发板IP装备到同一网段
因为跨局域网的FTP拜访需求路由,所以把PC和开发板的IP装备到同一网段,会更便利些。
我的办法是先查询开发板的IP,然后装备电脑的IP到它对应的网段下。
用串口线衔接开发板和电脑,然后用MobaXterm软件新建一个serial:
挑选对应的串口和合适的波特率(我用的115200):
假如serial port里边没有可选的项,那么或许是没有装置对应的驱动。翻开设备办理器检查更新。假如更新后依然没有反应,需求更新windows系统。我当时重复了两遍操作之后,就能看到串口选项了,点击OK。
然后在弹出的窗口里敲入ifconfig
指令后回车,就能够检查开发板的IP了:
然后装备电脑的IP为192.168.1.xxx。
用网线衔接电脑和开发板,进入控制面板->网络和internet->以太网(未辨认的网络),挑选TCP/IPv4:
双击翻开,设置IP地址为192.168.1.xxx,xxx能够任选但不能是1。设置子网掩码为255.255.255.0。
这样就把PC和开发板装备到同一网段了,下面开端正式建立FTP。
2. PC:建立FTP服务器
2.1 新建用户
在“此电脑”上右键,翻开计算机办理:
选中“用户”右键,增加新用户:
设置好用户名和暗码,然后去掉“用户下次登录时须更改暗码”的选项,不然在创立好FTP之后,登录时会提示未修改暗码,导致登不上。
2.2 翻开FTP功能
进入控制面板->程序和功能->启用或封闭windows功能,翻开FTP和IIS:
假如没做这一步,或许导致FTP无法衔接。
然后封闭防火墙,不然也或许呈现FTP无法衔接。详细有很多做法。
1)直接封闭整个防火墙
翻开控制面板->windows defender 防火墙:
2)答应FTP经过防火墙
点击更改设置,勾选FTP服务器,专用+公用:
点击答应其它应用,挑选C:\Windows\System32\svchost.exe,确定。
然后翻开防火墙对应的端口:
点击“入站规矩”,右键“新建规矩”,挑选“端口”:
挑选TCP(FTP协议是TCP/IP协议组中的协议),然后填写FTP端口(21或者22,后边创立FTP时指定的端口和这儿要相同):
网上有材料说,FTP使用时或许也会用到其他端口,因而假如只翻开21,后边或许会产生衔接不上的问题。我后来找不出衔接不上的原因,就稳妥起见把防火墙整个关了。关于防火墙的问题能够自行百度,或许要多试试。
名称和描绘都很随意,填写后就能够完成了:
2.3 创立FTP服务器
首先在PC上创立一个文件夹用于FTP传输,适当所以指定了一个路径,里边的文件是被PC和开发板共享的:开发板只能从这个文件夹获取文件,也只能上传到这个文件夹。
windows查找IIS,翻开IIS办理器,右键“网站”,增加FTP站点:
填写主机的IP(也就是上面装备后的IP),挑选“无SSL”(假如挑选答应,那么需求在增加FTP站点之前新建一个证书并选定它)。
挑选身份验证“根本”,对指定用户授权,用户名填写方才新建的用户,完成。
在FTP页面右边能够检查当时站点的敞开状况。点击根本设置->衔接为:
挑选特定用户,点击设置,填写方才创立的用户名和暗码:
2.4 指令行环境测试
查找cmd翻开指令行,输入ftp <PC机装备的IP>
,然后输入用户名和暗码即可登录。看到user logged in就说明登录成功了,能够初步判断为FTP建立完成。留意在输入暗码的时分窗口不会显现***
,并不是输入有问题。
输入bye
即可退出。
3. 开发板:装备FTP指令
3.1 telnet衔接开发板
telnet是一种长途衔接linux主机的方法,能够理解为:我想在开发板上敲指令,但是不便利,经过telnet就能够在电脑上敲指令了,而履行指令的依然是开发板,这和长途拜访服务器有点像。
首先确保PC和开发板能ping通:在PC的cmd中输入ping <开发板的IP>
,假如成功就说明ping通了。
然后进行telnet衔接。翻开MobaXterm,新建一个telnet session:
填写开发板的ip,以及用户名(root):
点击OK,输入用户名root回车即可登录。然后在这个界面下,能够检查开发板里的文件,也能够运转其间的可履行文件。
3.2 装置指令
我想让开发板往PC的FTP文件夹传文件,需求用到curl指令,但是在telnet里输入指令却无法履行,后来发现是开发板根本就没有装置这个指令,自然无法调用。 能够百度下载需求的指令,然后用现成的东西(比如tftpd64)传到开发板上,放在代码生成的可履行文件的同一目录下。
3.3 编程完成FTP指令
在C语言中,用system("<指令>")
函数能够履行所需的指令。例如,要用代码完成curl
指令,能够这么写:
system("./curl -u <FTP用户名>:<FTP暗码> -T <本地文件名> ftp://<FTP服务器的IP>");
这样就能够主动完成FTP通讯了,其他指令和格局能够查手册。
需求留意的是,代码生成的可履行文件想要在telnet里跑通,需求在运转前给curl
指令指定权限:
chmod 777 curl
./<可履行文件名>
不然上面那行代码依然无法运转。
参考材料
[1] Win10怎样设置防火墙敞开特定端口 windows10防火墙设置对特定端口敞开的办法
[2] Windows下怎样建立FTP服务而且设置其用户名和暗码
[3] ftp衔接不上怎样解决啊,如下图
[4] Win10敞开FTP与装备(完整无错版)
[5] linux下常用FTP指令