1 查看内核启动参数
在uboot界面中输入printenv,即可查看启动参数。
示例:
jz2440:
OpenJTAG> printenv
bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
bootdelay=2
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
ipaddr=192.168.7.17
serverip=192.168.7.11
netmask=255.255.255.0
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
bootatgs=noinitrd root=/dev/nfs nfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
console=ttySAC0
filesize=791340
bootargs=console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
stdin=serial
stdout=serial
stderr=serial
partition=nand0,0
mtddevnum=0
mtddevname=bootloader
Environment size: 742/131068 bytes
hi3518e淘宝:
hisilicon # printenv
baudrate=115200
bootfile="uImage"
da=mw.b 0x82000000 ff 1000000;tftp 0x82000000 u-boot.bin.img;sf probe 0;flwrite
du=mw.b 0x82000000 ff 1000000;tftp 0x82000000 user-x.cramfs.img;sf probe 0;flwrite
dr=mw.b 0x82000000 ff 1000000;tftp 0x82000000 romfs-x.cramfs.img;sf probe 0;flwrite
dw=mw.b 0x82000000 ff 1000000;tftp 0x82000000 web-x.cramfs.img;sf probe 0;flwrite
dc=mw.b 0x82000000 ff 1000000;tftp 0x82000000 custom-x.cramfs.img;sf probe 0;flwrite
up=mw.b 0x82000000 ff 1000000;tftp 0x82000000 update.img;sf probe 0;flwrite
ua=mw.b 0x82000000 ff 1000000;tftp 0x82000000 upall_verify.img;sf probe 0;flwrite
tk=mw.b 0x82000000 ff 1000000;tftp 0x82000000 uImage; bootm 0x82000000
dd=mw.b 0x82000000 ff 1000000;tftp 0x82000000 mtd-x.jffs2.img;sf probe 0;flwrite
ipaddr=192.168.1.10
serverip=192.168.1.107
netmask=255.255.255.0
ethaddr=00:12:12:22:b4:71
HWID=8043420004048425
bootargs=mem=38M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000
bootdelay=5
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06-svn (Mar 27 2014 - 11:56:37)
Environment size: 1179/65532 bytes
hi3518e自己:
hisilicon # printenv
bootdelay=1
baudrate=115200
ethaddr=00:00:23:34:45:66
ipaddr=192.168.1.10
serverip=192.168.1.2
netmask=255.255.255.0
bootfile=uImage
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000
bootargs=mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs)
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (Jun 01 2017 - 02:38:54)
Environment size: 424/262140 bytes
2 主要的启动参数有bootargs、bootcmd
2.1 bootargs
示例:jz2440:
bootargs=console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
bootatgs=noinitrd root=/dev/nfs nfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox
ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
hi3518e淘宝:
bootargs=mem=38M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)
hi3518e自己:
bootargs=mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs)
详解:
console=ttySAC0
:
console=ttySAC0 使用虚拟串口终端设备 .
为什么是ttySAC0:
这个网址将的比较透彻:
ttySAC0与/dev/tts/0是否对应同一个物理设备串口0:http://blog.csdn.net/yiya1989/article/details/8253240
在内核中有一个串口驱动和我们的console参数比较的一个过程,所以两者要一致;
jz2440为什么是ttySAC0:
S3C2410的驱动文件drivers/serial/s3c2410.c中将串口驱动的名字定义为:.name = S3C24XX_SERIAL_NAME,
mem:mem=xxM 指定内存的大小,不是必须的
root=/dev/mtdblock2:
root=/dev/mtdx rw
root=/dev/mtdblockx rw
root=/dev/mtdblock/x rw
root=31:0x
就是说你的root分区在你flash的第几分区,在第几分区就是mtdblockx几,如:mtdblock3mtdclock2;
hi3518e的板子设置mtdparts分区信息时,设置了三个分区第三个是root分区所以是root=/dev/mtdblock2
上面的这几个在一定情况下是通用的,当然这要看你当前的系统是否支持,不过mtd是字符设备,而mtdblock是块设备,有时候你的挨个的试到底当前的系统支持上面那种情况下,不过root=/dev/mtdblockx
rw比较通用。此外,如果直接指定设备名可以的话,那么使用此设备的设备号也是可以的。
root=/dev/nfs
在文件系统为基于nfs的文件系统的时候使用。当然指定root=/dev/nfs之后,还需要指定nfsroot=serverip:nfs_dir,即指明文件系统存在那个主机的那个目录下面
rootfstype=jffs2:
rootfstype 设置文件系统类型rootfstype=jffs2;
这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区.
mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs):
flash分区信息;
要想这个参数起作用,内核中的mtd驱动必须要支持
按这个格式来设置:mtdparts=mtd-id:@(),@()
mtd-id
必须要跟你当前平台的flash的mtd-id一致,不然整个mtdparts会失效
init:
init指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc, 或者init=/etc/preinit,preinit的内容一般是创建console,null设备节点,运行init程序,挂载一些文件系统等等操作。请注意,很多初学者以为init=/linuxrc是固定写法,其实不然,/linuxrc指的是/目录下面的linuxrc脚本,一般是一个连接罢了。
2.2 bootcmd参数
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000
uboot引导完的最后一步就是调用bootcmd参数驱动内核:怎么启动呢,就是把在flash中的内核烧写到ram中,并运行那段代码;
前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。
3 修改启动参数
其实打开uboot界面输入?,就会返回uboot下我们可以使用的命令,其中包括参数设置的相关参数。
修改:bootargs参数
YAFFS启动参数设置:
set bootargs console=ttySAC0,115200
root=/dev/mtdblock3; save //实测有效
jffs2设置启动参数:
set
bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2; save
nfs系统启动:
改后的信息:setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:off init= /linuxrc console=ttySAC0
原信息:set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
saveenv
修改:bootcmd参数
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'
saveenv
setenv bootargs 'mem=32M console=ttyAMA0,115200
root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),9M(rootfs) '