uboot命令以及环境变量详解

1 篇文章 1 订阅

一、命令详解

1、autoscr

- run script from memory

运行memory的脚本

命令说明:

在u-boot中可以用autoscr命令运行脚本。

使用方法:

首先创建文本,输入要执行的命令,然后用tools/mkimage封装,然后下载到开发板 

中,在u-boot命令行,用autoscr执行下载的脚本镜像文件即可。

  1. 编辑如下的脚本nand-ubifs-write.script,也可参见附件

tftp 0x90800000 uramdisk.img;nand erase ramdisk;nand write ${fileaddr} ramdisk;nand erase system;ubi part system;ubi create system;tftp 0x90800000 system.img;ubi write ${fileaddr} system ${filesize};nand erase userdata;ubi part userdata;ubi create userdata;tftp 0x90800000 userdata.img;ubi write ${fileaddr} userdata ${filesize};nand erase cache;ubi part cache;ubi create cache;reset

  1. 用tools/mkimage对脚本进行封装

mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n "autoscr nand-ubifs-write script" -d nand-ubifs-write.script /tftpboot/nand-ubifs-write.img

  1. 在u-boot中加载并执行脚本

set servrerip 10.10.66.145          10.10.66.145为tftp服务器

tftp 0x90800000 nand-ubifs-write.img

autoscr 0x90800000

 

2、base

- print or set address offset

打印或设置地址偏移量

用法:

       base ;打印

       base 地址; 设置(重启后消失)

3、bdinfo 

- print Board Info structure

打印板子信息结构体

ath> bdinfo

boot_params = 0x87F7BFB0

memstart    = 0x80000000

memsize     = 0x08000000

flashstart  = 0x9F000000

flashsize   = 0x01000000

flashoffset = 0x00028B98

ethaddr     = 00:AA:BB:CC:DD:EE

ip_addr     = 192.168.1.1

baudrate    = 115200 bps

4、boot & bootd 

      - boot default, i.e., run 'bootcmd'

       进入内核,等效于run bootcmd 命令

bootcmd由用户定义,例如

       bootcmd=bootm 0x9fe80000

 

5、bootelf

- Boot from an ELF image in memory

启动ELF格式的内核

6、bootm

- boot application image from memory

从内存指定位置启动内核

7、bootp

- boot image via network using BootP/TFTP protocol

通过网络使用bootp或者tftp协议启动内核

BOOTP(Bootstrap Protocol,引导程序协议)是一种引导协议,基于IP/UDP协议,也称自举协议,是DHCP协议的前身。BOOTP用于无盘工作站的局域网中,可以让无盘工作站从一个中心服务器上获得IP地址。通过BOOTP协议可以为局域网中的无盘工作站分配动态IP地址,这样就不需要管理员去为每个用户去设置静态IP地址。

8、bootvx 

- Boot vxWorks from an ELF image

从ELF 内核中启动vxWorks

VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似MicrosoftVisual C,但是提供了更丰富的调试、仿真环境和工具。

9、cmp    

- memory compare

内存比较

格式:

cmp addr1 addr2 count,第一个参数是内存地址一,第二个参数是内存地址二,第三个是比较长度(单位是字节数除以4,以WORDS为单位)

10、coninfo

- print console devices and information

打印串口设备和信息

11、cp

- memory copy

在内存中进行数据拷贝

格式:

cp source target count,第一个参数是源地址,第二个参数是目的地址,第三个参数是复制数目

12、crc32

- checksum calculation

计算校验值

格式:

crc32 address count [addr],第一个参数是需校验的起始地址,第二个参数是校验的数据字节数,第三个参 数是保存校验值的地址。

13、dhcp

- invoke DHCP client to obtain IP/boot params

使用DHCP协议获取IP地址(功能与bootp相同)

14、echo   

- echo args to console

打印参数到串口;例如

ath> echo hello

hello

15、erase  

- erase FLASH memory

擦除flash

格式:

erase addr1 count,第一个参数是OFFSET,第二个参数是擦除字节数。其中OFFSET是相对于Download地址。

16、ethreg 

- Switch/PHY Reg rd/wr  utility

17、exit

- exit script

退出脚本

18、flinfo

- print FLASH memory information

打印flash信息

19、go     

go addr [arg ...]

      - start application at address 'addr'

         passing 'arg' as arguments

go命令可以执行应用程序。

第1个参数是要执行程序的入口地址。

第2个可选参数是传递给程序的参数,可以不用。

20、help   

- print online help

打印帮助信息

21、iminfo

iminfo addr [addr ...]

              - print header information for application image starting at

              address 'addr' in memory; this includes verification of the

              image contents (magic number, header and payload checksums)

iminfo可以打印程序映像的开头信息,包含了映像内容的校验(序列号、头和校验和)。

第1个参数指定映像的起始地址。可选的参数是指定更多的映像地址。

例如:

ath> iminfo 0x9fe80000

## Checking Image at 9fe80000 ...

   Image Name:   MIPS OpenWrt Linux-3.3.8

   Created:      2019-10-17   2:50:57 UTC

   Image Type:   MIPS Linux Multi-File Image (lzma compressed)

   Data Size:    1113558 Bytes =  1.1 MB

   Load Address: 80060000

   Entry Point:  80060000

   Contents:

   Image 0:  1113550 Bytes =  1.1 MB

   Verifying Checksum ... OK

ath>

22、itest  

- return true/false on integer compare

23、loop

- infinite loop on address range

地址范围无限循环

 

24、mct

- simple RAM test

简单的ram测试

25、md     

- memory display

显示内存区的内容

格式:

md [.b, .w, .l] address [# of objects]

b:8位

w:16位

l:32位(默认值)

例如:

ath> md.b 0x10000000 1

10000000: 00    .

ath>

上述0x10000000是要显示内存的那个地址,后面的数字是输出的个数,注意是16进制的。

26、mii    

- MII utility commands

调试、操作PHY的命令主要有MDIO 和MII。这两个命令的区别是:MII可以访问不同MII总线上设备的Reg,MDIO命令只能访问当前MII总线的PHY Reg。

27、mm     

- memory modify (auto-incrementing)

修改内存,地址自动增加

格式:

mm [.b, .w, .l] address

28、mtest  

- simple RAM test

类似mct,使用读写方式检验ram是否正常

29、mw     

- memory write (fill)

用指定的数据填充内存

格式:

mw [.b, .w, .l] address value [count]

30、nfs    

- boot image via network using NFS protocol

使用nfs协议启动内核

用法:

nfs [loadAddress] [host ip addr:bootfilename]

nfs命令可以使用NFS网络协议通过网络启动映像。

例如:

nfs 32000000 192.168.0.2:aa.txt
把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt 读入内存0x32000000处。

31、nm     

- memory modify (constant address)

格式:

nm [.b, .w, .l] address

nm命令可以修改内存,可以按照字节、字、长字操作。

参数address是要读出并且修改的内存地址。

 

32、pci    

- list and access PCI Configuration Space

列表和访问PCI配置空间

33、ping   

- send ICMP ECHO_REQUEST to network host

想指定主机发送ICMP ECHO_REQUEST报文

34、pll

pll cpu-pll dither ddr-pll dither - Set to change CPU & DDR speed

pll erase

pll get

35、printenv & print

- print environment variables

打印环境变量

36、progmac & progmac2

- Set ethernet MAC addresses

设置以太网mac地址

37、protect

- enable or disable FLASH write protection

打开或者关闭FLASH写保护

用法:

protect on start end

      - protect Flash from addr 'start' to addr 'end'

protect on N:SF[-SL]

      - protect sectors SF-SL in Flash bank # N

protect on bank N

     - protect Flash bank # N

protect on all

      - protect all Flash banks

protect off start end

       - make Flash from addr 'start' to addr 'end' writable

protect off N:SF[-SL]

     - make sectors SF-SL writable in Flash bank # N

protect off bank N

     - make Flash bank # N writable

protect off all

     - make all Flash banks writable

protect命令是对Flash写保护的操作,可以使能和解除写保护。

第1个参数on代表使能写保护;off代表解除写保护。

第2、3参数是指定Flash写保护操作范围,跟擦除的方式相同。

用法:

protect on 1:0-3(就是对第一块FLASH的0-3扇区进行保护)

protect off 1:0-3取消写保护

protect off bank 1 解除/使能 第 N 块FLASH的写保护

 

37、rarpboot

- boot image via network using RARP/TFTP protocol

       使用RARP/TFTP协议启动内核

用法:

rarpboot [loadAddress] [bootfilename]

rarboot命令可以使用TFTP协议通过网络启动映像。也就是把指定的文件下载到指定地址,然后执行。

第1个参数是映像文件下载到的内存地址。

第2个参数是要下载执行的映像文件。

 

38、reset  

- Perform RESET of the CPU

重启

39、run    

- run commands in an environment variable

执行环境变量中的某条命令

40、saveenv & save

- save environment variables to persistent storage

保存环境变量

41、setenv  & set

- set environment variables

设置环境变量

42、sleep  

- delay execution for some time

延时执行,以秒为单位

43、tftpboot

- boot image via network using TFTP protocol

使用TFTP协议启动内核

用法:   

tftpboot [loadAddress] [bootfilename]

tftpboot命令可以使用TFTP协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。

第1个参数loadAddress是下载到的内存地址。

第2个参数是要下载的文件名称,必须放在TFTP服务器相应的目录下。

 

44、version

- print monitor version

打印版本号

 

二、常用的环境变量

如果内核分区是直接写在内核文件里面的,u-boot的分区信息就不重要。

如果内核的分区信息没有指定,而是通过下面的命令行来指定的,那么分区信息就很重要。因为它完全依赖于命令行(当然极力推荐这种做法,因为用户修改分区信息,不需要去重新编译内核,也没必要重新编译u-boot,仅仅是修改命令行,一举两得)

环境变量

bootdelay 

执行自动启动的等候秒数

baudrate

      串口控制台的波特率

netmask

以太网接口的掩码

 

ethaddr

以太网卡的网卡物理地址

bootfile

      缺省的下载文件

bootargs 

传递给内核的启动参数

请注意,板子里原本是没有环境变量的,u-boot的缺省情况下会有一些基本的环境变量,在你执行了saveenv之后,环境变量会第一次保存到flash中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。

U-boot的环境变量值得注意的有两个: bootcmd 和bootargs

bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。bootargs的种类非常非常的多,我们平常只是使用了几种而已,感兴趣的可以看看这篇文章说的很全:http://blog.chinaunix.net/u2/79570/showart_1675071.html

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

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

1、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=serverip:nfs_dir,即指明文件系统存在那个主机的那个目录下面。

2、rootfstype

这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区.

3、console

console=tty<n>  使用虚拟串口终端设备 <n>.

console=ttyS<n>[,options] 使用特定的串口<n>,options可以是这样的形式bbbbpnx,这里bbbb是指串口的波特率,p是奇偶校验位,n是指的bits。

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

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

4、mem

mem=xxM

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

5、ramdisk_size

ramdisk=xxxxx           不推荐  

ramdisk_size=xxxxx   推荐

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

6、initrd & noinitrd

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

7、init

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

8、mtdparts

mtdparts=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 parsing

mtdparts的格式如下:

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>(<name2>)

这里面有几个必须要注意的:

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中的注释找到相关描述。

9、ip

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

ip = ip addr

       ip=ip addr:server ip addr:gateway:netmask::which netcard:off

这两种方法可以用,不过很明显第二种要详细很多,请注意第二种中which netcard 是指开发板上的网卡,而不是主机上的网卡。

10、组合

说完常见的几种bootargs,那么我们来讨论平常我经常使用的几种组合:

1). 假设文件系统是ramdisk,且直接就在内存中,bootargs的设置应该如下:

setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc’

2). 假设文件系统是ramdisk,且在flash中,bootargs的设置应该如下:

setenv bootargs ‘mem=32M console=ttyS0,115200 root=/dev/ram rw init=/linuxrc’

注意这种情况下你应该要在bootm命令中指定ramdisk在flash中的地址,如bootm kernel_addr ramdisk_addr (fdt_addr)

3). 假设文件系统是jffs2类型的,且在flash中,bootargs的设置应该如下

setenv bootargs ‘mem=32M console=ttyS0,115200 noinitrd root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc’

4). 假设文件系统是基于nfs的,bootargs的设置应该如下

setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::eth0:off’

或者

setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5’

上面就是我们经常使用的几种bootargs的组合,老实说,bootargs非常非常的灵活,所以设置的方法有很多中形式,具体的还应该根据你的平台具体的情况来设置。

 

bootcmd 

      自动启动时执行的命令

 

serverip 

      服务器端的ip地址

ipaddr 

      本地ip 地址

stdin 

      标准输入设备

stdout 

标准输出设备

stderr 

      标准出错设备

 

常用设备操作

https://blog.csdn.net/zhanglianpin/article/details/71574000

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值