在嵌入式Linux开发过程中,有2种很常见的需求:一是编译修改uboot、设备树、内核镜像后需要将修改好的文件通过SD卡或者USB方式烧写到EMMC或者NAND FLASH中,然而体验过烧写的人都知道,这种烧写十分麻烦(通常需要复制文件到SD卡或者烧写工具,然后拨动跳冒或拨码开关切换启动方式)且耗时间,因此需要一种能够方便的和开发板之间传输文件的方式,
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是 TCP/IP 协议族中的一个用来在 客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,可以通过网线来连接开发板与开发主机,然后使用 TFTP 命令来加载内核 zImage、设备树和其他较小的文件到开发板 DDR 上,从而实现网络挂载,十分方便快捷。
二是应用程序开发过程或者根文件系统开发过程,常常需要将应用程序或者根文件系统烧写到开发板中,过程同样十分麻烦和耗时,NFS 网络文件系统,英文 Network File System(NFS),是由 SUN 公司研制的 UNIX 表示层协议 (presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样, 可以在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的 DDR 上或者是将Ubuntu上面的一个目录挂载到开发板上的某个目录,这样在开发板上能直接访问ubuntu上的目录,将交叉编译好的应用程序放在ubuntu nfs共享目录中,在开发板上就可以直接运行了,十分方便。
关于TFTP和NFS网络环境搭建过程,正点原子专门写了一个文档,这个文档对于初学者来说十分详细、实用,解决了常见场景下的开发板和开发电脑网络互连的网络配置问题。
虚拟机里面已经配置好了tftp服务,通过命令可以查看配置和运行状态:
按照文档之前的网络设置方法,Ubuntu和开发板能相互 ping 通。 这里结合 1.4 小节的配置来验证,即: 开发板 IP:192.168.2.136虚拟机 IP:192.168.2.27
在/home/alientek/linux/tftp 目录下有一个 test.c 文件,在开发板执行命令tftp -g -r test.c 192.168.2.27将虚拟机TFTP 工作目录下的 test.c 文件拷贝到开发板中
同样虚拟机已经配置好了NFS服务,可以查看nfs服务配置,执行showmount -e指令查看 NFS 共享目录
在开发板执行mount -t nfs -o nolock,nfsvers=3 192.168.2.27:/home/alientek/linux/nfs /mnt指令设置开发板 IP,创建一个 get 目录,将虚拟机(192.168.10.100)NFS 共享目录挂载到到开发板的/mnt目录中。
可以看到,在开发板上/mnt目录可以看到虚拟机nfs服务目录里面的内容了。
卸载 NFS 目录使用命令umount /mnt
总结:正点原子提供的虚拟机配置十分完善,常用服务全部搭建好了,给开发者节省了很多时间,避免了各种疑难杂症,文档十分详细,对照着文档,小白也能一步步搭建好tftp、nfs服务。
引用: 常见泽1 发表于 2023-5-14 22:54 兄弟 这个系统掉电之后 再上电 之前自己编写的程序就没了 恢复到初始状态了 你也是这样吗  ...
你放到哪个目录呢,/tmp目录肯定没了,sync同步下试试