android系统更新rtc是通过过dev下的alarm设备更新的,而不是rtc设备

2023-10-18 09:38

本文主要是介绍android系统更新rtc是通过过dev下的alarm设备更新的,而不是rtc设备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关说明:I'm not much of an expert here, but it looks like Android 2.3 is using /dev/alarm as its RTC interface. See system/core/toolbox/alarm.c and frameworks/base/libs/utils/SystemClock.cpp for example. 

地址为:https://groups.google.com/forum/#!topic/android-porting/zddbPQCc5sQ


ADROID 2.1 架构解析 11 系统时间:http://blog.csdn.net/skdev/article/details/5579508


 SystemClock.cpp文件:https://cloud.seu.edu.cn/gitlab/frederickjoe/aosp-frameworks-base/blob/ddb78e7753be03937ad57ce7c3c842c52bdad65e/libs/utils/SystemClock.cpp


android 4.0.3 设置时间无法更新到RTC:http://www.itdadao.com/articles/c15a194467p0.html


1.跟踪执行路径:
packages/apps/Settings/src/com/android/settings/DateTimeSettings.java
onTimeSet(...) --> setTime(...) --> SystemClock.setCurrentTimeMillis(when)

frameworks/base/core/java/android/os/SystemClock.java
native public static boolean setCurrentTimeMillis(long millis);

frameworks/base/core/jni/android_os_SystemClock.cpp
static jboolean android_os_SystemClock_setCurrentTimeMillis(JNIEnv* env,jobject clazz, jlong millis) --> setCurrentTimeMillis(millis)

frameworks/base/libs/utils/SystemClock.cpp

int setCurrentTimeMillis(int64_t millis) --> ioctl(fd, ANDROID_ALARM_SET_RTC, &ts)

2.修改幷编译内核:
cd linux-3.4.2/
查看ANDROID_ALARM_SET_RTC定义:vi -t ANDROID_ALARM_SET_RTC
编译内核:./g
修改文件:vi drivers/staging/android/alarm-dev.c , 
重新编译:./g
将修改幷编译好的内核文件 vmlinuz 拷贝到远程服务器:scp vmlinuz 用户名@IP:/www/hxm/

3.加载修改后的内核到开发板上:
重启,出现开机选择菜单时按下字母键 c 进入pmon命令行界面,通过minicom在pmon命令行下:
ifaddr eth0 10.20.42.171
load http://IP/hxm/vmlinuz
g console=ttyS0,115200 root=/dev/sda5 init=/init androidboot.console=tty
进入android系统

4.修改幷编译android源码生成 libutils.so 文件:
cd ~/androidtoolchain
source run.sh
yeeloong
cd frameworks/base/libs/utils/
mm -B
在打印的信息中找到这一行 Install: out/target/product/yeeloong/system/lib/libutils.so,即为编译好的 .so 文件存放的路径

5.替换 libutils.so 动态库:
重启,出现开机选择菜单时按下字母键 c 进入pmon命令行界面,通过minicom在pmon命令行下:
设置IP,加载中标内核,进入中标系统:
ifaddr eth0 10.20.42.171
load http://IP/lx/vm.34.test.perf
g console=ttyS0,115200 root=/dev/sda1 3
root身份登录:
fdisk -l
挂载android系统所在分区:mount /dev/sda5 /mnt/
cd /mnt/system/lib/
ls libutils.so
备份 .so 库文件:mv libutils.so libutils.so.bk
在登录服务器lixing@10.20.41.11的终端将编译好的 .so 动态库拷贝至android系统:scp ../../../../out/target/product/yeeloong/system/lib/libutils.so root@10.20.42.171:/mnt/system/lib/
(若提示No route to host,先将其拷贝至本机loongson@10.20.42.166,再通过 U 盘拷贝至android系统)
(或者先将编译好的 .so 动态库拷贝至笔记本:scp ../../../../out/target/product/yeeloong/system/lib/libutils.so icthxm@10.20.42.63:~/adb/bin ,再push至android系统: adb push libutils.so system/lib/)
cd ../../../
umount /mnt/
重启以加载android内核,进入android系统:
ifaddr eth0 10.20.42.171
load http://IP/hxm/vmlinuz
g console=ttyS0,115200 root=/dev/sda5 init=/init androidboot.console=tty

6.通过adb查看服务器端实时日志:
(笔记本上)
cd adb/bin
./adb devices
adb connect 10.20.42.118
adb shell
root@android:/ # logcat

7.代码修改:

应用程序框架层中,对文件 ~/androidtoolchain/frameworks/base/libs/utils/SystemClock.cpp 中的修改见附件patch。
linux内核层中,对文件 ~/linux-3.4.2/drivers/rtc/rtc-dev.c 中的修改见附件patch。
在android系统分区的根目录下,更改 ueventd.rc 文件,增加一行:/dev/rtc0 0666 root root . 使得设备节点的权限由 600 改为 666.

显示系统时间:date
设置系统时间: date 月日时分年.秒
显示硬件时间:hwclock --show 或 clock --show
设置硬件时间:hwclock --set --date = "月/日/年 时分秒“ 或 clock --set --date = "月/日/年 时分秒“
硬件时间同步到系统时间:hwclock --hctosys 
系统时间同步到硬件时间:hwclock --systohc


相关说明:I'm not much of an expert here, but it looks like Android 2.3 is using /dev/alarm as its RTC interface. See system/core/toolbox/alarm.c and frameworks/base/libs/utils/SystemClock.cpp for example. 

地址为:https://groups.google.com/forum/#!topic/android-porting/zddbPQCc5sQ

这篇关于android系统更新rtc是通过过dev下的alarm设备更新的,而不是rtc设备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231738

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构