Hi3516DV300_8_Uboot的单独编译和验证


1.Uboot的单独编译和验证

  • 参考文献1:SDK内osdrv中的readme
  • 参考文献2:ReleaseDoc中的《Hi3516CV500╱Hi3516DV300╱Hi3516AV300 U-boot 移植应用开发指南.pdf》

2.编译

2.1 首先进入到Uboot源码路径下:

tar -xzvf u-boot-2016.11.tgz
cd u-boot-2016.11/

其中这个Uboot是根据海思官方开发板移植过的,一般如果没有特殊的需求,Uboot就和官方的一样

2.2 然后生成config文件

其中生成.config文件就有以下4种方法:

  • 这一条也是readme中的,对应EMMC的硬件版本:
    make ARCH=arm CROSS_COMPILE=arm-himix200-linux- hi3516dv300_emmc_defconfig
  • 这一条是readme中写的,也是默认编译的SPI_Flash的,对EMMC硬件来说是不能用的:
    make ARCH=arm CROSS_COMPILE=arm-himix200-linux- hi3516dv300_defconfig
  • 其中这一条是手册中写的,但用的是SPI_Flash版本的,对EMMC硬件来说是不能用的:
    make ARCH=arm CROSS_COMPILE=arm-himix200-linux- hi3516dv300_config
  • 注意:使用下面这条命令时:make ARCH=arm CROSS_COMPILE=arm-himix200-linux- -j 8还会重新提示你进行选择配置
    cp ./configs/hi3516dv300_emmc_defconfig ./.config

2.3 执行menuconfig配置,当然默认不用配置

make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig

连续按2下ESC即可直接推出配置的界面

注意这一步也是要先load那个.config文件

注意这一步也是在写.config文件的

这一步在默认情况下不用去配置

2.4 编译生成中间文件u-boot.bin

make ARCH=arm CROSS_COMPILE=arm-himix200-linux- -j 8

但这里生成的只是中间件,很多厂商都选择把一些跟硬件相关的把它独立出来,这个原理跟设备树有点类似,也就是和硬件相关的配置还在下面的步骤中

2.5 编译生成gzip文件

首先进入到路径:

cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/pc/hi_gzip
make
cd bin
cp ./gzip /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/cpu/armv7/hi3516dv300/hw_compressed -f

2.6 配置表格文件

  • 表格路径

  • 设计思想:把Uboot配套的整个硬件的很多的这个值写到了Excel中

第一项,配置Uboot里面的PLL

  • 配置好表格文件后,点击Generate reg bin file,生成reg_info.bin文件

2.7 拷贝相关文件

  • 拷贝reg_info.bin到U-bot源码目录,重命名为.reg
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/uboot/u-boot-2016.11

这里通过SSH工具拷贝reg_info.bin文件

然后进行重命名

mv ./reg_info.bin ./.reg
  • 将生成的u-boot.bin复制到osdrv/tools/pc/uboot_tools/目录
    cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/uboot/u-boot-2016.11
    cp ./u-boot.bin ../../../tools/pc/uboot_tools/ -f

2.8 编译生成u-boot-hi3516dv300.bin

  • 注意make的时候用的是u-boot-z.bin,但实际生成的是u-boot-hi3516dv300.bin

    cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/uboot/u-boot-2016.11
    make ARCH=arm CROSS_COMPILE=arm-himix200-linux- u-boot-z.bin
  • 在当前Uboot源码路径下生成的u-boot-hi3516dv300.bin就是能够在单板上运行的uboot镜像

3 烧录并设置环境变量

3.1 烧写

  • 参考以前烧写实战

  • 以前三星的,他的整个环境变量是放在跟Uboot独立的一个空间里面,当我们重新去烧写Uboot的时候,并不会覆盖之前的bootcmd和bootargs,所以以前对的是可以保存的

  • 但海思的不是这么设计,它的环境变量整个是和Uboot在一起的,所以重新烧写Uboot时,我们这份Uboot里面的环境变量,会覆盖之前的,但是默认的环境变量又不对。所以要重新配置才行。

  • 烧录之后是不能启动的,原因在于要设置bootcmd和bootargs

  • 其中烧写的相关配置如下图所示:

3.2 设置换将变量

  • 设置环境变量时,发现只认识setenv,并不认识set这个环境变量

  • 也并不是每次都要重新设置环境变量

  • 具体的环境变量如下:

    bootcmd :Uboot 首先执行这句

bootargs:Uboot 给Kernel传参

printenv
setenv bootcmd "mmc read 0 0x81000000 0x2800 0x5000; bootm 0x81000000"
setenv bootargs "mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:5M(boot),10M(kernel),500M(rootfs),200M(userdata),-(user)"
saveenv
printenv

Author: Ruimin Huang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ruimin Huang !
  TOC