uboot环境变量设置(大地小神之个人收藏)

合集下载

uboot环境变量设置(大地小神之个人收藏)

uboot环境变量设置(大地小神之个人收藏)

u-boot的环境变量u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot 自己定义的,更改这些名字会出现错误,下面的表中我们列出了一些常用的环境变量:上面只是一些最基本的环境变量,请注意,板子里原本是没有环境变量的,u-boot的缺省情况下会有一些基本的环境变量,在你执行了saveenv之后,环境变量会第一次保存到flash中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。

U-boot的环境变量值得注意的有两个:bootcmd 和bootargs◆b o o t c m d前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。

◆b o o t a r g sbootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。

bootargs的种类非常非常的多,我们平常只是使用了几种而已,感兴趣的可以看看这篇文章说的很全:/u2/79570/showart_1675071.html。

bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法,甚至你也可以不设置bootargs,而直接将其写到内核中去(在配置内核的选项中可以进行这样的设置),正是这些原因导致了bootargs使用上的困难。

下面介绍一下bootargs常用参数,bootargs的种类非常的多,而且随着kernel的发展会出现一些新的参数,使得设置会更加灵活多样。

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

《uboot环境变量:详谈bootcmd和bootargs》

《uboot环境变量:详谈bootcmd和bootargs》

《uboot环境变量:详谈bootcmd和bootargs》1.uboot中的环境变量bootdelay:执⾏⾃动启动的等候秒数baudrate:串⼝控制台的波特率netmask:以太⽹接⼝的掩码ethaddr:以太⽹卡的⽹卡物理地址bootfile:缺省的下载⽂件bootargs:传递给内核的启动参数bootcmd:⾃动启动时执⾏的命令serverip:服务器端的ip地址ipaddr:本地ip 地址stdin:标准输⼊设备stdout:标准输出设备stderr:标准出错设备 以上是⼀些基本的环境变量。

uboot中⼀般会有⼀些缺省的环境变量。

在启动uboot后会将参数放在特定的FLASH区域,之后由kernel去获取解析。

还有另⼀种⽅法设置环境变量就是在uboot启动后进⼊命令⾏模式,设置环境变量,然后执⾏saveenv后,会将设置的环境变量保存到特定区域的FLASH中,由kernel去获取解析。

其中bootargs和bootcmd相对⽐较重要。

2.bootargs解析root: ⽬前很多新的开发板都是使⽤FLASH作为存储。

因为很多都直接使⽤MTD驱动程序。

MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的⽀持、更好的管理和基于扇区的擦除和读写操作的更好的接⼝。

Linux 下的 MTD驱动程序接⼝被划分为两类模块:⽤户模块和硬件模块。

有两个流⾏的⽤户模块可启⽤对闪存的访问: MTD_CHAR 和 MTD_BLOCK 。

MTD_CHAR 提供对闪存的原始字符访问,⽽ MTD_BLOCK 将闪存设计为可以在上⾯创建⽂件系统的常规块设备(象 IDE 磁盘)。

与MTD_CHAR 关联的设备是 /dev/mtd0、mtd1、mtd2(等等),⽽与 MTD_BLOCK 关联的设备是 /dev/mtdblock0、mtdblock1(等等)。

由于 MTD_BLOCK 设备提供象块设备那样的模拟,通常更可取的是在这个模拟基础上创建象 FTL 和 JFFS2 那样的⽂件系统。

uboot环境变量总结

uboot环境变量总结

Common目录下面与环境变量有关的文件有以下几个:env_common.c,env_dataflash.c,env_eeprom.c,env_flash.c,env_nand.c,env_nowhere.c,env_nvram.c,environment.c。

env_common.c中包含的是default_environment[]的定义;env_dataflash.c,env_eeprom.c,env_flash.c,env_nand.c, env_nvram.c中包含的是相应存储器与环境变量有关的函数:env_init(void),saveenv(void),env_relocate_spec (void),env_relocate_spec (void),use_default()。

至于env_nowhere.c,因为我们没有定义CFG_ENV_IS_NOWHERE,所以这个文件实际上没有用。

environment.c这个文件时是我真正理解环境变量的一个关键。

在这个文件里定义了一个完整的环境变量的结构体,即包含了这两个ENV_CRC(用于CRC校验),Flags(标志有没有环境变量的备份,根据CFG_REDUNDAND_ENVIRONMENT这个宏定义判断)。

定义这个环境变量结构体的时候还有一个非常重要的关键字:__PPCENV__,而__PPCENV__在该.c文件中好像说是gnu c编译器的属性,如下:# define __PPCENV__ __attribute__ ((section(".text")))意思是把这个环境变量表作为代码段,所以在编译完UBOOT后,UBOOT的代码段就会有环境变量表。

当然,这要在我们定义了ENV_IS_EMBEDDED之后才行,具体而言,环境变量表会在以下几个地方出现(以nand flash为例):1、UBOOT中的代码段(定义了ENV_IS_EMBEDDED),2、UBOOT中的默认环境变量, 3、紧接UBOOT(0x0 ~ 0x1ffff)后面:0x20000 ~ 0x3ffff 之间,包括备份的环境变量,我们读取,保存也是对这个区域(即参数区)进行的。

uboot命令使用教程(uboot参数设置)

uboot命令使用教程(uboot参数设置)

uboot命令使⽤教程(uboot参数设置)1. Printenv 打印环境变量。

uboot> printenvbaudrate=115200ipaddr=192.168.0.111ethaddr=32:34:46:78:9A:DCserverip=192.168.0.100Environment size: 80/8188 bytes2. Setenv 设置新的变量如:uboot> setenv myboard AT91RM9200DKuboot> saveenvuboot> printenvbaudrate=115200ipaddr=192.168.0.111ethaddr=32:34:46:78:9A:DCserverip=192.168.0.100myboard=AT91RM9200DKEnvironment size: 102/8188 bytes⼜如想重置启动参数bootargs:uboot> setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'uboot> saveenv3. saveenv 保存变量命令将当前定义的所有的变量及其值存⼊ flash 中。

⽤来存储变量及其值的空间只有 8k 字节,应不要超过。

(如上例,每次与setenv配合使⽤)4. loadb 通过串⼝ Kermit 协议下载⼆进制数据。

5. tftp 通过⽹络下载程序,需要先设置好⽹络配置简单配置:uboot> setenv ethaddr 32:34:46:78:9A:DCuboot> setenv ipaddr 192.168.0.111uboot> setenv serverip 192.168.0.100//下载 bin ⽂件到地址 0x20000000 处。

uboot的bootcmd bootargs参数详解

uboot的bootcmd bootargs参数详解
或者
setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5’
上面就是我们经常使用的几种bootargs的组合,老实说,bootargs非常非常的灵活,所以设置的方法有很多中形式,具体的还应该根据你的平台具体的情况来设置。
mtdparts的格式如下:
mtdparts=[;
:= :[,]
:= [@offset][][ro]
:= unique id used in mapping driver/device
:= standard linux memsize OR "-" to denote all remaining space
3). 假设文件系统是jffs2类型的,且在flash中,bootargs的设置应该如下
setenv bootargs ‘mem=32M console=ttyS0,115200 noinitrd root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc’
这两种方法可以用,不过很明显第二种要详细很多,请注意第二种中which netcard 是指开发板上的网卡,而不是主机上的网卡。
说完常见的几种bootargs,那么我们来讨论平常我经常使用的几种组合:
1). 假设文件系统是ramdisk,且直接就在内存中,bootargs的设置应该如下:
setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc’

uboot源码分析(2)uboot环境变量实现简析

uboot源码分析(2)uboot环境变量实现简析

uboot源码分析(2)uboot环境变量实现简析uboot 环境变量实现简析----------基于u-boot-2010.03u-boot的环境变量是使⽤u-boot的关键,它可以由你⾃⼰定义的,但是其中有⼀些也是⼤家经常使⽤,约定熟成的,有⼀些是u-boot⾃⼰定义的,更改这些名字会出现错误,下⾯的表中我们列出了⼀些常⽤的环境变量:bootdelay 执⾏⾃动启动的等候秒数baudrate 串⼝控制台的波特率netmask 以太⽹接⼝的掩码ethaddr 以太⽹卡的⽹卡物理地址bootfile 缺省的下载⽂件bootargs 传递给内核的启动参数bootcmd ⾃动启动时执⾏的命令serverip 服务器端的ip地址ipaddr 本地ip 地址stdin 标准输⼊设备stdout 标准输出设备stderr 标准出错设备上⾯只是⼀些最基本的环境变量,请注意,板⼦⾥原本是没有环境变量的,u-boot的缺省情况下会有⼀些基本的环境变量,在你执⾏了saveenv之后,环境变量会第⼀次保存到flash或者eeprom中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。

环境变量可以通过printenv命令查看环境变量的设置描述,通过setenv 命令进⾏重新设置,设置完成后可以通过saveenv将新的设置保存在⾮易失的存储设备中(nor flash 、nand flash 、eeprom)。

例如:setenv bootcmd "nand read 0x30008000 0x80000 0x500000;bootm 0x30008000"saveenv通过这两条命令就完成了环境变量bootcmd的重新设置,并讲其保存在固态存储器中。

下⾯简单分析下uboot中环境变量的实现流程。

uboot启动后,执⾏玩start.S中的汇编程序,将跳⼊board.c 中定义的start_arm_boot()函数中,在该函数中,uboot讲完成板⼦外设和相关系统环境的初始化,然后进⼊main_loop循环中进⾏系统启动或者等待与⽤户交互,这其中就包括环境变量的初始化和重定位。

如何设置u-boot变量ip地址

如何设置u-boot变量ip地址

Uboot 下查看环境变量命令pri主机IP为 192.168.110.101用户手册设置如下:u-boot>setenv etnaddr 11:22:33:44:55:66u-boot>setenv ipaddr 192.168.0.54u-boot>setenv serverip 192.168.0.55请问这样可以吗?应该就是这样了,是不是还要设置下gatewayip和netmask。

楼主别忘了用saveenv保存环境变量。

u-boot>setenv etnaddr 11:22:33:44:55:66 是设置板子的mac地址。

u-boot>setenv ipaddr 192.168.0.54是设置板子的IP地址。

u-boot>setenv serverip 192.168.0.55是设置提供内核下载的服务器IP地址。

还需要u-boot>setenv gatewayip 192.168.0.1 设置网关u-boot>setenv netmask 255.255.255.0 设置子网掩码可能还需要有其他的设置,看一下用户手册上的说明和例子。

最后u-boot>saveenv谢谢【windows主机】ip 192.168.0.55默认网关 192.168.0.1子网掩码 255.255.255.0【目标板】ipaddr 192.168.0.54serverip192.168.0.55gatewayip 192.168.0.1netmask 255.255.255.0这样可以吗?是不是主机ip要和serverip完全一样?是不是主机ip要和serverip完全一样?不是, 和tftp服务器的ip一样就可以, 我的tftp就在虚拟机里, 所以和window不一样我的是在windows下通过超级终端 u-boot已经烧写好了用交叉线直接将pc和开发板连起来网口用tftp烧写内核时出错TFTP error: 'File not found' (1)找不到文件这是怎么回事啊?。

环境变量配置步骤

环境变量配置步骤

环境变量配置步骤环境变量配置步骤环境变量是操作系统中的一些特定值,它们用于定义系统的行为。

在计算机中,每个程序都有自己的环境变量,这些变量用于存储程序运行所需要的信息。

在本文中,我们将详细介绍如何配置环境变量。

第一步:打开控制面板首先,我们需要打开控制面板。

在Windows操作系统中,我们可以通过点击“开始”按钮,在搜索框中输入“控制面板”来打开控制面板。

在MacOS操作系统中,则需要点击屏幕左上角的苹果图标,在弹出菜单中选择“系统偏好设置”,然后选择“用户与群组”,接着点击右下角的锁形图标以解锁设置。

第二步:选择系统和安全选项在Windows操作系统中,我们需要选择“系统和安全”选项来进入环境变量设置界面。

在MacOS操作系统中,则需要选择“高级选项”。

第三步:进入环境变量设置界面在Windows操作系统中,我们需要点击“高级系统设置”选项,并切换到“高级”选项卡,在下方找到“环境变量”按钮并点击即可进入环境变量设置界面。

在MacOS操作系统中,则需要点击右下角的“高级选项”,然后选择“环境变量”。

第四步:添加新的环境变量在环境变量设置界面中,我们可以看到两个列表:用户变量和系统变量。

用户变量只对当前登录的用户有效,而系统变量则对整个系统有效。

如果我们需要添加一个新的环境变量,我们需要点击“新建”按钮,在弹出的对话框中输入环境变量名称和值,并选择是要将其添加到用户变量还是系统变量中。

第五步:编辑已有的环境变量如果我们需要修改已有的环境变量,我们可以在相应的列表中找到该变量,并点击“编辑”按钮来进行修改。

在弹出的对话框中,我们可以修改环境变量值或者删除该环境变量。

第六步:删除已有的环境变量如果我们需要删除已有的环境变量,我们可以在相应的列表中找到该变量,并点击“删除”按钮来进行删除。

在弹出的确认对话框中,我们需要确认是否要删除该环境变量。

总结通过以上几个简单步骤,我们就可以轻松地配置和管理操作系统中的环境变量了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

u-boot的环境变量u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot 自己定义的,更改这些名字会出现错误,下面的表中我们列出了一些常用的环境变量:上面只是一些最基本的环境变量,请注意,板子里原本是没有环境变量的,u-boot的缺省情况下会有一些基本的环境变量,在你执行了saveenv之后,环境变量会第一次保存到flash中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。

U-boot的环境变量值得注意的有两个:bootcmd 和bootargs◆b o o t c m d前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。

◆b o o t a r g sbootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。

bootargs的种类非常非常的多,我们平常只是使用了几种而已,感兴趣的可以看看这篇文章说的很全:/u2/79570/showart_1675071.html。

bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法,甚至你也可以不设置bootargs,而直接将其写到内核中去(在配置内核的选项中可以进行这样的设置),正是这些原因导致了bootargs使用上的困难。

下面介绍一下bootargs常用参数,bootargs的种类非常的多,而且随着kernel的发展会出现一些新的参数,使得设置会更加灵活多样。

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

root=/dev/m t d x rwroot=/dev/m t d b l o c k x rwroot=/dev/mtdblock/x rwroot=31:0x上面的这几个在一定情况下是通用的,当然这要看你当前的系统是否支持,不过m t d是字符设备,而m t d b l o c k是块设备,有时候你的挨个的试到底当前的系统支持上面那种情况下,不过root=/dev/mtdblockx rw比较通用。

此外,如果直接指定设备名可以的话,那么使用此设备的设备号也是可以的。

root=/dev/nfs在文件系统为基于nfs的文件系统的时候使用。

当然指定root=/dev/nfs之后,还需要指定nfsroot=serverip:nfs_dir,即指明文件系统存在那个主机的那个目录下面。

B.r o o t f s t y p e这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区.C.c o n s o l e1. console=tty<n> 使用虚拟串口终端设备<n>.2. console=ttyS<n>[,options]使用特定的串口<n>,options可以是这样的形式bbbbp n x,这里bbbb是指串口的波特率,p是奇偶校验位,n是指的b i t s。

3. console=ttySAC<n>[,options]同上面。

看你当前的环境,有时用ttyS<n>,有时用ttySAC<n>,网上有人说,这是跟内核的版本有关,2.4用ttyS<n>,2.6用ttySAC<n>,但实际情况是官方文档中也是使用ttyS<n>,所以应该是跟内核版本没有关联的。

可以查看Documentation/serial-console.txt找到相关描述。

D.m e mmem=xxM 指定内存的大小,不是必须的。

E.r a m d i s k_s i z eramdisk=xxxxx 不推荐ramdisk_size=xxxxx 推荐上面这两个都可以告诉ramdisk 驱动,创建的ramdisk的size,默认情况下是4m(s390默认8M),你可以查看Documentation/ramdisk.txt 找到相关的描述,不过ramdisk=xxxxx在新版的内核都已经没有提了,不推荐使用。

F.i n i t rd,n o i n i t r d当你没有使用r am d isk启动系统的时候,你需要使用noinitrd这个参数,但是如果使用了的话,就需要指定i n i t r d=r_a d d r,s i z e,r_a d d r 表示initrd在内存中的位置,size表示initrd的大小。

G.i n i tinit指定的是内核启起来后,进入系统中运行的第一个脚本,一般i n i t=/l i n u x r c, 或者i n i t=/e t c/p r e i n i t,preinit的内容一般是创建console,null设备节点,运行init程序,挂载一些文件系统等等操作。

请注意,很多初学者以为init=/linuxrc是固定写法,其实不然,/linuxrc 指的是/目录下面的linuxrc脚本,一般是一个连接罢了。

H.m t d p a r t smtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M( jffs2),38272k(user),256k(env),384k(uboot)要想这个参数起作用,内核中的mtd驱动必须要支持,即内核配置时需要选上Device Drivers ---> Memory Technology Device (MTD) support ---> Command line partition table parsingmtdparts的格式如下:mtdparts=<mtddef>[;<mtddef]<mtddef> := <mtd-id>:<partdef>[,<partdef>]<partdef> := <size>[@offset][<name>][ro]<mtd-id> := unique id used in mapping driver/device<size> := standard linux memsize OR "-" to denote all remaining space <name> := (NAME)因此你在使用的时候需要按照下面的格式来设置:mtdparts=mtd-id:<size1>@<offset1>(<name1>),<size2>@<offset2>(<na me2>)这里面有几个必须要注意的:a. mtd-id 必须要跟你当前平台的flash的mtd-id一致,不然整个mtdparts会失效。

b. size在设置的时候可以为实际的size(xxM,xxk,xx),也可以为'-'这表示剩余的所有空间。

举例:假设flash 的mtd-id是sa1100,那么你可以使用下面的方式来设置:mtdparts=sa1100:- →只有一个分区mtdparts=sa1100:256k(ARMboot)ro,-(root) →有两个分区可以查看drivers/mtd/cmdlinepart.c中的注释找到相关描述。

I.i p指定系统启动之后网卡的ip地址,如果你使用基于nfs的文件系统,那么必须要有这个参数,其他的情况下就看你自己的喜好了。

设置ip 有两种方法:ip = ip addrip=i p addr:s e r v e r i p addr:g a t e w a y:n e t m a s k::which netcard:off这两种方法可以用,不过很明显第二种要详细很多,请注意第二种中which netcard 是指开发板上的网卡,而不是主机上的网卡。

经常使用的几种组合:1). 假设文件系统是ramdisk,且直接就在内存中,bootargs的设置应该如下:setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc’2). 假设文件系统是ramdisk,且在f l a s h中,bootargs的设置应该如下:setenv bootargs ‘mem=32M console=ttyS0,115200 root=/dev/ram rwinit=/linuxrc’注意这种情况下你应该要在b o o t m命令中指定r a m d i s k在flash中的地址,如bootm k e r n e l_addr r a m d i s k_addr (fdt_addr)3). 假设文件系统是jffs2类型的,且在flash中,bootargs的设置应该如下setenv bootargs ‘mem=32M console=ttyS0,115200 no initrd root=/dev/mtdblock2 rw r o o t f s t y p e=j f f s2init=/linuxrc’4). 假设文件系统是基于nfs的,bootargs的设置应该如下setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfsip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::e t h0:o f f’或者se tenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5’上面就是我们经常使用的几种bootargs的组合,老实说,bootargs非常非常的灵活,所以设置的方法有很多中形式,具体的还应该根据你的平台具体的情况来设置。

相关文档
最新文档