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 地址,用于调试代码。

相关推荐
PcVue China4 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
舞动CPU6 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
钰@7 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序
wanhengwangluo7 小时前
云服务器和物理服务器的区别有哪些?
运维·服务器
秦jh_8 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
扣得君9 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20
keep__go9 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
矛取矛求9 小时前
Linux中给普通账户一次性提权
linux·运维·服务器
Fanstay9859 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
大熊程序猿9 小时前
ubuntu 安装kafka-eagle
linux·ubuntu·kafka