0
点赞
收藏
分享

微信扫一扫

【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析



【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析


本 SemiDrive源码分析 之 Yocto源码分析 系列文章汇总如下:

  1. 《​​【SemiDrive源码分析】【Yocto源码分析】01 - yocto/base目录源码分析(编译环境初始化流程)​​》
  2. 《​​【SemiDrive源码分析】【Yocto源码分析】02 - yocto/meta-openembedded目录源码分析​​》
  3. 《​​【SemiDrive源码分析】【Yocto源码分析】03 - yocto/meta-semidrive目录及Yocto Kernel编译过程分析(上)​​》
  4. 《​​【SemiDrive源码分析】【Yocto源码分析】04 - yocto/meta-semidrive目录及Yocto Kernel编译过程分析(下)​​》
  5. 《​​【SemiDrive源码分析】【Yocto源码分析】05 - 找一找Yocto Kernel编译过程中所有Task的源码在哪定义的呢?​​》
  6. 《​​【SemiDrive源码分析】【Yocto源码分析】06 - Kernel编译生成的Image.bin、Image_nobt.dtb、modules.tgz 这三个文件分别是如何生成的?​​》
  7. 《​​【SemiDrive源码分析】【Yocto源码分析】07 - core-image-base-x9h_ref_serdes.rootfs.ext4 文件系统是如何生成的​​》
  8. 《​​【SemiDrive源码分析】【X9芯片启动流程】08 - X9平台 lk 目录源码分析 之 目录介绍​​》
  9. 《​​【SemiDrive源码分析】【X9芯片启动流程】09 - X9平台系统启动流程分析​​》
  10. 《​​【SemiDrive源码分析】【X9芯片启动流程】10 - BareMetal_Suite目录R5 DIL.bin 引导程序源代码分析​​》
  11. 《​​【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析​​》
  12. 《​​【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析​​》


前面我们分析到,​​DL2​​​ 在触发​​reboot​​​进入​​Safety OS​​​ 前进行​​Display​​​ 初始化,这步操作实现没理解,因为一旦触发​​reboot​​​,初始化​​display​​ 不就白做了嘛。

那本文我们就来研究下​​Cortex-R5​​​ ​​DIL2.bin​​​ 的​​sdm_display_init()​​​到底做了什么,为什么要在​​reboot​​前做初始化呢?



废话不多说,先上代码:

# rtos\freertos_safetyos\exdev\display\sdm_display.c

void sdm_display_init(void)
{
int i;
int num_display;
int ret =0;

// connect all display
hal_display_connect_all();
num_display = hal_display_num();

sdm_init();

#ifdef SUPPORT_DISP_NOBLOCK
disp_client_init();
#endif

LOGD("display num is %d\n", num_display);
for(i = 0;i< num_display;i++) {
display_handle *handle = hal_get_display_handle_by_index(i);
if (handle->res->gui_enable == PANEL_NOT_NEED_INIT) {
continue;
}
if (handle->dm && handle->dm->dc) {
//LOGD("init panel for display [%d]-- index [%d]\n", handle->display_id, i);
int n_panels = ARRAY_SIZE(registered_panels[handle->display_id]);

ret = sdm_display_handle_init(handle->display_id, registered_panels[handle->display_id], n_panels);
if (ret < 0)
continue;

sdm_screen_clear(handle);
#ifdef SUPPORT_BACKLIGHT_SVC
//todo add backlight init
backlight_service_init(handle->display_id);
#endif
}
}
LOGD("found %u displays connected\n", list_length(sdm_get_display_list()));

#ifdef SUPPORT_LVGL_GUI
lvgl_init();
#endif
is_inited = true;
}



举报

相关推荐

0 条评论