nfs挂载文件系统

1. 在内核里添加对nfs的支持


2. 设置/etc/exports

NFS_DIR  *(rw,sync,no_root_squash)

3. 开启nfs server

sudo /etc/nfs-kernel-server restart

如果没有请安装.

4. 设置uboot nfs启动参数

setenv bootargs root=/dev/nfs nfsroot=SERVER_IP:NFS_DIR ip=BOARD_IP:SERVER_IP:GATEWAY:SUBNET_MASK:ETH_DEV:off console=CONSOLE,BAUD_RATE

例如:setenv bootargs root=/dev/nfs nfsroot=172.16.3.206:/home/cb/Desktop/MyProject/root_fs ip=172.16.3.40:172.16.3.206:172.16.3.1:255.255.255.0::eth0:off console=ttySAC0,115200

其中:
root=/dev/nfs并非真的设备,而是一个告诉内核要通过网络取得根文件系统。
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
    参数nfsroot这个参数告诉内核以哪一台机器的哪个目录以及哪个网络文件系统选项作为根文件系统使用。
    <server-ip>  指定网络文件系统服务端的IP地址。如果没有指定定,则使用nfsaddrs变量指定的值。 
    <root-dir>    服务端上要作为根文件系统要挂载的目录名称。
    <nfs-options>  标准的网络文件系统选项,所有选项都以逗号分开。
nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>
    参数nfsaddrs设定网络通讯所需的各种网络接口地址。
    如果没有给定这个参数,则内核核会试著使用反向地址解析协议或是启动协议(BOOTP)以找出这些参数。
    <my-ip>      客户端的IP地址。 
    <serv-ip>    网络文件系统服务端的IP地址。
    <gw-ip>      网关(gateway)的IP地址。
    <netmask> 本地网络的网络掩码。如果为空白,则掩码由客户端的IP地址导出。
    <name>      客户端的名称。如果空白,则使用客户端IP地址的ASCII标记值。 
    <dev>         要使用的网络设备名称。如果你只有一个设备,那么你可以不管它。 
    <auto>        用以作为自动配置的方法。

### 配置 U-Boot 使用 NFS 挂载文件系统 在嵌入式开发环境中,U-Boot 是常用的引导加载程序之一。为了方便调试和测试目的,通常会配置 U-Boot 通过网络文件系统 (NFS) 来挂载文件系统。 #### 设置环境变量 设置合适的环境变量对于成功启动 Linux 并挂载 NFS 文件系统至关重要。这些变量定义了内核参数以及如何连接到 NFS 服务器: ```bash setenv bootargs 'console=ttyS0,115200 root=/dev/nfs rw nfsroot=${serverip}:${path},tcp ip=dhcp' ``` 上述命令设置了 `bootargs` 变量来指定控制台端口、波特率、根文件系统的路径以及其他必要的选项[^5]。 其中 `${serverip}` 和 `${path}` 应替换为实际的 NFS 服务器 IP 地址及其共享目录的位置;如果使用 DHCP 获取 IP,则可以直接采用默认值 `dhcp` 对于 `ip=` 参数部分。 #### 加载内核与设备树 接着需要从远程位置获取 Linux 内核镜像及对应的设备树 Blob (DTB),这可以通过 TFTP 协议完成: ```bash tftp ${loadaddr} zImage tftp ${fdt_addr_r} sun7i-a20-cubieboard2.dtb ``` 这里假设已经预先设定了两个地址寄存器 (`${loadaddr}`,`${fdt_addr_r}`),用于存储下载的数据缓冲区起点[^3]。 #### 执行启动指令 最后一步就是调用 `bootm` 命令执行刚刚传送到 RAM 的内核映像,并传递 DTB 给它作为硬件描述信息的一部分: ```bash bootm ${loadaddr} - ${fdt_addr_r} ``` 此操作将会触发 ARM 架构下的 Linux 系统初始化流程,并尝试按照之前设定好的方式去寻找并挂载 NFS 提供的服务作为其根文件系统。 #### 创建必要节点 另外,在某些情况下可能还需要确保目标板上的 `/dev` 下存在一些基本字符型设备节点,比如串行接口或伪终端等。可以在构建 RootFS 映像前手动创建它们,或者借助 BusyBox 工具自动生成所需资源[^4]: ```bash sudo mknod /mnt/rootfs/dev/tty1 c 4 1 sudo mknod /mnt/rootfs/dev/console c 5 1 ... ``` 以上步骤展示了完整的基于 U-Boot 实现 NFS文件系统的过程,涵盖了从准备阶段直到最终运行的关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值