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

相关推荐
xcLeigh14 小时前
Go入门:无类型常量与类型常量的区别
服务器·开发语言·golang
小此方16 小时前
Re:Linux系统篇(五十七)线程篇 · 十:基于环形缓冲的生产者消费者模型与信号量
linux·运维·驱动开发
fanged16 小时前
Linux的DD命令
linux·运维·服务器
华清远见成都中心17 小时前
FreeRTOS事件组(Event Group)的工作机制分析
服务器·网络·网络协议
张洛闻Eren17 小时前
MySQL 管理复制拓扑【MySQL第四课】
linux·运维·数据库·mysql
Meya112717 小时前
RFID 机房资产管理系统:告别手工台账,实现资产全流程自动管控
大数据·服务器
西安景驰电子17 小时前
《PTP精确时间协议系列》第二篇:工程部署、调试与性能优化
运维·服务器·网络·数据库·windows·性能优化
xiaohua100918 小时前
Linux-JVM线程查询
linux·jvm
blueSatchel18 小时前
u-boot启动过程(bootROM到SPL到u-boot)
linux·u-boot