hi3516 bootargs


原文链接: hi3516 bootargs

首先,你要知道3518E都是自带DDR的,大小为64M,这个不可更改,也就是OS+MMZ一共64M, 对于MMZ来说,主要用于VI,VPSS和VENC,OS一般用于linux操作系统即malloc分配,一般情况下,MMZ分配在20到25M左右,OS分配剩下的,在修改的时候,OS的大小是在u-boot的bootargs启动参数里面指定的,mmz的大小是在驱动脚本load3518e里面指定的,指定的时候要注意不光要制定大小,还要修改对应的地址。
至于为什么下载的时候指定的内存地址为0x82000000这个是有海思自己定义的,就像一般的arm9 2440的烧写地址为0x30008000一样,不可修改!

  1. bootargs变量介绍
    以下面bootargs为例说明各个变量的含义

'mem=1G console=ttyAMA0,115200(内核启动后的首选控制台) root=/dev/mtdblock5(对应mtdparts的rootfs分区) rootfstype=yaffs2
mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others) mmz=ddr,0,0,300M'

                                                            ①                    ②             ③                ④                 ⑤          ⑥                                 

注:root=/dev/mtdblock5:为什么是5?

           解:因为root=/dev/mtdblock5 对应 mtdparts的第5分区(rootfs分区)。

各变量含义如下

mem: 有的说是OS大小,有的说是整个DDR的大小 但是对于海思来说应该是OS的大小(待认证)

  整个DDR被划分为两部分:系统内存和mmz。mem表示整个DDR大小,mmz表示mmz区域大小。
  需要根据单板配置及内存占用情况合理配置mem和mmz大小。

mmz:

  格式ddr,0,0,size size表示整个DDR中预留给MMZ使用的空间大小。
           例如mmz=ddr,0,0,300M表示在整个mem中预留300M供MMZ使用,其余分配给系统内存使用

console:

  控制台参数。console=ttyAMA0,115200表示使用串口0作为控制台设备 波特率为115200

root:

  表示根文件系统所在的设备分区
           例如/dev/mtdblock5表示/dev/mtdblock5为根文件系统对应mtdparts中的rootfs分区

rootfstype:

  根文件系统类型,请根据烧写的文件系统类型配置,此处为yaffs2

这个选项需要跟root一起配合使用:

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

mtdparts:

  SPI Flash和Nand Flash的分区划分 格式 mtdparts=flashtype:size(name),size(name),...,-(others);flashtype:size(name),size(name),...,-(others)
  flashtype表示Flash类型 
           SPI Flash对应取值hi_sfc,Nand Flash对应取值hinand
  size表示分区大小  name表示分区名称

/------------------------------------------------
要想这个参数起作用,内核中的mtd驱动必须要支持,

      即内核配置时需要选上
           Device Drivers 
                     ---> Memory Technology Device (MTD) support 
                                    ---> Command line partition table parsing    y

/------------------------------------------------

blkdevparts:

  eMMC的分区划分,格式 blkdevparts=mmcblk0:size(name),size(name),...,-(others)
  size表示分区的大小  当rootfstype为ext3/ext4时, rootfs分区的大小必须与文件系统镜像大小保持一致
  name表示分区名称
  1. 启动参数的设置
    假设bootargs的内容为'mem=1G console=ttyAMA0,115200 root=/dev/mtdblock5 rootfstype=yaffs2 mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others) mmz=ddr,0,0,300M'

      (在使用mtdparts分区划分时,boot和kernel在什么地方就得对应设置相应的mtdparts或者是blkdevparts
                例子:
                          boot在spi flash, kernel和文件系统在nand flash
                               mtdparts=hi_sfc:1M;hinand:........................................)
    

设置启动参数的命令如下
setenv bootargs 'mem=1G console=ttyAMA0,115200 root=/dev/mtdblock5 rootfstype=yaffs2 mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others) mmz=ddr,0,0,300M'

setenv bootcmd 'nand read 1000000 c00000 800000;bootm 1000000' //bootcmd命令加载内核(物理起始地址为0xc00000,长度为0x800000),到内存0x1000000,然后跳转到0x1000000执行
saveenv

           执行了saveenv之后,环境变量会第一次保存到flash中,之后你对环境变量的修改,保存都是基于保存在flash中的环境变量的操作。
`