常用UBoot命令 && Uboot环境变量说明 && Linux开机常见错误
(1)基础命令
dnw:在进入系统之前进入指令行,输入该指令可下载烧录文件。
re:重新启动嵌入式系统。
printenv:打印当前系统环境变量。
setenv:设置环境变量,格式:setenv name value ...,表示将name 变量设置成value 值;如果没有这个参数,表示删除该变量。
saveenv:保存环境变量到NAND中。
sleep:延迟执行,格式:sleep N,可以延迟N秒钟执行。
run:执行环境变量中的命令,格式:run var,可以跟几个环境变量名。
crc32:计算校验值,格式:crc32 address count [addr],第一个参数是需校验的起始地址,第二个参数是校验的数据字节数,第三个参
cp:在内存中复制数据块,格式:cp
cmp:比较内存中的数据块,格式:cmp addr1 addr2 count,第一个参数是内存地址一,第二个参数是内存地址二,第三个是比较长度(单位是字节数除以4,以WORDS为单位)。
bootm:可以引导启动存储在内存中的程序映像。格式:bootm
nand scrub:暴力擦除指令,擦除整个NAND,会擦除bad block标记。
nand erase:擦除NAND,格式:nand erase addr1 count,第一个参数是OFFSET,第二个参数是擦除字节数。其中OFFSET是相对于Download地址。
nand write:下载的内存数据写入NAND,格式:nand write addr offset count,第一个参数是写入基地址,第二个参数是偏移地址,第三个参数是写入字节数。
nand read:讲NAND数据读取到内存,格式:nand read addr offset count,第一个参数是读取的NAND地址,第二个参数是内存位置偏移,第三个参数是读取字节数。
nand bad:测试NAND FLASH坏块的命令。如:nand bad,即可显示坏的区块地址。
(2)测试
假设Download Address: 0xc0000000,Download Filesize:0x1df48c
nand erase 600000 300000
nand write c0000000 600000 300000
nand read c0600000 600000 300000
cmp c0600000 c0000000 300000
(3)引用别人之前的解决的一个问题:
==========================================================================================================================
bootdelay
baudrate
netmask
ethaddr
bootargs
bootcmd
serverip
ipaddr
stdin
stdout
stderr
(1)bootcmd,是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。
(2)bootargs,是环境变量中的重中之重,可以说整个环境变量都是围绕着bootargs来设置的。bootargs的种类非常非常的多,我们平常只是使用了几种而已,bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法,甚至你也可以不设置bootargs而直接将其写到内核中去(在配置内核的选项中可以进行这样的设置)。
A,root:用来指定rootfs的位置,常见的情况有:root=/dev/mtdx rw
B,rootfstype:这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区。
C,console:console=tty<n>
D,mem:mem=xxM 指定内存的大小,不是必须的。
E,ramdisk_size:ramdisk_size=xxxxx,告诉ramdisk 驱动,创建的ramdisk的size。
F, initrd, noinitrd:当你没有使用ramdisk启动系统的时候,你需要使用noinitrd这个参数,但是如果使用了的话,就需要指定initrd=r_addr,size, r_addr表示initrd在
内存中的位置,size表示initrd的大小。
G. init:init指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc,运行init程序,挂载一些文件系统等等操作。请注意,很多初学者以为init=/linuxrc是固定写法,其实不然,/linuxrc指的是/目录下面的linuxrc脚本,一般是一个连接罢了。
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’
======================================================================================================================
(1)下载内核到flash中,运行到如下即停止没有下文: Uncompressing Linux……………………done,booting the kernel ,卡在这里不动了。
原因分析:可能是内核的启动参数传递时没有填写正确,也可能是在linux内核中没对flash分区。
(2)出现如下错误:
VFS:Cannot open root device "mtdblock/2" or unknown-block(0,0)
Please append a correct "root=" boot option.
Kernel panic not syncing,VFS Unable to mount root fs on unknown-block(0,0)
原因分析:出现这种情况一般有两种情况:没有文件系统或boot options参数不正确,如我的系统文件系统为cramfs格式,存放文件系统的分区为第三个分区,启动参数为:
"noinitrd root=/dev/mtdblock2 ro init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs mem=64M"
(3)
原因分析:这种情况一般是NAND flash分区未能分正确,或者所在的分区上没有文件系统。