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·运维·php
张宇Joaquin19 分钟前
AMD uProf 工具采集微架构特征使用介绍
服务器
殷忆枫40 分钟前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker
第404号工位1 小时前
手机到底有没有偷听我们?我抓包了 72 小时,抓到了真凶
linux·人工智能·架构
老李IT笔记1 小时前
连不上不一定是网不好:新系统不认的服务端配置卡在哪一档
运维·服务器·网络
字节跳动开源1 小时前
ByteDance 2026 上半年 Linux 内核贡献回顾
linux·开源
小此方1 小时前
Linux网络(二十八):从NAT转换到正反向代理:图解内网通信、NAPT端口映射
linux·运维·网络
刚入门的大一新生1 小时前
Linux-进程池
linux·运维·服务器
鱼很腾apoc2 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c
刚入门的大一新生3 小时前
Linux-进程间通信1
linux·运维·服务器