【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析
本 SemiDrive源码分析 之 Yocto源码分析 系列文章汇总如下:
- 《【SemiDrive源码分析】【Yocto源码分析】01 - yocto/base目录源码分析(编译环境初始化流程)》
- 《【SemiDrive源码分析】【Yocto源码分析】02 - yocto/meta-openembedded目录源码分析》
- 《【SemiDrive源码分析】【Yocto源码分析】03 - yocto/meta-semidrive目录及Yocto Kernel编译过程分析(上)》
- 《【SemiDrive源码分析】【Yocto源码分析】04 - yocto/meta-semidrive目录及Yocto Kernel编译过程分析(下)》
- 《【SemiDrive源码分析】【Yocto源码分析】05 - 找一找Yocto Kernel编译过程中所有Task的源码在哪定义的呢?》
- 《【SemiDrive源码分析】【Yocto源码分析】06 - Kernel编译生成的Image.bin、Image_nobt.dtb、modules.tgz 这三个文件分别是如何生成的?》
- 《【SemiDrive源码分析】【Yocto源码分析】07 - core-image-base-x9h_ref_serdes.rootfs.ext4 文件系统是如何生成的》
- 《【SemiDrive源码分析】【X9芯片启动流程】08 - X9平台 lk 目录源码分析 之 目录介绍》
- 《【SemiDrive源码分析】【X9芯片启动流程】09 - X9平台系统启动流程分析》
- 《【SemiDrive源码分析】【X9芯片启动流程】10 - BareMetal_Suite目录R5 DIL.bin 引导程序源代码分析》
- 《【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析》
- 《【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
前做初始化呢?
废话不多说,先上代码:
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();
disp_client_init();
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);
//todo add backlight init
backlight_service_init(handle->display_id);
}
}
LOGD("found %u displays connected\n", list_length(sdm_get_display_list()));
lvgl_init();
is_inited = true;
}