AD100快速启动
一 概述
AD100 的快速启动⽅案使⽤ spl + rtos + kernel + app, 即通过 spl 加载 rtos, 然后 rtos 去解压kernel, 初始化 lcd, 显⽰ logo, 等这三个任务完成后, 就会回到spl,然后启动 kernel, kernel 启动才会去启动 app. 这⾥的 lcd 初始化完成后, 在 kernel 阶段就不会再次初始化, 减少驱动安装的时间.
二 配置及编译
根据实际情况使用IConfigTool工具配置lcd, linux和rtos的屏幕相关配置必须保持一致 (lcd设备、背光设备),fb驱动与默认背光亮度继承rtos
2.1 spl配置
以配置文件ad100_evb_v10_nor_quickstart_lcd_5.10_defconfig为例
uboot配置
bhu@bhu-PC:~/work/build$ grep -nr "uboot" configs/ad100_evb_v10_nor_quickstart_lcd_5.10_defconfig
3:APP_uboot_toolchain_dir=../tools/toolchains/mips-gcc720-glibc229
4:APP_uboot_dir=../bootloader/uboot-x2000
5:APP_uboot_config=ad100_uImage_quickstart_sfc_nor_lcd //需要快速启动,uboot的默认配置
查找/Linux工程目录/bootloader/uboot-x2000/boards.cfg内的ad100_uImage_quickstart_sfc_nor_lcd
ad100_uImage_quickstart_sfc_nor_lcd mips xburst2 ad100_base ingenic ad100 ad100_base:AD100N_DDR,SPL_SFC_NOR,ENV_IS_IN_SFC,MTD_SFCNOR,SPL_PARAMS_FIXER,SPL_OS_BOOT,NOR_SPL_BOOT_OS,LCD_MEM_MB=4,QUICK_START,LPJ="11935744"
LCD_MEM_MB的值是屏幕显示需要的内存, 计算方法:
lcd为720p的屏幕, 并且fb只配置一层, 然后为1个buffer时
720 ×1280 × 4 = 3686400 (lcd的内存是按ARGB的32位申请的,因此需要乘4) + 2k lcd描述符
2.2 rtos配置
以配置文件ad100_evb_v10_quick_start_lcd_nor_defconfig为例
linux接管rtos_lcd内存, 继承rtos fb配置
如上⾯linux分配的LCD_MEM_MB=4, 则对应的值为 0x400000. 固件加载的地址计算公式为:0x80000000 + ddr_size - rtos_size
ad100 的 ddr_size 为 64MB, 则固件加载的地址为 0x80000000 + 0x4000000 - 0x400000 =0x83c00000
U-Boot SPL 2013.07-00182-g5235b9cb0 (Jun 26 2024 - 15:47:44)
V1.0.0 <2024/06/25>
ERROR EPC 80019ef8
CPA_CPAPCR:0320490d
CPM_CPMPCR:0320490d
CPM_CPEPCR:0190510d
CPM_CPCCR:9a073310
DDR clk rate 600000000
DDR: M14F5121632A type is : DDR2
DDR_PAR of eFuse: 00000000 00000000
AD100 InnoPhy skew Settings...
GD25B512ME 00c8471a 00c8471a
[0.000085] gpio: VDDIO_SD(PD00~PD05) = 3.3V
[0.000252] pwm clk rate 400000000
[0.002043] lcd_mem left 0x7a000 bytes //LCD_MEM剩余内存
[0.002438] sfc_nor: find chip:GD25B512ME id:0xc8471a
[0.002658] vendor init...
[0.002776] get logo partition information fail!
[0.002938] 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);
}
编译rtos系统:
bhu@bhu-PC:~/rtos/freertos$ source build/envsetup.sh
bhu@bhu-PC:~/rtos/freertos$ make ad100_evb_v10_quick_start_lcd_nor_defconfig
bhu@bhu-PC:~/rtos/freertos$ make
2.3 linux 配置
pwm背光值继承rtos, 配置需要和rtos保持一致
编译Linux系统:
bhu@bhu-PC:~/ad100/build$ make ad100_evb_v10_nor_quickstart_lcd_5.10_defconfig
bhu@bhu-PC:~/ad100/build$ make
三 烧录
本开发板nor flash为64MB, 根据flash大小自行调节分区大小
分区表配置如下, 在烧录工具分区内分配一块rtos分区:
rtos分区烧录/rtos工程目录/freertos/zero.bin文件, kernel分区烧录/linux工程目录/build/output/uImage_split文件, 烧录成功后板子上电显示logo后启动Linux.