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配置
旋转配置
fb配置
rtos_lcd内存
如上⾯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 配置
编译Linux系统:
bhu@bhu-PC:~/ad100/build$ make ad102p_apus_v10_album_quickstart_nand_defconfig
bhu@bhu-PC:~/ad100/build$ make
三 烧录
本开发板nand flash为128MB, 根据flash大小自行调节分区大小
分区表配置如下, 在烧录工具分区内分配一块rtos分区:
rtos分区烧录/rtos工程目录/freertos/zero.bin文件, kernel分区烧录/linux工程目录/build/output/uImage_split文件, 烧录成功,板子上电显示logo后启动Linux.