mtk preloader源码简析

PL_PROFILING:打开时间计算log

main
mtk_uart_init //初始化串口
bldr_pre_process
platform_pre_init //essential hardware initialization
g_boot_mode = NORMAL_BOOT; //默认启动模式为正常模式
platform_init
mtk_wdt_init(); //初始化看门狗
set_kpd_pmic_mode(); //初始化按键键盘
g_boot_reason = reason = platform_boot_status(); //检测启动状态
if(rtc_boot_check() //返回0
if (mtk_wdt_boot_check() == WDT_NORMAL_REBOOT) { //检测看门狗的状态,看是系统重启事件还是按住电源键重启事件
print(“%s WDT normal boot!\n”, MOD);
rtc_clean_debug(); //if reboot the system,clearn the debug bit
return BR_WDT;
} else if (mtk_wdt_boot_check() == WDT_BY_PASS_PWK_REBOOT){
print(“%s WDT reboot bypass power key!\n”, MOD);
return BR_WDT_BY_PASS_PWK;
}

if (mtk_detect_key(PL_PMIC_PWR_KEY) && hw_check_battery()) { //检测电源按键状态,若电池插上且电源键按下,
print(“%s Power key boot!\n”, MOD); //返回BR_POWER_KEY事件
rtc_mark_bypass_pwrkey(); //hw_check_battery写死返回1
return BR_POWER_KEY;
}
if (usb_accessory_in()) //如果没有按下power键,插入usb充电线,执行这里,返回BR_USB事件
if (reason == BR_RTC || reason == BR_POWER_KEY || reason == BR_USB || reason == BR_WDT || reason == BR_WDT_BY_PASS_PWK || reason == BR_2SEC_REBOOT)
rtc_bbpu_power_on();
enable_PMIC_kpd_clock();
init_dram_buffer();
ram_console_init();
ram_console_reboot_reason_save(g_rgu_status);
boot_device_init();
if (mtk_detect_dl_keys()) { //如果按下download按键,进入下载模式,烧写镜像
platform_emergency_download(CFG_EMERGENCY_DL_TIMEOUT_MS);
}
if(mode == NORMAL_BOOT)
uart_handshake_init(); //串口握手初始化
bldr_handshake(&handler); //bootloader握手
case NORMAL_BOOT:
usb_handshake(handler) //usb下载软件握手,可以设置usb设置枚举超时时间和等待下载时间超时时间
g_meta_com_type = META_USB_COM; //握手成功返回META_USB_COM
uart_handshake(handler) //串口下载软件握手
g_meta_com_type = META_UART_COM; //握手成功返回META_UART_COM
bldr_load_images(&jump_addr) //读取bootloader的镜像
bldr_post_process
platform_post_init() //电池检测
platform_set_boot_args(); /设置启动参数
bootarg.boot_reason = g_boot_reason;
bldr_jump(jump_addr, jump_arg, sizeof(boot_arg_t)); 跳转到bootloader地址运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值