Skip to main content

X2600 提前初始化屏幕显示logo

一 概述

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

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

本文用到linux和rtos代码,所以需要同时下载两份代码。

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

二 Linux配置

本文以linux系统x2600e_nand_5.10_defconfig为例。

2.1 uboot配置

在对应 UBOOT 板极配置中添加参数 "SHARE_MEM_MB=16,RTOS_SIZE_MB=32,RMEM_MB=8,QUICK_START"

linux系统内存预留方法请参考:linux\doc\开发使用说明\预留内存使用说明文档\x2600\Linux预留内存管理.pdf

SHARE_MEM_MB:预留给rtos系统来储存共享内存的大小,以兆字节为单位。rtos先初始化外设并将配置结构体写入共享内存 share_mem,linux 启动后直接读取接管(共享内存 share_mem 中的配置、帧内存、pwm背光配置等),避免linux系统启动时重复初始化显示设备。

RTOS_SIZE_MB:预留给rtos的专用内存大小,以兆字节为单位。

RMEM_MB:用于lcd、camera、jpeg编解码、2d等需要大块连续内存的大小,以兆字节为单位。

QUICK_START:快启的宏定义开关,定义了就会spl先加载运行rtos镜像,再加载运行kernel镜像。

xy@vb:~/job/linux/testcode$ cat build/configs/x2600e_nand_5.10_defconfig |grep uboot
APP_uboot_toolchain_dir=../tools/toolchains/mips-xburst2-gcc1210-glibc238
APP_uboot_dir=../bootloader/uboot-x2000 # spl的编译目录
APP_uboot_config=x2600e_base_xImage_sfc_nand # spl的编译配置

查找/Linux工程目录/bootloader/uboot-x2000/boards.cfg内的x2600e_base_xImage_sfc_nand并添加上述参数:SHARE_MEM_MB=16,RTOS_SIZE_MB=32,RMEM_MB=8,QUICK_START

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,SHARE_MEM_MB=16,RTOS_SIZE_MB=32,RMEM_MB=8,QUICK_START

2.2 IConfigTool配置

LCD外设配置(lcd复位引脚、背光控制引脚、电源控制引脚)

1

2

3

FrameBuffer驱动 选择lcd配置方式为 使用rtos相同配置

4

RMEM shell命令(若rtos memory使用RTOS_SIZE_MB配置,且在uboot的boards.cfg配置了RMEM)

5

编译Linux系统:

/Linux工程目录/build$ make x2600e_nand_5.10_defconfig
/Linux工程目录/build$ make

三 rtos配置

本文以rtos系统x2600e_nand_defconfig为例。

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

配置rtos的memory。具体数值可以依据linux系统的cat /proc/cmdline来设置:

5_1

6

同大核LCD型号相同的LCD驱动:

7

8

9

根据大核需求配置rtos的FrameBuffer驱动

10

11

libjpeg库

12

CMYK_TO_RGB图像格式转换

13

修改完成配置后保存,在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背光方式

14

编译rtos系统:

/rtos工程目录/freertos$ make x2600e_nand_defconfig
/rtos工程目录/freertos$ make

四 烧录

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

15

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

16