mtk启动流程简析

最近想弄明白mtk平台的整个启动流程,形成09所说的“大局观”,但是mtk的目录实在是太乱了,搞了半天才从网上看到一篇文章,搞明白启动流程。

原文地址:http://h1372865100.blog.163.com/blog/static/2104291032013319111038319

(meidatek\platform\mt6589\preloader\src\core\main.c)main()--->bldr_pre_process()--->

(meidatek\platform\mt6589\preloader\src\drivers\platform.c)platform_pre_init():这里主要是初始化串口和PMIC

(meidatek\platform\mt6589\preloader\src\drivers\platform.c)platform_init():这里主要是初始化看门狗和USB设备,检测是否是下载模式,初始化内存分区
上面这个main函数的主要是用来判断开机模式的,特别是判断是否下载模式,如果是正常启动模式,则加载UBOOT代码,跳转到下一个代码段运行,if (bldr_load_part(PART_UBOOT, bootdev, &addr) != 0)
bldr_jump(addr, BOOT_ARGUMENT_ADDR, sizeof(boot_arg_t))。BOOT_ARGUMENT_ADDR是UBOOT代码段存放的起始地址。
下面进入bootloader阶段,其实是一个lk,即little linux--->

(bootable\bootloader\lk\kernel\main.c)kmain()--->(meidatek\platform\platform.c)platform_early_init:这里主要是初始化中断、LCM和PMIC,注意这里是开机第一次初始化LCM显示,但是没有打印出LOG,原因是初始化LCM的代码在UART初始化之前,g_fb_size = mt_disp_get_vram_size();可以进入这个函数仔细研究。

(bootable\bootloader\lk\kernel\main.c)kmain()--->thread_resume--->(meidatek\platform\platform.c)platform_init():这里做的事情就多了,开背光,加载显示LOGO图片,初始化充电电池==
执行完这个main函数后就开始真正开机了,但还是需要一个boot引导,这个是一个fastboot,如下--->

(bootable\bootloader\lk\app\mt_boot\sys_commonds.c)cmd_boot--->

(bootable\bootloader\lk\app\mt_boot\mt_boot.c)boot_linux--->这里就真正跳到linux内核那里去了

你可能感兴趣的:(驱动分析)