ITPub博客

首页 > > > adb reboot bootloader

adb reboot bootloader

作者:dapan 时间:2018-11-29 16:40:35 0 删除 编辑

RK3288 7.1

正常情况下,adb reboot bootloader,会进入fastboot 模式,Android 可以在fastboot 模式下进行烧录。

Rockchip有一个自己的loader,用这个loader来下载各种分区

我们在上面的fastboot 模式下 输入 fastboot reboot bootloader

会进入rockchip 的loader模式



还发现一个情况

输入adb reboot loader 这个时候也会直接进入 rockchip loader模式

但是在system/core/adb 里面是没有对这个loader字符串做判断处理的

真正的处理位置在

~/rk3288_pad/kernel/kernel/reboot.c [FORMAT=unix] [TYPE=C] [POS=177,32][30%] 29/11/18 - 16:13                         
/machine_restart
231  *  This is not safe to call in interrupt context.
232  */  
233 void kernel_restart(char *cmd)
234 {    
235     kernel_restart_prepare(cmd);
236     migrate_to_reboot_cpu();
237     syscore_shutdown();
238     if (!cmd)
239         pr_emerg("Restarting system\n");
240     else
241         pr_emerg("Restarting system with command '%s'\n", cmd);
242     kmsg_dump(KMSG_DUMP_RESTART);
243     machine_restart(cmd);                                                                                         
244 }    
245 EXPORT_SYMBOL_GPL(kernel_restart);

然后通过machine_restart(cmd),这个函数来判断重启进入什么模式

Board:  Rockchip platform Board
Uboot as second level loader
DRAM:  Found dram banks: 1
Adding bank:0000000000000000(0000000080000000)
Reserve memory for trust os.
dram reserve bank: base = 0x08400000, size = 0x00e00000
128 MiB
GIC CPU mask = 0x00000001
SdmmcInit = 0 400
SdmmcInit = 2 0
storage init OK!
Using default environment

GetParam
Load FDT from resource image.
power key: bank-0 pin-5
HW board check version:0
can't find dts node for fixed
pmic:rk808
can't find dts node for pwm1
set pwm voltage ok,pwm_id =1 vol=1100000,pwm_value=48
fg:cw201x
SecureBootEn = 0, SecureBootLock = 0

#Boot ver: 2018-11-29#2.33
empty serial no.
reboot rockusb.

判断的代码位置在

    if (SYS_LOADER_ERR_FLAG == loader_flag) {
        loader_flag = SYS_LOADER_REBOOT_FLAG | BOOT_LOADER;
        reboot_mode = BOOT_LOADER;
    }                                                                                                                 
     
    if ((loader_flag & 0xFFFFFF00) == SYS_LOADER_REBOOT_FLAG) {
        switch (reboot_mode) {
        case BOOT_NORMAL:
            printf("reboot normal.\n");
            frt = FASTBOOT_REBOOT_NORMAL;
            break;
        case BOOT_LOADER:
#ifdef CONFIG_CMD_ROCKUSB
            printf("reboot rockusb.\n");
            do_rockusb(NULL, 0, 0, NULL);
#endif      
            break;
#ifdef CONFIG_CMD_FASTBOOT
        case BOOT_FASTBOOT:
            printf("reboot fastboot.\n");
            frt = FASTBOOT_REBOOT_FASTBOOT;
            break;
#endif      
        case BOOT_NORECOVER:
            printf("reboot no recover.\n");
~/rk3288_pad/u-boot/board/rockchip/common/rkboot/fastboot.c


关键是那个flag的设置位置,设置的位置在上面说的kernel的代码里面


如果觉得有帮忙,请关注公众号 嵌入式Linux

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87156