Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Bootloader Xiaomi AX6S (RB03)
- int sub_41E01F68()
- {
- char *_autostart; // r0
- char *autostart; // r7
- unsigned __int8 *_flag_try_sys1_failed; // r0
- unsigned int flag_try_sys1_failed; // r6
- unsigned __int8 *_flag_try_sys2_failed; // r0
- unsigned int flag_try_sys2_failed; // r8
- unsigned __int8 *v6; // r0
- unsigned int flag_ota_reboot; // r10
- unsigned __int8 *v8; // r0
- unsigned int flag_last_success; // r5
- bool v10; // cc
- int boot_fw_num; // r4
- bool v12; // cc
- unsigned __int8 *v13; // r0
- _BYTE *kernel_cmd; // r5
- _BYTE *v15; // r5
- char *_uart_en; // r0
- const char *uart_en; // r8
- char boot_cmd[160]; // [sp+0h] [bp-A0h] BYREF
- _autostart = getenv("autostart");
- autostart = _autostart;
- if ( _autostart )
- autostart = (char *)sub_41E30468((int)_autostart);
- setenv("autostart", "yes");
- if ( check_factory_mode() == 1 )
- {
- setenv("uart_en", "1");
- setenv("boot_wait", "on");
- }
- _flag_try_sys1_failed = (unsigned __int8 *)getenv("flag_try_sys1_failed");
- flag_try_sys1_failed = (unsigned int)_flag_try_sys1_failed;
- if ( _flag_try_sys1_failed )
- flag_try_sys1_failed = strtol(_flag_try_sys1_failed, 0, 0xAu);
- _flag_try_sys2_failed = (unsigned __int8 *)getenv("flag_try_sys2_failed");
- flag_try_sys2_failed = (unsigned int)_flag_try_sys2_failed;
- if ( _flag_try_sys2_failed )
- flag_try_sys2_failed = strtol(_flag_try_sys2_failed, 0, 0xAu);
- v6 = (unsigned __int8 *)getenv("flag_ota_reboot");
- flag_ota_reboot = (unsigned int)v6;
- if ( v6 )
- flag_ota_reboot = strtol(v6, 0, 10u);
- v8 = (unsigned __int8 *)getenv("flag_last_success");
- flag_last_success = (unsigned int)v8;
- if ( v8 )
- flag_last_success = strtol(v8, 0, 10u);
- v10 = flag_try_sys2_failed > 1;
- if ( flag_try_sys2_failed <= 1 )
- v10 = flag_try_sys1_failed > 1;
- boot_fw_num = v10;
- if ( v10 )
- {
- boot_fw_num = 0;
- }
- else
- {
- v12 = flag_last_success > 1;
- if ( flag_last_success <= 1 )
- v12 = flag_ota_reboot > 1;
- if ( !v12 )
- {
- if ( (flag_try_sys2_failed & flag_try_sys1_failed) != 0 )
- printf("Boot failure detected on both systems\n");
- if ( flag_ota_reboot )
- {
- boot_fw_num = 1 - flag_last_success;
- v13 = (unsigned __int8 *)getenv("flag_boot_success");
- if ( v13 && !strtol(v13, 0, 0xAu) )
- {
- boot_fw_num = flag_last_success;
- printf(" INFO: ota reboot failed, swap to old firmware! \n");
- setenv("flag_ota_reboot", 0);
- setenv("flag_upgrade_push", 0);
- }
- }
- else
- {
- if ( flag_last_success )
- flag_try_sys1_failed = flag_try_sys2_failed;
- if ( flag_try_sys1_failed )
- boot_fw_num = 1 - flag_last_success;
- else
- boot_fw_num = flag_last_success;
- }
- }
- }
- kernel_cmd = sprintf("$", "%s", "console=ttyS0,115200n1 loglevel=8 swiotlb=512 rootfstype=squashfs");
- v15 = &kernel_cmd[(_DWORD)sprintf(&asc_41E4FCC8[(_DWORD)kernel_cmd], " firmware=%d", boot_fw_num)];
- _uart_en = getenv("uart_en");
- uart_en = _uart_en;
- if ( _uart_en && strcmp(_uart_en, "0") )
- v15 = &sprintf(&asc_41E4FCC8[(_DWORD)v15], " uart_en=%s", uart_en)[(_DWORD)v15];
- if ( check_factory_mode() )
- {
- sprintf(&asc_41E4FCC8[(_DWORD)v15], " factory_mode=%s", "1");
- setenv("uart_en", "1");
- setenv("boot_wait", "on");
- }
- setenv(byte_41E3B956, "$");
- if ( boot_fw_num )
- {
- setenv("flag_boot_rootfs", "1");
- sprintf(boot_cmd, "%s", "run boot_fw1");
- }
- else
- {
- setenv("flag_boot_rootfs", "0");
- sprintf(boot_cmd, "%s", "run boot_fw0");
- }
- save_env();
- printf("Booting System %d\n", boot_fw_num);
- sub_41E03BAC((int)boot_cmd);
- if ( autostart )
- {
- setenv("autostart", autostart);
- sub_41E12954(autostart);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement