Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83

背景:

到kernel 4.4上面,发现内核把重启参数通用驱动也实现了。
rk3288 android6.0 kernel3.10上rk是自己实现的。


文档说明:

针对通用reboot mode驱动,内核有文档解释:

Generic reboot mode core map driver
This driver get reboot mode arguments and call the write interface to stores the magic value in special register or ram . Then the bootloader can read it and take different action according the argument stored.
All mode properties are vendor specific, it is a indication to tell the bootloder what to do when the system reboot, and should be named as mode-xxx = <magic> (xxx is mode name).
- mode-normal: Normal reboot mode, system reboot with command "reboot".
- mode-recovery: Android Recovery mode, it is a mode to format the device or update a new image.
- mode-bootloader: Android fastboot mode, it's a mode to re-flash partitions on the Android based device.
- mode-loader: A bootloader mode, it's a mode used to download image on Rockchip platform, usually used in development.

大概意思就是:
1. reboot mode只提供驱动框架,具体写进去的参数和vendor对应平台相关,重启后会在uboot中判断。
2. 如果模式支持,只要在dts中加上mode-的选项就可以了。


rk3399平台驱动:

dts配置:
rk3399.dtsi:

reboot-mode {compatible = "syscon-reboot-mode";offset = <0x300>;mode-bootloader = <BOOT_BL_DOWNLOAD>;mode-charge = <BOOT_CHARGING>;mode-fastboot = <BOOT_FASTBOOT>;mode-loader = <BOOT_BL_DOWNLOAD>;mode-normal = <BOOT_NORMAL>;mode-recovery = <BOOT_RECOVERY>;mode-ums = <BOOT_UMS>;mode-wipedata = <BOOT_UMS>;
};

reboot mode注册:

syscon_reboot_mode_probe ->reboot_mode_register ->register_reboot_notifier -> //reboot_notifier的callback是reboot_mode_notifyblocking_notifier_chain_register  //list是reboot_notifier_list

reboot调用:
当系统重启的时候会调用

kernel_restart -> kernel_restart_prepare ->blocking_notifier_call_chain -> __blocking_notifier_call_chain -> notifier_call_chain -> nb->notifier_call -> //reboot_notifier_list被调用到reboot_mode_notify -> reboot-mode.cget_reboot_mode_magic -> //获取参数对应的magicreboot->write ->syscon_reboot_mode_write ->regmap_update_bits //使用regmap mmio更新到寄存器中

重启开机判断是在uboot中完成的

static void fbt_handle_reboot(const char *cmdbuf)
{if (!strcmp(&cmdbuf[6], "-bootloader")) {FBTDBG("%s\n", cmdbuf);board_fbt_set_reboot_type(FASTBOOT_REBOOT_BOOTLOADER);}if (!strcmp(&cmdbuf[6], "-recovery")) {FBTDBG("%s\n", cmdbuf);board_fbt_set_reboot_type(FASTBOOT_REBOOT_RECOVERY);}if (!strcmp(&cmdbuf[6], "-recovery:wipe_data")) {FBTDBG("%s\n", cmdbuf);board_fbt_set_reboot_type(FASTBOOT_REBOOT_RECOVERY_WIPE_DATA);}strcpy(priv.response, "OKAY");priv.flag |= FASTBOOT_FLAG_RESPONSE;fbt_handle_response();udelay(1000000); /* 1 sec */do_reset(NULL, 0, 0, NULL);
}

[RK3399][Android7.1] 系统reboot mode机制小结相关推荐

  1. RK3399 Android7.1系统多个应用出现概率性打开闪退的问题

    比如设置应用打开闪退的报错信息如下: 09-29 16:30:37.105  1675  1675 D AndroidRuntime: Shutting down VM 09-29 16:30:37. ...

  2. [RK3399][Android7.1] 调试笔记 --- 系统默认时钟配置

    OS: Android 7.1 Board: Firefly-RK3399 Kernel: v4.4.55 分两个模块,一个是cpu,还有一个是pmu模块,这里只举例cpu,cpu又分在两个文件中定义 ...

  3. 操作系统学习笔记-04-操作系统的运行机制和体系结构

    操作系统学习笔记-2019 王道考研 操作系统-04-操作系统的运行机制和体系结构 文章目录 4-操作系统的运行机制和体系结构 4.1知识总览 4.2运行机制 4.2.1预备知识:什么是指令? 4.2 ...

  4. MySQL redo log 重做日志 原理 Oracle Redo Log 机制 小结

    MySQL-重做日志 redo log -原理 [redo log buffer][redo log file]-原理 目录: 1.重做日志写入过程图 2.相关知识点汇总图 3.redo_log_bu ...

  5. 关于 Windows CE 系统中同步机制的思考

    关于 Windows® CE 系统中同步机制的思考 田海立 2006-1-18 摘要 本文讨论的话题是MSDN文档没有描述或者从它里面不容易看出来的Windows® CE线程同步的问题.既然是这样,而 ...

  6. RK3399 Android7.1 编译

    RK3399 Android7.1 编译 文章目录 RK3399 Android7.1 编译 前言 设置 Linux 编译环境 安装 JDK 可选- 更新默认的 Java 版本 安装所需的程序包(Ub ...

  7. java获取apk启动activity_[RK3399] android7.1 设置开机启动apk

    平台: RK3399+android7.1 开机启动apk (1)修改类: ./frameworks/base/services/core/java/com/android/server/am/Act ...

  8. binder 从c到java_Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析...

    在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码.细心的读者会发现,这几篇文章分析的Binder接口都是 ...

  9. 第35课: 打通Spark系统运行内幕机制循环流程

    第35课: 打通Spark系统运行内幕机制循环流程 Spark通过DAGScheduler面向整个Job划分出了不同的Stage,划分Stage之后,Stage从后往前划分,执行的时候从前往后执行,每 ...

最新文章

  1. c语言spi发送12位数据,【51单片机】普通I/O口模拟SPI口C语言程序
  2. Cell子刊:辛秀芳组发现病原菌效应因子操纵植物ABA激素通路促进侵染的新机制...
  3. java判斷素數,算法改進 | java語言中判斷素數
  4. 类成员函数指针的语法
  5. 回文串 --- 动态dp UVA 11584
  6. 015_CSS伪元素选择器
  7. 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑
  8. 深刻理解数据库外键含义
  9. IOS网络框架的Alamofire5.4高版本网络工具封装
  10. CF536C-Tavas and Pashmaks【凸壳】
  11. 仅展示近三天的动态设置_抱歉,朋友仅展示最近三天的朋友圈
  12. 获取当前图层所处的坐标系统(C++)(ArcObject开发)
  13. 解决“(1146, “Table ‘mydb.django_session‘ doesn‘t exist“)”报错的方法
  14. 2018 AI趋势:AI芯片更丰富,用机器学习的企业翻倍 | 德勤报告
  15. CCF201609-1 最大波动(100分)
  16. 2017百度之星初赛:B-1006. 小小粉丝度度熊(贪心+尺取)
  17. 数字音频接口时序简介
  18. 如何了解百度竞价调价技巧
  19. Yolov3:win10下训练自己的数据(GPU版)(详细步骤)
  20. sklearn_决策树

热门文章

  1. python 如何利用字典中的一个键(key)存储多个值(列表)
  2. elasticsearch-7.17.9
  3. 我工作三年了,该懂并发了!
  4. 【报告分享】中国企业海外传播白皮书-美通社(附下载)
  5. Tensorflow之基本图像分析
  6. U 盘启动盘创建工具 Rufus在Linux 上不能使用?这里有 6 个替代品
  7. 家庭安全月 康巴什消防千份宣传画报贴满新区
  8. clrscr()及gotoxy()函数
  9. 三年级计算机群鸭戏水教案导入,清华版信息技术三年级下册3.7《群鸭戏水-自选图形》教案2.doc...
  10. 10个常见软件架构模式和三层架构模式