首页 > > > adb reboot bootloader
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
原文作者:;如有侵权,请联系管理员删除。