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