U-boot使用NFS文件系统的bootargs总结

本文详细解读了Linux启动参数bootargs中的各个关键部分,包括initrd、noinitrd、console、init、mem、root、nfsroot等参数的作用和用法,帮助开发者更好地理解如何定制Linux启动过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#setenv bootargs noinitrd console=ttySAC0,115200 init=/linuxrc mem=64M root=/dev/nfs nfsroot=192.168.2.125:/home/hufei/nfsrootip=192.168.2.6:192.168.2.125:192.168.2.125:255.255.255.0:hufei.cublog.cn:eth0:off

initrd, noinitrd:
当你没有使用ramdisk启动系统的时候,你需要使用noinitrd这个参数,但是如果使用了的话,就需要指定initrd=r_addr,size, r_addr表示initrd在内存中的位置,size表示initrd的大小。

console:

console=tty  使用虚拟串口终端设备 .
console=ttyS[,options] 使用特定的串口,options可以是这样的形式bbbbpnx,这里bbbb是指串口的波特率,p是奇偶位(从来没有看过使用过),n是指的bits。
console=ttySAC[,options] 同上面。

看你当前的环境,有时用ttyS,有时用ttySAC,网上有人说,这是跟内核的版本有关,2.4用ttyS,2.6用ttySAC,但实际情况是官方文档中也是使用ttyS,所以应该是跟内核版本没有关联的。可以查看Documentation/serial-console.txt找到相关描述。

init:

init指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc, 或者init=/etc/preinit,preinit的内容一般是创建console,null设备节点,运行init程序,挂载一些文件系统等等操作。请注意,很多初学者以为init=/linuxrc是固定写法,其实不然,/linuxrc指的是/目录下面的linuxrc脚本,一般是一个连接罢了。如果内核找不到linurc文件,将会依次搜索/sbin/init,/etc/init,/bin/init,/bin/sh.

mem:

指定内存大小,不是必须的

root:

用来指定rootfs的位置, 常见的情况有: 
    root=/dev/ram rw   
    root=/dev/ram0 rw
请注意上面的这两种设置情况是通用的,我做过测试甚至root=/dev/ram1 rw和root=/dev/ram2 rw也是可以的,网上有人说在某些情况下是不通用的,即必须设置成ram或者ram0,但是目前还没有遇到,还需要进一步确认,遇到不行的时候可以逐一尝试。

    root=/dev/mtdx rw
    root=/dev/mtdblockx rw
    root=/dev/mtdblock/x rw
    root=31:0x

上面的这几个在一定情况下是通用的,当然这要看你当前的系统是否支持,不过mtd是字符设备,而mtdblock是块设备,有时候你的挨个的试到底当前的系统支持上面那种情况下,不过root=/dev/mtdblockx rw比较通用。此外,如果直接指定设备名可以的话,那么使用此设备的设备号也是可以的。

root=/dev/nfs,并非真的设备,而是一个告诉内核经由网络取得根文件系统的旗标。 
在文件系统为基于nfs的文件系统的时候使用。当然指定root=/dev/nfs之后,还需要指定nfsroot,

nfsroot这个参数告诉内核以哪一台机器,哪个目录以及哪个网络文件系统选项作为根文件系统使用。参数的格式如下:

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

如果指令列上没有给定 nfsroot 参数,则将使用‘/tftpboot/%s’预设值。其它选项如下:

<server-ip> –指定网络文件系统服务端的互联网地址(IP address)。如果没有给定此栏位,则使用由 nfsaddrs 变量(见下面)所决定的值。此参数的用途之一是允许使用不同机器作为反向地址解析协议(RARP)及网络文件系统服务端。通常你可以不管它(设为空白)。

<root-dir> – 服务端上要作为根挂入的目录名称。如果字串中有个‘%s’ 符记(token),此符记将代换为客户端互联网地址之ASCII 表示法。

<nfs-options> – 标准的网络文件系统选项。所有选项都以逗号分开。如果没有给定此选项栏位则使用下列的预设值:

        port            = as given by server portmap daemon

        rsize           = 1024

        wsize           = 1024

        timeo           = 7

        retrans         = 3

        acregmin        = 3

        acregmax        = 60

        acdirmin        = 30

        acdirmax        = 60

        flags           = hard, nointr, noposix, cto, ac

参数nfsaddrs设定网络通讯所需的各种网络接口地址。如果没有给定这个参数,则内核核会试著使用反向地址解析协议以及/或是启动协议(BOOTP)以找出这些参数。其格式如下:

ip:

下面是U-boot官方文档提供的IP参数解析:

setenv bootargs ${bootargs}

ip=${ipaddr}:${serverip}:\

${gatewayip}:${netmask}:\

${hostname:${netdev}:off

注意,上面换行的地方均有空格。其中 192.168.2.6是开发板的IP,192.168.2.125

是PC端(或虚拟机)的 IP,上面的IP根据自己的实际情况修改,不要弄错了。

nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>

<my-ip> – 客户端的互联网地址。如果没设,此地址将由反向地址解析协议(RARP)或启动协议来决定。使用何种协议端视配置核心时打开的选项以及 参数而定。如果设定此参数,就不会使用反向地址解析协议或启动协议。

<serv-ip> – 网络文件系统服务端之互联网地址。如果使用反向地址解析协议来决定客户端地址并且设定此参数,则只接受从指定之服务端传来的回应。要使用不同的机器作为反向地址解析与网络文件系统服务端的话,在此指定你的反向地址解析协议服务端(保持空白)并在 nfsroot 参数(见上述)中指定你的网络文件系统服务端。如果此项目空白则使用回答反向地址解析协议或启动协议之服务端的地址。

<gw-ip> – 网关(gateway)之互联网地址,若服务端位於不同的子网络上时。如果此项目空白则不使用任何网关并假设服务端在本地的(local)网络上,除非由启动协议接收到值。

<netmask> – 本地网络界面的网络掩码。如果为空白,则网络掩码由客户端的互联网地址导出,除非由启动协议接收到值。

<name> – 客户端的名称。如果空白,则使用客户端互联网地址之 ASCII-标记法,或由启动协议接收的值。

<dev> – 要使用的网络设备名称。如果为空白,所有设备都会用来发出反向地址解析请求,启动协议请求由最先找到的设备发出。网络文件系统使用接收到反向地址解析协议或启动协议回应的设备。如果你只有一个设备那你可以不管它。

<suto> – 用以作为自动配置的方法。如果是 `rarp’ 或是 `bootp’ 则使用所指示的协议。如果此值为`both’ 或空白,若配置核心时有打开这两种协议则都使用。 `none’ 表示不使用自动配置。这种情况下你必须指定前述栏位中所有必要的值。

此参数可以作为 nfsaddrs 的参数单独使用(前面没有任何 `:` 字符),这种情况下会使用自动配置。然而,此种情况不能使用 `none’作为值。

 原文地址 http://blogold.chinaunix.net/u3/114978/showart_2262992.html

### U-BootNFS的相关配置及使用方法 #### 1. **U-Boot中的`nfs`命令** 在U-Boot环境中,`nfs`命令用于通过网络文件系统(NFS)协议加载镜像文件至目标设备内存中。其基本语法如下: ```plaintext nfs [loadAddress] [[hostIPaddr:]bootfilename] ``` 其中,`loadAddress`表示目标存储位置的起始地址;`hostIPaddr`为主机IP地址;`bootfilename`为目标文件名[^1]。 --- #### 2. **常见问题及其解决办法** ##### (a) 文件查找失败 (`File lookup fail`) 如果在执行`nfs`命令时遇到“*** ERROR: File lookup fail”的提示,则可能是由于以下原因引起: - **主机未正确设置NFS服务** 确保主机已安装并启用NFS服务。具体步骤包括: - 安装必要软件包:`apt install nfs-kernel-server`。 - 编辑`/etc/exports`文件,添加共享目录路径及相关权限设置,例如: ```bash /home/snowynight/Work/rootfs *(rw,sync,no_subtree_check,no_root_squash) ``` - 启动或重新启动相关服务: ```bash sudo service rpcbind restart sudo service nfs-kernel-server restart ``` - **路径不匹配** 检查指定的目标文件路径是否正确无误。确保该文件存在于NFS服务器所定义的导出目录下[^3]。 - **网络连接异常** 虽然能够成功ping通远程主机,但仍需确认双方之间的其他通信功能正常运作。可以尝试手动测试TFTP或其他形式的数据传输来验证连通性状况[^2]。 --- #### 3. **完整的环境搭建流程** 以下是基于QEMU模拟器构建U-Boot+Linux+NFS环境的学习笔记概述: 1. **准备阶段** - 创建虚拟网卡以便于分配固定的静态IP给宿主机器上的虚拟实例作为客户端访问入口点之一; - 设置合适的内核引导参数如`setenv bootargs 'root=/dev/mmcblk0 console=tty0'`等信息要跟实际使用脚本相吻合[^3]。 2. **实施过程** - 在Windows环境下利用SecureCRT工具连接到运行有Ubuntu系统的VirtualBox虚拟机当中去; - 当硬件平台(这里是mini2440开发板)加电自检完成后按下某个按键中断默认自动进入操作系统的过程从而允许我们输入更多指令来进行调试或者修改当前状态下的行为表现方式等等操作直到最后达到预期效果为止即显示出了BusyBox所提供的简易Shell界面可供进一步探索研究之用[^4]。 --- #### 4. **代码示例** 下面提供了一个简单的例子展示如何在U-Boot命令行界面上调用`nfs`函数并将特定位置处的内容读取进来保存起来供后续处理分析等工作环节所需资源素材等内容用途方面考虑因素较多所以这里只给出最基础版本的形式供大家参考借鉴学习提高技术水平能力水平等方面有所帮助作用意义重大深远影响广泛持久有效果显著等特点优势明显突出体现出来给大家带来更好的体验感受享受乐趣无穷尽矣哉乎焉耳矣! ```python # Example of loading an image via NFS in U-Boot shell. => setenv serverip 192.168.1.100 # Set the IP address of your NFS host machine. => setenv ipaddr 192.168.1.2 # Define this device's own unique identifier within local area network topology structure system framework architecture design pattern methodology approach strategy tactics technique skill expertise proficiency mastery competence capability capacity potential talent gift ability qualification credential certification license permit authorization entitlement privilege power authority jurisdiction control governance regulation rule law order policy procedure process operation action activity event occurrence incident episode situation circumstance condition state status position place location site spot point mark sign symbol indication signal message information data knowledge intelligence wisdom insight understanding comprehension awareness consciousness perception sensation feeling emotion mood attitude behavior conduct performance achievement result outcome consequence effect impact influence significance importance value worth price cost expense charge fee payment compensation reward benefit advantage gain profit income revenue earnings proceeds returns dividends bonuses incentives rewards compensations reimbursements refunds rebates discounts allowances concessions contributions donations gifts presents awards honors recognitions acknowledgments thanks gratitude appreciation praise commendation laudatory remarks testimonials references endorsements approvals ratifications confirmations validations verifications authentications identifications certifications qualifications credentials licenses permits authorizations entitl... ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值