Skip to main content

AD102P电子相框

一 概述

ad102p电子相框,是基于LVGL做的一款视频、音频及图片播放器,并添加了一些定制化功能.

二 配置及编译

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

配置文件ad102p_apus_v10_album_quickstart_nand_defconfig

2.1 spl配置

uboot配置

bhu@bhu-PC:~/ad100/build$ grep -nr "uboot" configs/ad102p_apus_v10_album_quickstart_nand_defconfig 
3:APP_uboot_toolchain_dir=../tools/toolchains/mips-gcc720-glibc229
4:APP_uboot_dir=../bootloader/uboot-x2000
5:APP_uboot_config=ad102p_uImage_quickstart_album_sfc_nand //uboot配置

查找/Linux工程目录/bootloader/uboot-x2000/boards.cfg内的ad102p_uImage_quickstart_album_sfc_nand

ad102p_uImage_quickstart_album_sfc_nand       mips     xburst2    ad100_base       ingenic    ad100   ad100_base:AD102P_DDR,SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,LCD_MEM_MB=16,QUICK_START

LCD_MEM_MB的值是屏幕显示需要的内存, 计算方法:

lcd为800 × 1280 的屏幕, 并且fb0为0,fb1为1,旋转为2 ,所以总共为3个buffer

800 ×1280 × 4 x 3 = 12288000 (lcd的内存是按ARGB的32位申请的,因此需要乘4) + 2k lcd描述符

2.2 rtos配置

以配置文件ad102p_apus_album_quick_start_lcd_nand_defconfig为例

linux接管rtos_lcd内存, 继承rtos fb配置

旋转配置

1

fb配置

2

rtos_lcd内存

3

如上⾯linux分配的LCD_MEM_MB=16, 则对应的值为 0x1000000. 固件加载的地址计算公式为:0x80000000 + ddr_size - lcd_mem

ad102p 的 ddr_size 为 128MB, 则固件加载的地址为 0x80000000 + 0x8000000 - 0x1000000 =0x87000000

U-Boot SPL 2013.07-00273-g84e03370e (Dec 11 2024 - 09:34:59)
V1.0.0 <2024/06/25>
ERROR EPC 8001a34c
CPA_CPAPCR:0300490d
CPM_CPMPCR:04b0490d
CPM_CPEPCR:0190510d
CPM_CPCCR:9a0b5410
DDR clk rate 900000000
DDR: W631GU6NG type is : DDR3
DDR_PAR of eFuse: 00000000 00000000
AD100 InnoPhy skew Settings...
451, VID=0x000000cd, PID=0x00000071
[0.000089] gpio: VDDIO_SD(PD00~PD05) = 3.3V
[0.000260] pwm clk rate 384000000
[0.004315] lcd_mem left 0x356000 bytes //LCD_MEM剩余内存
[0.004528] Supported Nand Flash, FS35SQA001G(cd:71)
[0.004877] vendor init...
[0.004995] get logo partition information fail!
[0.005167] now use default logo

修改完成配置后保存.

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

#include <stdio.h>
#include "../example/driver/quick_boot_logo_and_load_split_uimage_example.c"
void vendor_init(void *arg)
{
printf("vendor init...\n");
quick_boot_logo_and_load_kernel(arg);
}

quick_boot_logo_and_load_split_uimage_example.c需进行修改

// #define LCD_ROTATE        开启旋转把这个打开

#ifdef LCD_ROTATE
INCBIN(jpeg_display, "example/resource/ingenic_logo_720p.jpeg"); //默认开机logo图片,分辨率需要和lcd保持一致
#else
INCBIN(jpeg_display, "example/resource/ingenic_logo.jpeg");
#endif

static struct fb_info info;
static struct fb_handle *fb1_handle;
static struct jpegd_decoder *decoder;
static struct jpegd_decoder_output *out;

/* 初始化fb */
static void enbale_fb_thread(void *data)
{
fb_enable(fb1_handle);
}

int jpeg_display_to_fb(void *logo_mem, int logo_size)
{
struct backlight *backlight;
int ret;

fb1_handle = fb_open("fb1"); //打开fb0改为打开fb1
if(fb1_handle == NULL)
printf("fb1 = NULL\n");

编译rtos系统:

bhu@bhu-PC:~/rtos/freertos$ source build/envsetup.sh
bhu@bhu-PC:~/rtos/freertos$ make ad102p_apus_album_quick_start_lcd_nand_defconfig
bhu@bhu-PC:~/rtos/freertos$ make

2.3 linux 配置

4

5

编译Linux系统:

bhu@bhu-PC:~/ad100/build$ make ad102p_apus_v10_album_quickstart_nand_defconfig
bhu@bhu-PC:~/ad100/build$ make

三 烧录

本开发板nand flash为128MB, 根据flash大小自行调节分区大小

6

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

7

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

8