海思Hi3516开发日记之开机画面更改
1 前言
Hi3516可以通过Uboot显示图片,Hi3516的Uboot代码提供功能如下:
- 提供boot环境下VO设备的开启和关闭,涵盖VO典型接口和时序。
- 提供boot环境下VO图形层的开启和关闭。
- 提供boot环境下VO视频层的开启和关闭。
- 提供boot环境下JPEG硬件解码输出RGB格式图像(仅Hi3559AV100支持),配合VO图形层显示。
- 提供boot环境下JPEG硬件解码输出YVU SEMI-PLANAR420格式图像,配合VO视频层显示。
- VO图形层默认显示格式为ARGB1555,视频层默认显示格式为YVU SEMIPLANAR420。
2 制作开机画面
使用PS制作一副1920*1080像素图片,导出格式为jpg。导出时注意不要勾选转换为sRGB!

3 编译内核
准备好画面之后,可以使用内核定时器进行划线,以实现进度条效果。编译内核步骤如下:
(1)从 linux 开源社区下载 v4.9.37 版本的内核
①进入网站: www.kernel.org
②选择 HTTP 协议资源的 https://www.kernel.org/pub/选项,进入子页面
③选择 linux/菜单项, 进入子页面
④选择 kernel/菜单项, 进入子页面
⑤选择 v4.x/菜单项, 进入子页面
⑥下载 linux-4.9.37.tar.gz(或 linux-4.9.37.tar.xz)
(2)打补丁
①将下载的 linux-4.9.37.tar.gz 存放到 osdrv 的 opensource/kernel 目录中
②进入osdrv的根目录,执行如下命令:
1 | cd opensource/kernel |
(3)配置内核
①在内核目录下, 拷贝.config 文件:
1 | cp arch/arm/configs/hi3516dv300_smp_defconfig .config |
②通过“make menuconfig” 进行内核配置:
1 | make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig |
③选择需要的模块。
④选择完毕后, 保存并退出。
⑤添加划线代码。
在/osdrv/opensource/kernel/linux-4.9.y/arch/arm/mach-hibvt目录下,新建systimer.c文件(注:以下代码不完整,仅供参考)
1 | static int __init __system_timer_init(void) |

在该目录的makefile下,添加:
1 | obj-y +=systimer.o |

⑥编译生成内核:
1 | make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage -j4 |
生成的 uImage 在内核目录下的/arch/arm/boot/中。

说明: 如果编译过程中出现错误, 按顺序执行以下命令:
1 | make ARCH=arm CROSS_COMPILE=arm-himixXXX-linux- clean |
4 烧录
使用HiTool进行烧录,选择依次选择fastboot、kernel、rootfs以及制作的logo图片,并设置相应的起始地址以及大小,点击烧录按钮进行烧录。

5 设置启动参数
烧录完毕之后,进行串口调试,并设置启动参数如下:
1 | setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),4M(kernel),25M(rootfs),1M(logo)' |
其中:
- sf read 0x82000000 0x1F00000 0x100000为读取logo图片址,将0x1F00000起始的1M大小读入内存中,起始地址可根据HiTool烧写完毕的提示信息获得。

- jpeg_addr是用于存放JPEG图片原始码流的地址
- jpeg_size是JPEG图片原始码流大小
- jpeg_emar_buf是解码JPEG图片过程中使用到的buffer地址
- vobuf是解码JPEG图片后输出RGB图像的存放地址。
- decjpg 设置解码格式,0: YVU SEMI-PLANAR 420、1: ARGB1555、2:ARGB8888。
- startvo 启动VO设备。格式为startvo [设备号 接口类型 时序类型],设备号(Device)、接口类型(Interface type)如下表。
芯片 | Device | Graphic layer | Videolayer | Interface type |
---|---|---|---|---|
Hi3516DV300 | [0] | {0} | {0}不支持PIP层显示 | 32(HDMI), 16384(MIPI_Tx),512(LCD_6BIT),1024(LCD_8BIT),2048(LCD_16BIT),4096(LCD_18BIT),8192(LCD_24BIT) |
时序类型如下图:

- startvl 启动视频层。参数:视频层号,图像地址(解码后),行宽,显示位置和大小(x,y,w,h)
- sf read 0x96000000 0x100000 0x400000;bootm 0x96000000为读取内核。
设置完毕后,即可启动,并显示开机画面。
