关于bootcmd与bootargs初解
uboot中bootcmd与bootargs初解科普:U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中
·
uboot中bootcmd与bootargs初解
科普:
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。(详见百度百科)
由于我在移植内核和文件系统时需要设置uboot的环境变量,所以在这就对uboot各环境变量参数研究了一下。而其中最重要的两个环境变量为bootcmd和bootargs。
bootcmd:自启动时执行的首条命令。由此可见bootcmd的重要性,要是第一条命令就错了,那后面的就无法执行下去了。bootcmd指定了要从flash的哪里读数据,读多少数据,读到内存(一般为SDRAM)的哪里去,再从内存的哪里启动(执行)。
样板:bootcmd=nand read 30008000 100000 800000;bootm 30008000。
此处,bootcmd从flash的100000(即1M)处开始读800000(即8M)大小的数据到内存的30008000地址处,再从30008000地址处执行代码。(从何处读必须与之前写的位置对应,从哪里开始写的就从哪里开始读,切记不可弄错,以保证数据的完整性。而读多少就没有硬性要求,只需要记住,读多不读少,稍微读大些就行了,但不可过大,不可读到下一段数据中,即保证读的大小在你做的内核的分区表中内核代码分区里。读到内存中就没什么好讲的,代码都是在内存中运行的。bootm即指定从30008000处启动内核。)
bootargs:传递给内核启动参数。也是非常重要的一个环境变量,如果传递了错误的参数,内核便会启动失败。
样板:bootargs=noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200
此处各参数的含义:
noinitrd:
当系统不是使用ramdisk文件系统(内嵌在内核里的文件系统)启动时,指定使用该参数。
如果使用ramdisk文件系统,需要指定initrd=r_addr,size, r_addr表示initrd在内存中的位置,size表示initrd的大小。
root:
用来指定rootfs(根文件系统)的挂载位置(root=/dev/mtdblock4在第四分区)
可在后面加上权限(如rw)
rootfstype:
当文件系统不是内嵌在内核中,而是与内核一起存放在flash中时(例如jffs2),需指定文件系统类型,否则无法挂载。
init:
init指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc(linuxrc是系统启动时执行的脚本,用于加载模块驱动等,运行在init进程之前,退出后才调用init,一般linuxrc为一个链接,连接到bin/busybox,所以写法不固定)
console:
指定串口终端设备,指定与终端相应的串口波特率,指定之后可用secureCRT之类的终端仿真程序操作开发板。
上述各参数基本上是必须指定的,还有些可选定的参数可自行查找百度。
uboot环境变量除了bootcmd和bootargs之外,其余的变量在移植内核时,很少用到。
uboot内可自行定义环境变量,一般用于下载内核和文件系统和顺序执行擦,写之类uboot自带的命令,用分号隔开。
例:set bbl 'tftp 30008000 linuxrom.bin;nand erase 100000 600000;nand write 30008000 100000 600000'
上诉例子实现了下载linuxrom.bin,擦除100000(1M)之后的600000(6M)大小的空间,并将内存30008000里的linuxrom.bin写到100000(1M)之后的600000(6M)大小的空间里。(set后记得save,不然下次上电后会丢失)
最后,在擦的时候,一定要注意别把uboot给擦掉了,不然就得重烧了。
科普:
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。(详见百度百科)
由于我在移植内核和文件系统时需要设置uboot的环境变量,所以在这就对uboot各环境变量参数研究了一下。而其中最重要的两个环境变量为bootcmd和bootargs。
bootcmd:自启动时执行的首条命令。由此可见bootcmd的重要性,要是第一条命令就错了,那后面的就无法执行下去了。bootcmd指定了要从flash的哪里读数据,读多少数据,读到内存(一般为SDRAM)的哪里去,再从内存的哪里启动(执行)。
样板:bootcmd=nand read 30008000 100000 800000;bootm 30008000。
此处,bootcmd从flash的100000(即1M)处开始读800000(即8M)大小的数据到内存的30008000地址处,再从30008000地址处执行代码。(从何处读必须与之前写的位置对应,从哪里开始写的就从哪里开始读,切记不可弄错,以保证数据的完整性。而读多少就没有硬性要求,只需要记住,读多不读少,稍微读大些就行了,但不可过大,不可读到下一段数据中,即保证读的大小在你做的内核的分区表中内核代码分区里。读到内存中就没什么好讲的,代码都是在内存中运行的。bootm即指定从30008000处启动内核。)
bootargs:传递给内核启动参数。也是非常重要的一个环境变量,如果传递了错误的参数,内核便会启动失败。
样板:bootargs=noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200
此处各参数的含义:
noinitrd:
当系统不是使用ramdisk文件系统(内嵌在内核里的文件系统)启动时,指定使用该参数。
如果使用ramdisk文件系统,需要指定initrd=r_addr,size, r_addr表示initrd在内存中的位置,size表示initrd的大小。
root:
用来指定rootfs(根文件系统)的挂载位置(root=/dev/mtdblock4在第四分区)
可在后面加上权限(如rw)
rootfstype:
当文件系统不是内嵌在内核中,而是与内核一起存放在flash中时(例如jffs2),需指定文件系统类型,否则无法挂载。
init:
init指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc(linuxrc是系统启动时执行的脚本,用于加载模块驱动等,运行在init进程之前,退出后才调用init,一般linuxrc为一个链接,连接到bin/busybox,所以写法不固定)
console:
指定串口终端设备,指定与终端相应的串口波特率,指定之后可用secureCRT之类的终端仿真程序操作开发板。
上述各参数基本上是必须指定的,还有些可选定的参数可自行查找百度。
uboot环境变量除了bootcmd和bootargs之外,其余的变量在移植内核时,很少用到。
uboot内可自行定义环境变量,一般用于下载内核和文件系统和顺序执行擦,写之类uboot自带的命令,用分号隔开。
例:set bbl 'tftp 30008000 linuxrom.bin;nand erase 100000 600000;nand write 30008000 100000 600000'
上诉例子实现了下载linuxrom.bin,擦除100000(1M)之后的600000(6M)大小的空间,并将内存30008000里的linuxrom.bin写到100000(1M)之后的600000(6M)大小的空间里。(set后记得save,不然下次上电后会丢失)
最后,在擦的时候,一定要注意别把uboot给擦掉了,不然就得重烧了。
更多推荐
已为社区贡献1条内容
所有评论(0)