配置嵌入式Linux系统从NFS启动

张开发
2026/4/7 1:58:06 15 分钟阅读

分享文章

配置嵌入式Linux系统从NFS启动
配置嵌入式Linux系统从NFS启动嵌入式Linux开发时需要频繁将开发的程序下载到嵌入式电路板上运行尽管采用各种文件传输工具能比较方便的再宿主机和开发电路板之间进行文件传输但每次操作需要操作略显繁琐。此处记录在开发中经常使用到的嵌入式设备从NFS启动的配置过程系统为UBUNTU。NFS客户端可以透明地读写位于远端NFS服务器上的文件就像访问本地文件一样。NFS作为一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制可以消除将开发文件传输到开发板的过程开发文件编译输出后直接放置到宿主机远程主机的NFS文件系统中再将开发板重启即可完成对开发程序的测试。嵌入式设备从NFS启动的配置过程主要包括两大部分NFS服务器配置和U-boot环境变量设置。配置NFS服务器确认NFS服务是否安装若已安装则会输出相关nfs-common的信息。dpkg-l|grepnfs-common确认NFS服务是否已经启动若已经启动则看到状态显示为active (running)。sudosystemctl status nfs-kernel-server若NFS服务未安装或者服务未启动时参考以下步骤执行包含配置NFS文件夹创建及配置。安装NFS服务sudoapt-getinstallnfs-kernel-server rpcbind配置NFS文件夹一般在用户根目录下创建如创建一个Linux文件夹相关的文件均放到此文件夹下以后可以在开发板上通过网络文件系统来访问 NFS 文件夹。文件夹相关配置如下# 假定创建的NFS文件为/home/xxxx/linux/nfs其中xxxx需要替换为主机的 Ubuntu 用户名。mkdir~/linux/nfs# 打开NFS配置文件exports为系统文件注意采用sudo方式打开否则无法保存sudovi/etc/exports# 在配置文件中增加配置内容# * – 允许任意客户端访问。# rw – 读写权限。# sync – 同步写入保证数据可靠。# no_root_squash – 允许客户端 root 用户拥有服务器上的 root 权限开发调试常用。/home/xxxx/linux/nfs *(rw,sync,no_root_squash)启动重启NFS服务sudo/etc/init.d/nfs-kernel-server restart将嵌入式Linux运行的文件系统放置到NFS文件夹中。# 一般系统的跟文件系统为rootfs.tar.bz2解压至NFS目录中sudotar-vxjfyour_rootfs.tar.bz2-C~/linux/nfsU-boot环境变量设置启动开发板在倒计时结束前按下任意键进入 U-Boot 命令行然后依次设置以下环境变量。网络相关参数配置首先为网络相关参数配置正确配置后保证开发板能够和主机通过网络正常通信。变量名描述示例值设置命令 (U-Boot)ipaddr开发板的IP地址192.168.1.50setenv ipaddr 192.168.1.50serverip主机的IP地址192.168.1.100setenv serverip 192.168.1.100gatewayip网关地址192.168.1.1setenv gatewayip 192.168.1.1netmask子网掩码255.255.255.0setenv netmask 255.255.255.0ethaddr开发板 MAC 地址00:04:9f:04:d2:35setenv ethaddr 00:04:9f:04:d2:35以上是一个示例配置。设置完成后建议使用 ping 命令测试网络连通性ping 192.168.1.100。配置启动参数(bootargs)bootargs 是 U-Boot 传递给 Linux 内核的启动参数这是 NFS 启动的核心。# consolettymxc0,115200指定串口控制台。# root/dev/nfs通知内核根文件系统在 NFS 上。# nfsroot...指定 NFS 服务器的 IP 和根文件系统路径。# prototcp使用 TCP 协议挂载 NFS比默认的 UDP 更稳定。# rw以读写方式挂载根文件系统。# ip...为内核指定静态 IP也可以让内容通过DHCP获取IP此时可配置 ipdhcpsetenv bootargsconsolettymxc0,115200 root/dev/nfs nfsroot${serverip}:/home/your_username/linux/nfs,prototcp rw ip${ipaddr}:${serverip}:${gatewayip}:${netmask}::eth0:off在某些 U-Boot 版本中bootargs 的值可能在启动过程中被其他脚本如 netargs覆盖。如果修改 bootargs 无效可以尝试直接修改 netargs 变量或在 bootcmd 中强制设置 bootargs。配置自动启动命令 (bootcmd)bootcmd 是 U-Boot 启动时自动运行的命令。配置后开发板上电将自动从网络启动。# tftp 80800000 zImage通过 TFTP 将内核 zImage 下载到内存地址 0x80800000。# tftp 83000000 your_board.dtb将设备树文件下载到内存地址 0x83000000。# bootz 80800000 - 83000000从内存启动内核。# your_board.dtb请替换为您的开发板对应的设备树文件名。setenv bootcmdtftp 80800000 zImage; tftp 83000000 your_board.dtb; bootz 80800000 - 83000000保存U-boot配置所有环境变量修改完成后执行 saveenv 命令保存否则断电后配置会丢失。配置并保存后可以输入 boot 命令或重启开发板系统便会自动执行 bootcmd尝试从网络启动。需要注意在设置开发板的bootcmd参数时对应系统镜像zImage和设备树your_board.dtb均通过tftp下载到开发板故需要在宿主机上准备相应的文件并搭建tftp服务器提供开发板启动时文件下载。对应tftp服务配置过程可参考文档TFTP服务安装及配置

更多文章