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

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件