Skip to main content

提前初始化屏幕显示logo

1 概述

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

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

2 配置及编译

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

2.1 Linux(以x2600e_vast_v20_nand_5.10_factory_defconfig为例)

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

bhu@bhu-PC:~/work$ grep -nr  "uboot_config" build/configs/x2600e_vast_v20_nand_5.10_factory_defconfig
5:APP_uboot_config=x2600e_base_xImage_sfc_nand // UBOOT板极配置

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

x2600e_base_xImage_sfc_nand     mips        xburst2     x2600_base            ingenic        x2600         x2600_base:SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,X2600E_DDR,RMEM_MB=16,SPL_RTOS_LOAD_KERNEL

为避免rtos和Linux操作空间冲突导致系统运行出错, 可将其分开.本配置有配置RMEM,提供两种方式

  1. 配置rtos时将CONFIG_OS_MEM_ADDR(固件加载的地址)配置在预留内存以外靠后的位置, 例如此处仅配置RMEM_MB=16, 总空间大小为128M, 给CONFIG_OS_MEM_SIZE(固件使用的内存大小)预留16M, 可将CONFIG_OS_MEM_ADDR配置为0x86000000 (96MB) ;

10

  1. 对应 UBOOT 板极配置中添加配置 ",RTOS_SIZE_MB=16" 为rtos运行预留内存, rtos内CONFIG_OS_MEM_ADDR需配置为0x87000000 (112MB)
x2600e_base_xImage_sfc_nand     mips        xburst2     x2600_base            ingenic        x2600         x2600_base:SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,X2600E_DDR,RMEM_MB=16,SPL_RTOS_LOAD_KERNEL,RTOS_SIZE_MB=16

11

若配置无RMEM配置,rtos内CONFIG_OS_MEM_ADDR配置为0x87000000 (112MB)即可.

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

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

13

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

如下lcd供电使用到了 gpios regulator

14

设备电源管理

3

编译Linux系统:

/Linux工程目录/build$ make x2600e_vast_v20_nand_5.10_factory_defconfig
/Linux工程目录/build$ make

2.2 rtos(以x2600e_vast_nand_defconfig为例)

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

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

4

5

6

根据Linux uboot配置是否添加RTOS_SIZE_MB来配置固件加载的地址.本文不添加,使用2.1章节有配置RMEM时第一种方式,固件加载地址为0x86000000(96MB)

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 x2600e_vast_nand_defconfig
/rtos工程目录/freertos$ make

3 烧录

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

8

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

9