Ubuntu 与Uboot网络共享资源

1、NFS

1.1 Ubuntu 下 NFS 服务开启

bash 复制代码
sudo apt-get install nfs-kernel-server rpcbind

等待安装完成,安装完成以后在用户根目录下创建一个名为"Linux"的文件夹,以后所有

的东西都放到这个"Linux"文件夹里面,在"Linux"文件夹里面新建一个名为"nfs"的文件夹。创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系统来访问 nfs 文件夹,要先配置 nfs,使用如下命令打开 nfs 配置文件/etc/exports:

bash 复制代码
sudo vi /etc/exports

打开/etc/exports 以后在后面添加如下所示内容:

bash 复制代码
/home/leeqianxi/Linux/nfs *(rw,sync,no_root_squash)

添加完成以后的/etc/exports 如图1所示:

重启 NFS 服务,使用命令如下:

bash 复制代码
sudo /etc/init.d/nfs-kernel-server restart

1.2 Uboot中的nfs操作

首先保证开发板与ubuntu在同一局域网格

|-----------|------------------------------------------|
| 环境变量 | 描述 |
| ipaddr | 开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址。 |
| ethaddr | 开发板的 MAC 地址,一定要设置。 |
| gatewayip | 网关地址。 |
| netmask | 子网掩码。 |
| serverip | 服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。 |

uboot 中的 nfs 命令格式如下所示:

bash 复制代码
nfs [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress 是要保存的 DRAM 地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。

准备好以后就可以使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处,命令如下:

bash 复制代码
nfs 80800000 192.168.1.253:/home/leeqianxi/Linux/nfs/zImage

命 令 中 的 " 80800000 " 表 示zImage保 存 地 址 ,"192.168.1.253:/home/leeqianxi/Linux/nfs/zImage"表示 zImage 在 192.168.1.253 这个主机中,路径为/home/leeqianxi/Linux/nfs/zImage。

linux nfs错误 Loading: *** ERROR: File lookup fail

开发板的nfs和主机nfs版本不一致引起的。

解决办法就是编辑主机上的nfs-kernel-server文件,命令如下。

bash 复制代码
sudo vim /etc/default/nfs-kernel-server

打开文件进行3项编辑,最后保存退出,如下图。

然后对服务进行重启,命令如下。

bash 复制代码
sudo service nfs-kernel-server restart

在开发板的terminal上重新输入nfs命令就可以了。

2、TFTP

2.1 Ubuntu 上搭建 TFTP 服务器

在 Ubuntu 上搭建 TFTP 服务器,需要安装 tftp-hpa 和 tftpd-hpa,命令如下:

bash 复制代码
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

和 NFS 一样,TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如

下:

bash 复制代码
mkdir /home/leeqianxi/Linux/tftpboot
chmod 777 /home/leeqianxi/Linux/tftpboot 

注意!我们要给 tftpboot 文件夹权限,否则的话 uboot 不能从tftpboot 文件夹里面下载文件。

最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行

创建,然后在里面输入如下内容:

server tftp

{

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -s /home/leeqianxi/Linux/tftpboot/

disable = no

per_source = 11

cps = 100 2

flags = IPv4

}

完了以后启动 tftp 服务,命令如下:

bash 复制代码
sudo service tftpd-hpa start

打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:

/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/leeqianxi/Linux/tftpboot"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="-l -c -s"

TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过

TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。

最后输入如下命令, 重启 tftp 服务器:

bash 复制代码
sudo service tftpd-hpa restart

tftp 服务器已经搭建好了,接下来就是使用了。

将 zImage 镜像文件拷贝到 tftpboot 文件夹中,并且给予 zImage 相应的权限,命令如下:

bash 复制代码
cp zImage /home/zuozhongkai/linux/tftpboot/
cd /home/zuozhongkai/linux/tftpboot/
chmod 777 zImage

2.2 uboot 中的 tftp 操作

uboot 中的 tftp 命令格式如下:

bash 复制代码
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

看 起 来 和 nfs 命 令 格 式 一 样 的 , loadAddress 是 文 件 在 DRAM 中 的 存 放 地 址 ,

\[hostIPaddr:\]bootfilename\]是要从 Ubuntu 中下载的文件。但是和 nfs 命令的区别在于,tftp 命令 不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。比如我们现在将 tftpboot 文 件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处,命令如下: ```bash tftp 80800000 zImage ``` 因为serverip已经指定了 Ubuntu 主机 IP 地址,用于调试代码。

相关推荐
人工智能训练5 小时前
Linux 系统核心快捷键表(可打印版)
linux·运维·服务器·人工智能·ubuntu·容器·openeuler
大聪明-PLUS5 小时前
C++ 中的引用和引用类型
linux·嵌入式·arm·smarc
S***q3775 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu
Vanranrr6 小时前
C++临时对象与悬空指针:一个导致资源加载失败的隐藏陷阱
服务器·c++·算法
dualven_in_csdn6 小时前
【疑难问题】某些win11机器 网卡统计也会引起dns client 占用cpu问题
运维·服务器·网络
6***v4176 小时前
windows手动配置IP地址与DNS服务器以及netsh端口转发
服务器·windows·tcp/ip
赖small强6 小时前
【Linux驱动开发】ESP-Hosted-FG 深度解析指南
linux·驱动开发·esp32·esp-hosted-fg
翼龙云_cloud7 小时前
亚马逊云渠道商:如何快速开始使用Amazon RDS?
运维·服务器·云计算·aws