Skip to main content

提前初始化屏幕显示logo

1 概述

SPL(core0) 加载引导 RTOS(core0), RTOS(core0)同时进行加载kernel镜像和显示logo 任务, 二者均完成后返回SPL(core0), SPL(core0) 引导 kernel(core0)

本文以 X1600e HALLY6_BASEBOARD_V2.0 开发板为例进行说明.

2 配置及编译

根据实际情况使用IConfigTool工具配置屏幕, linux和rtos的屏幕相关配置必须保持一致 (lcd设备、背光设备、fb驱动)

2.1 Linux(以 x1600e_halley6_nand_factory_defconfig为例)

在对应 UBOOT 板极配置中添加配置 "SPL_RTOS_LOAD_KERNEL"

bhu@bhu-PC:~/work$ grep -nr  "uboot_config" build/configs/x1600e_halley6_nand_factory_defconfig
5:APP_uboot_config=x1600e_base_halley6_xImage_sfc_nand // UBOOT板极配置

查找/Linux工程目录/bootloader/uboot-x2000/boards.cfg内的x1600e_base_halley6_xImage_sfc_nand并添加

x1600e_base_halley6_xImage_sfc_nand  mips        xburst x1600_base   ingenic    x1600       x1600_base:SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,X1600E_DDR,SPL_RTOS_LOAD_KERNEL

为避免rtos和Linux操作空间冲突导致运行出错, 可将其分开.本配置无RMEM,rtos内CONFIG_OS_MEM_ADDR配置为0x83c00000 (60MB)即可.给rtos预留4MB.

按需求可以调整rtos固件加载的地址和使用的内存大小.

Linux需要在IConfigTool内勾选 "rtos 中已初始化过 lcd (此时无需再初始化)"

12

若使用了 gpios regulator, 需要在IConfigTool内勾选 [ 开机时使能, 防止kernel开机时自动关闭 (如快起时,提前亮屏的场景) ]

如下lcd供电使用到了 gpios regulator

14

设备电源管理

3

编译Linux系统:

/Linux工程目录/build$ make x1600e_halley6_nand_factory_defconfig
/Linux工程目录/build$ make

2.2 rtos(以x1600e_nand_defconfig为例)

rtos和linux的屏幕相关配置必须保持一致(lcd设备、背光设备、fb驱动)

rtos需要在IConfigTool内根据实际情况配置 SFC驱动, 勾选 CMYK_TO_RGBlibjpeg

4

5

6

本文不配置RMEM,固件加载地址为0x83c00000(60MB) ,给rtos预留4MB.

7

修改完成配置后保存

在/rtos工程目录/freertos/vendor/vendor.c内, 修改代码如下:

#include <stdio.h>
#include "../example/driver/quick_boot_logo_and_load_kernel_example.c"

void vendor_init(void *arg)
{
printf("vendor init...\n");
quick_boot_logo_and_load_kernel(arg);
}

rtos加载完logo进入kernel例子,源码位于/rtos工程目录/freertos/example/driver/quick_boot_logo_and_load_kernel_example.c

logo图片位于/rtos工程目录/freertos/example/resource/test.jpeg, 可替换,格式仅限jpeg

/******************************boot_logo******************************/
#include <cmyk_to_rgb.h>
#include "jpeglib.h"
#include "jerror.h"

#include <driver/fb.h>
#include <driver/backlight.h>
#include <driver/irq.h>

#include <include_bin.h>
INCBIN(jpeg_display, "example/resource/test.jpeg"); //示例中存放开机logo图片位置,可替换为自己开机logo图片,格式为jpeg

static struct fb_info info;
static struct fb_handle *fb0_handle;

例子默认为gpio背光, linux和rtos的背光设备需配置为gpio背光. 若需要pwm背光,可修改例子为pwm背光方式

编译rtos系统:

/rtos工程目录/freertos$ source build/envsetup.sh
/rtos工程目录/freertos$ make x1600e_nand_defconfig
/rtos工程目录/freertos$ make

3 烧录

分区表配置如下, 在烧录工具分区内分配一块rtos分区:

8

rtos分区烧录/rtos工程目录/freertos/zero.bin文件, 烧录成功后板子上电显示logo后启动Linux。

9