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

相关文章

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l