LK阶段display流程
./lk/kernel/main.c:186:
kmain
// do any super early platform initialization
platform_early_init();
thread_t *thread_bs2 = thread_create("bootstrap2", &bootstrap2, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE);
bootstrap2
arch_init();
fs_init();
platform_init(); //./lk/platform/mt6735/platform.c:974
/* framebuffer的大小
透过读id找到现在插入的LCM,根据LCM的分辨率申请相应大小的frame buffer并确定frame buffer起始地址*/
g_fb_size = mt_disp_get_vram_size();
//framebuffer的起始地址
g_fb_base = mblock_reserve_ext(&g_boot_arg->mblock_info, g_fb_size, 0x10000, 0x80000000, 0, "framebuffer");
//mtk display系统初始化 ddp中各个模块和lcm配置初始化
mt_disp_init((void *)g_fb_base);
primary_display_init(NULL);
/* 根据 lcm_name 名字从 lcm_driver_list 数组表当中寻找lcm驱动进行匹配。并将找到的lcm驱动赋值到plcm->drv中,
那么返回的plcm变量则包含lcm_drv的访问地址,这样就能访问lcm驱动的接口了 */
disp_lcm_handle *disp_lcm_probe(char *plcm_name, LCM_INTERFACE_ID lcm_id)
/* 判断LCM_DRIVER链表中lcm驱动的数量,如果为1个就直接拿来用给设备,不需要调用compare_id函数,如果多个就需要匹配硬件id号了。 */
lcm_drv->compare_id()
for (i=0; i<_lcm_count(); i++) {
/*vendor / mediatek/proprietary/bootable/bootloader/lk/dev/lcm/mt65xx_lcm_list.c
我们一般需要把厂家提供的lcm_driver添加到lcm_driver_list数组,*/
lcm_drv= lcm_driver_list[i];
DISPDBG("we will check lcm: %s\n", lcm_drv->name);
/* 同kernel流程一样 */
lcm_param = disp_lcm_get_params(pgc->plcm);
if (primary_display_mode == DIRECT_LINK_MODE) {
_build_path_direct_link();
pgc->dpmgr_handle = dpmgr_create_path(DDP_SCENARIO_PRIMARY_DISP, pgc->cmdq_handle_config);
//根据lcm接口类型获得目标模块,这里为DI
MTK LK阶段 display框架
于 2023-11-09 10:20:30 首次发布
文章概述了LK阶段MTK平台的早期初始化,重点涉及display流程,LCM驱动匹配,framebuffer配置,DDP模块设置,以及logo显示和系统启动过程。

2200

被折叠的 条评论
为什么被折叠?



