从uboot到进入内核之间由uboot参数进行引导,参数不对会造成加载不了内核,或者加载到一半就报错失败。
下面列举几种类型uboot参数关键引导命令:
nand flash:
bootargs=mem=1G mmz=ddr,0,0,380M console=ttyAMA0,115200 root=/dev/mtdblock6 rootfstype=yaffs2 mtdparts=hinand:4M(boot),4M(bootargs),8M(logo),16M(config),4M(baseparam),16M(kernel),32M(rootfs),32M(resoure),-(others)
bootcmd=nand read 0x1000000 0x2400000 0x1000000;bootm 0x1000000
说明:
1、rootfstype 可以根据实际rootfs类型进行修改ext4,squashfs等
2、/dev/mtdblock6 “6” 是mtdparts 分区rootfs的位置,从0开始计算
3、bootcmd 按字节计算,读入kernel的起始位置0x2400000,读入0x1000000即16MB,到内存位置0x1000000;然后引导内存位置0x1000000,即读入内存
nand flash ramdisk:
bootargs=mem=1G mmz=ddr,0,0,100M vmalloc=600M console=ttyAMA0,115200 root=/dev/ram initrd=0x3000040,32768K ramdisk_size=32768 init=/linuxrc mtdparts=hinand:4M(boot),4M(bootargs),8M(logo),16M(config),4M(baseparam),16M(kernel),32M(rootfs),32M(resoure),4M(pqparam),-(others)
bootcmd=nand read 0x1000000 0x2400000 0x1000000;nand read 0x3000000 0x3400000 0x2000000;bootm 0x1000000 0x3000000
说明:
1、ramdisk_size 为rootfs的大小,单位为kByte,32768 kByte即32MB.
2、bootcmd 按字节计算,读入kernel的起始位置0x2400000,读入0x1000000即16MB,到内存位置0x1000000;读入rootfs的起始位置0x3400000 ,读入0x2000000即32MB,到内存位置0x3000000;然后引导内存位置0x1000000, 0x3000000,即读入内核,rootfs.
emmc flash:
bootargs=console=ttyAMA0,115200 root=/dev/mmcblk0p7 rootfstype=yaffs2 rootwait blkdevparts=mmcblk0:1M(boot),1M(bootargs),4M(baseparam),4M(pqparam),4M(logo),32M(kernel),32M(rootfs),-(others)
bootcmd=mmc read 0 0x1FFFFC0 0x7000 0x10000;bootm 0x1FFFFC0
说明:
1、rootfstype 可以根据实际rootfs类型进行修改ext4,squashfs等
2、/dev/mmcblk0p7 “7” 是blkdevparts分区rootfs的位置,从1开始计算
3、bootcmd 按块计算,每个块大小为512B,读入kernel的起始位置0x7000 x 512 Byte,读入0x10000 x 512 byte即32MB,到内存位置0x1FFFFC0;然后引导内存位置0x1FFFFC0,即读入内存
参数设置:
1、uboot 参数可以通过生成文件烧录进去,也可以通过setenv命令设置,设置完成后运行saveenv保存,reset重启可生效。
2、setenv 参数名与参数之间使用空格代替“=”,例如:setenv bootcmd nand read 0x1000000 0x2400000 0x1000000
3、多条参数命令使用“;"分隔,使用setenv 命令设置使用"\"对分号进行转义,例如:setenv bootcmd mmc read 0 0x1FFFFC0 0x7000 0x10000\;bootm 0x1FFFFC0