当前位置: 首页 > news >正文

配置嵌入式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/nfs

U-boot环境变量设置

启动开发板,在倒计时结束前按下任意键进入 U-Boot 命令行,然后依次设置以下环境变量。

网络相关参数配置

首先为网络相关参数配置,正确配置后保证开发板能够和主机通过网络正常通信。

变量名描述示例值设置命令 (U-Boot)
ipaddr开发板的IP地址192.168.1.50setenv ipaddr 192.168.1.50
serverip主机的IP地址192.168.1.100setenv serverip 192.168.1.100
gatewayip网关地址192.168.1.1setenv gatewayip 192.168.1.1
netmask子网掩码255.255.255.0setenv netmask 255.255.255.0
ethaddr开发板 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 启动的核心。

# console=ttymxc0,115200:指定串口控制台。# root=/dev/nfs:通知内核根文件系统在 NFS 上。# nfsroot=...:指定 NFS 服务器的 IP 和根文件系统路径。# proto=tcp:使用 TCP 协议挂载 NFS,比默认的 UDP 更稳定。# rw:以读写方式挂载根文件系统。# ip=...:为内核指定静态 IP,也可以让内容通过DHCP获取IP,此时可配置 ip=dhcpsetenv bootargs'console=ttymxc0,115200 root=/dev/nfs nfsroot=${serverip}:/home/your_username/linux/nfs,proto=tcp 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 bootcmd'tftp 80800000 zImage; tftp 83000000 your_board.dtb; bootz 80800000 - 83000000'
保存U-boot配置

所有环境变量修改完成后,执行 saveenv 命令保存,否则断电后配置会丢失。

配置并保存后,可以输入 boot 命令或重启开发板,系统便会自动执行 bootcmd,尝试从网络启动。
需要注意在设置开发板的bootcmd参数时,对应系统镜像zImage和设备树your_board.dtb均通过tftp下载到开发板,故需要在宿主机上准备相应的文件,并搭建tftp服务器,提供开发板启动时文件下载。
对应tftp服务配置过程可参考文档:TFTP服务安装及配置

http://www.jsqmd.com/news/599797/

相关文章:

  • 基于STM32微控制器的频率计设计与实现
  • STM32外设驱动库解析与实战应用
  • 设计服务公司可能最适合跑AI工作流
  • OpenClaw环境隔离:Qwen3-4B模型与技能的沙盒运行配置
  • OpenClaw效率对比测试:Qwen3-14b_int4_awq在不同量化精度下的表现
  • OpenClaw跨平台控制方案:千问3.5-9B同步操作多台设备
  • 利用json-to-ts工具进行转换,放置在typeScript.ts文件中
  • 网络通信三表解析:ARP、MAC与路由表实战指南
  • 30B 脉冲分裂手术报告
  • SEO_从零开始构建可持续的SEO优化体系(468 )
  • CSS如何实现背景颜色的棋盘格分布_利用repeating-gradient
  • CSS如何制作透明度渐变的蒙版_使用linear-gradient从黑色过渡到透明
  • SecGPT-14B知识库增强:让OpenClaw支持最新CVE漏洞库
  • 嵌入式开发中的模块化设计实践与优势
  • 别再傻傻分不清!ESP32-S3上USB CDC、UART0和板载CH340到底谁在干活?
  • 基于Zigbee的智能果园灌溉系统设计与实现
  • OpenClaw可视化:用Chainlit监控SecGPT-14B的实时安全分析
  • AS717芯片,typec转DP 8k单转方案,AS717芯片代理
  • seo外包公司报价高的原因是什么_如何比较不同seo外包公司的报价
  • 如何解决SQL子查询阻塞问题_锁定机制与优化策略
  • 嵌入式开发中的抽象工厂模式实践
  • 动态规划:从贝尔曼的智慧到算法竞赛的基石
  • 为何要进行地暖清洗,清洗地暖的最佳时间是什么时候?4大水质问题:微生物、腐蚀、水垢、杂质 。化学清洗、射流清洗、脉冲清洗、射弹清洗和最新微泡清洗
  • 2026心血管功能测试诊断仪权威品牌TOP5推荐 - 优质品牌商家
  • 昆明电力管供应商哪家强
  • Cursor Pro功能解锁工具:突破AI编程助手限制的完整解决方案
  • 中小微企业私域引流问答流量服务推荐指南 - 优质品牌商家
  • 2026年商务场景中央空调回收公司TOP5推荐 - 优质品牌商家
  • 避坑!这些毕设太好抄了,3000+毕设案例推荐第1023期
  • 今天我们来聊一聊木质拼装玩具有哪些好处?