[RK3399][Android7.1] 系统reboot mode机制小结
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机制小结相关推荐
- RK3399 Android7.1系统多个应用出现概率性打开闪退的问题
比如设置应用打开闪退的报错信息如下: 09-29 16:30:37.105 1675 1675 D AndroidRuntime: Shutting down VM 09-29 16:30:37. ...
- [RK3399][Android7.1] 调试笔记 --- 系统默认时钟配置
OS: Android 7.1 Board: Firefly-RK3399 Kernel: v4.4.55 分两个模块,一个是cpu,还有一个是pmu模块,这里只举例cpu,cpu又分在两个文件中定义 ...
- 操作系统学习笔记-04-操作系统的运行机制和体系结构
操作系统学习笔记-2019 王道考研 操作系统-04-操作系统的运行机制和体系结构 文章目录 4-操作系统的运行机制和体系结构 4.1知识总览 4.2运行机制 4.2.1预备知识:什么是指令? 4.2 ...
- MySQL redo log 重做日志 原理 Oracle Redo Log 机制 小结
MySQL-重做日志 redo log -原理 [redo log buffer][redo log file]-原理 目录: 1.重做日志写入过程图 2.相关知识点汇总图 3.redo_log_bu ...
- 关于 Windows CE 系统中同步机制的思考
关于 Windows® CE 系统中同步机制的思考 田海立 2006-1-18 摘要 本文讨论的话题是MSDN文档没有描述或者从它里面不容易看出来的Windows® CE线程同步的问题.既然是这样,而 ...
- RK3399 Android7.1 编译
RK3399 Android7.1 编译 文章目录 RK3399 Android7.1 编译 前言 设置 Linux 编译环境 安装 JDK 可选- 更新默认的 Java 版本 安装所需的程序包(Ub ...
- java获取apk启动activity_[RK3399] android7.1 设置开机启动apk
平台: RK3399+android7.1 开机启动apk (1)修改类: ./frameworks/base/services/core/java/com/android/server/am/Act ...
- binder 从c到java_Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析...
在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码.细心的读者会发现,这几篇文章分析的Binder接口都是 ...
- 第35课: 打通Spark系统运行内幕机制循环流程
第35课: 打通Spark系统运行内幕机制循环流程 Spark通过DAGScheduler面向整个Job划分出了不同的Stage,划分Stage之后,Stage从后往前划分,执行的时候从前往后执行,每 ...
最新文章
- c语言spi发送12位数据,【51单片机】普通I/O口模拟SPI口C语言程序
- Cell子刊:辛秀芳组发现病原菌效应因子操纵植物ABA激素通路促进侵染的新机制...
- java判斷素數,算法改進 | java語言中判斷素數
- 类成员函数指针的语法
- 回文串 --- 动态dp UVA 11584
- 015_CSS伪元素选择器
- 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑
- 深刻理解数据库外键含义
- IOS网络框架的Alamofire5.4高版本网络工具封装
- CF536C-Tavas and Pashmaks【凸壳】
- 仅展示近三天的动态设置_抱歉,朋友仅展示最近三天的朋友圈
- 获取当前图层所处的坐标系统(C++)(ArcObject开发)
- 解决“(1146, “Table ‘mydb.django_session‘ doesn‘t exist“)”报错的方法
- 2018 AI趋势:AI芯片更丰富,用机器学习的企业翻倍 | 德勤报告
- CCF201609-1 最大波动(100分)
- 2017百度之星初赛:B-1006. 小小粉丝度度熊(贪心+尺取)
- 数字音频接口时序简介
- 如何了解百度竞价调价技巧
- Yolov3:win10下训练自己的数据(GPU版)(详细步骤)
- sklearn_决策树
热门文章
- python 如何利用字典中的一个键(key)存储多个值(列表)
- elasticsearch-7.17.9
- 我工作三年了,该懂并发了!
- 【报告分享】中国企业海外传播白皮书-美通社(附下载)
- Tensorflow之基本图像分析
- U 盘启动盘创建工具 Rufus在Linux 上不能使用?这里有 6 个替代品
- 家庭安全月 康巴什消防千份宣传画报贴满新区
- clrscr()及gotoxy()函数
- 三年级计算机群鸭戏水教案导入,清华版信息技术三年级下册3.7《群鸭戏水-自选图形》教案2.doc...
- 10个常见软件架构模式和三层架构模式