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

相关文章

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题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹