环境搭建 ubuntu下TFTP、 NFS启动环境搭建

本文详细介绍了如何在Ubuntu系统中设置NFS服务器并提供共享文件夹,以及配置TFTP服务器用于通过网络加载内核镜像。步骤包括安装服务、配置权限、启动服务和在嵌入式系统中使用NFS和TFTP进行启动和文件传输。
摘要由CSDN通过智能技术生成

环境搭建: ubuntu下TFTP、 NFS启动环境搭建

1、NFS 服务开启

安装 NFS 服务

$ sudo apt-get install nfs-kernel-server rpcbind

创建nfs文件夹

创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系统来访问 nfs 文件夹

$mkdir nfs

在这里插入图片描述

配置nfs

sudo vim /etc/exports

在这里插入图片描述

参数值及 内容说明:

1、rw和ro:该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

2、sync和async:sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

3、no_root_squash和root_squash:客户端使用 NFS 文件系统的账号若为root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行;而all_squash,不论登入 NFS 的使用者身份为何都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 。

重启 NFS 服务

$ sudo /etc/init.d/nfs-kernel-server restart

2、tftp环境搭建

ubuntu主机作为tftp服务器,通过网络下载启动所需内核镜像、设备树到DRAM中

$ sudo apt-get install tftp-hpa tftpd-hpa
$ sudo apt-get install xinetd

TFTP 需要一个文件夹来存放文件,在用户目录下新建一个目录tftp

$ mkdir /home/jiabin/tftp
$ chmod 777 /home/jiabin/tftp

要给 tftpboot 文件夹权限,否则的话 uboot 不能从tftp文件夹里面下载文件

配置 tftp

新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行
创建,然后在里面输入如下内容

server tftp
{
        socket_type     = dgram
        protocol        = udp
        wait            = yes
        user            =root
        server          =/user/sbin/in.tftpd
        server_args     = -s /home/jiabin/tftp/
        disable         = no
        per_source      = 11
        cps             = 100 2
        flags           = IPv4
}

启动 tftp 服务

$ sudo service tftpd-hpa start

修改/etc/default/tftpd-hpa文件内容如下:

在这里插入图片描述

TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限

重启tftp服务器:

$ sudo service tftpd-hpa restart

3、开发板uboot环境设置

设置服务器的ip地址

 # setenv serverip 128.255.1.99

设置开发板的IP地址

# setenv ipaddr 128.255.1.66
# setenv netmask255.255.255.0
# setenv gatewayip 128.255.1.1

保存

# saveenv

与服务器(ubuntu)网络测试:

提示 host is alive 就表示开发板和 Ubuntu 系统可以互通

在这里插入图片描述

nfs传输文件测试:

使用 nfs 命令来将 uImage 下载到开发板 DRAM 的 0X90100000 地址处,
命令如下:

#nfs 0X90100000 nfs 0x90100000 128.255.1.99:/home/jiabin/nfs/uImage

命 令 中 的 “ 0X90100000 ” 表 示 zImage 保 存 地 址 ,“128.255.1.99:/home/jiabin/nfs/uImage”表示 zImage 在128.255.1.99: 这个主机中,路径为/home/jiabin/nfs/uImage。下载过程如图 所示

在这里插入图片描述

tftp验证:

uboot 中的 tftp 命令格式如下:tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、配置嵌入式系统linux内核对NFS文件系统的支持

->  Networking support
  ->  Networking options
      [*]   IP: kernel level autoconfiguration
 
-> File systems
  [*] Network File Systems
      <*>   NFS client support
      <*>     NFS client support for NFS  version 3
      [*]       NFS client support for the NFSv3  ACL protocol extension
      [*]   Root file system on NFS

5、使用网络启动内核及文件系统

进入uboot命令行模式,环境变量如下:

bootloader#printenv
arch=arm
baudrate=115200
board=ft2004
board_name=ft2004
boot_cmdline=setenv bootargs 'console=ttyAMA1,115200 earlycon=pl011,0x28001000'
boot_fdt=bootm 0x90100000 -:- 0x95000000
bootcmd=run distro_bootcmd
bootdelay=1
cpu=armv8
distro_bootcmd=run boot_cmdline; run load_kernel; run load_fdt; run boot_fdt
eth1addr=98:0e:24:39:d5:89
ethaddr=98:0e:24:39:d5:88
fdtcontroladdr=fae5a1d8
gatewayip=128.255.1.1
ipaddr=128.255.1.66
load_fdt=ext4load scsi 0:1 0x95000000 phytium-ft2004-linux.dtb
load_kernel=ext4load scsi 0:1 0x90100000 uImage
netmask=255.255.255.0
serverip=128.255.1.99
stderr=uart@28001000
stdin=uart@28001000
stdout=uart@28001000
tftp_fdt=tftpboot 0x95000000 phytium-ft2004-linux.dtb
tftp_kernel=tftpboot 0x90100000 uImage
tftp_start=run boot_cmdline; run tftp_kernel; run tftp_fdt; run boot_fdt
vendor=phytium
Environment size: 822/4092 bytes

重新设置环境变量

# setenv nfsbootargs 'setenv bootargs 'console=ttyAMA1,115200 earlycon=pl011,0x28001000 root=/dev/nfs nfsroot=128.255.1.99:/home/jiabin/nfs,vers=3 rw ip=dhcp''
# setenv net_start 'run nfsbootargs; run tftp_kernel;run tftp_fdt;run boot_fdt'

bootargs环境变量设置参考:

格式如下:

root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device><autoconf>:<dns0-ip>:<dns1-ip>
<server-ip>:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,那就是 Ubuntu 的 IP地址,比如我的 Ubuntu 主机 IP 地址为 128.255.1.99。
<root-dir> :根文件系统的存放路径,比如我的就是/home/jiabin/nfs。
<nfs-options>:NFS 的其他可选选项,一般不设置。
<client-ip> :客户端 IP 地址,也就是我们开发板的 IP 地址,Linux 内核启动以后就会使用此 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内,并且没有被其他的设备使用,在 Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用,如果不能ping 通就说明没有被使用,那么就可以设置为开发板的 IP 地址,比如我就可以设置为128.255.1.66。
<server-ip> :服务器 IP 地址,前面已经说了。
<gw-ip> :网关地址,我的就是 128.255.1.1。
<netmask>:子网掩码,我的就是 255.255.255.0。
<hostname>:客户机的名字,一般不设置,此值可以空着。
<device> :设备名,也就是网卡名,一般是 eth0,eth1….,正点原子的 I.MX6U-ALPHA 开
发板的 ENET2 为 eth0,ENET1 为 eth1。如果你的电脑只有一个网卡,那么基本只能是 eth0。
这里我们使用 ENET2,所以网卡名就是 eth0。
<autoconf> :自动配置,一般不使用,所以设置为 off。
<dns0-ip> :DNS0 服务器 IP 地址,不使用。
<dns1-ip> :DNS1 服务器 IP 地址,不使用。

扩展:ramfs

ramfs就是将文件系统和内核一起编译,编译出来的镜像就包括 内核本身和文件系统

内核打开ramfs
在这里插入图片描述

Initramfs source file(s)选项中,填入文件系统的路径即可。

ns0-ip> :DNS0 服务器 IP 地址,不使用。
:DNS1 服务器 IP 地址,不使用。




## 扩展:ramfs

`ramfs`就是将文件系统和内核一起编译,编译出来的镜像就包括 **内核本身和文件系统** 

内核打开`ramfs`:

[外链图片转存中...(img-U7i60lSe-1700475767863)]

在`Initramfs source file(s)`选项中,填入文件系统的路径即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值