• Android 恢复出厂设置时间重置


    时间由rtc硬件模块来进行维护的,时间更新后会将时间信息写入此硬件模块,在系统启动时,RTC硬件驱动会读取此值进行设置。

    关于android的时间
    网上资料了解到,android Linux都有两个时间,一个是系统时间,一个是硬件时间(RTC时间)。RTC是实时时钟的英文 缩写,基本上在硬件上都有纽扣电池,不会断电,会一直计时;但系统时钟不一样,系统运行的时候能一直计时,但系统关机或者断电的时候就gg了。所以每次系统开机的时候,会去读取rtc中的硬件时间,写入到系统时间,然后系统时间就自己搞起来了,不再关rtc时间什么事情了。等系统关机或者什么时候,会把时间写入到rtc,这样才能保证下次开机你这个系统的时间不会错乱。

    两种简单的方法修改Android系统下的系统默认时间

    RK3288_Android7.1调试RTC总结

    /kernel/msm-4.9/drivers/rtc/systohc.c

    int rtc_set_ntp_time(struct timespec64 now)
    {
    	struct rtc_device *rtc;
    	struct rtc_time tm;
    	int err = -ENODEV;
    
    	if (now.tv_nsec < (NSEC_PER_SEC >> 1))
    		rtc_time64_to_tm(now.tv_sec, &tm);
    	else
    		rtc_time64_to_tm(now.tv_sec + 1, &tm);
    
    	rtc = rtc_class_open(CONFIG_RTC_SYSTOHC_DEVICE);
    	if (rtc) {
    		/* rtc_hctosys exclusively uses UTC, so we call set_time here,
    		 * not set_mmss. */
    		if (rtc->ops &&
    		    (rtc->ops->set_time ||
    		     rtc->ops->set_mmss64 ||
    		     rtc->ops->set_mmss))
    			err = rtc_set_time(rtc, &tm);
    		rtc_class_close(rtc);
    	}
    
    	return err;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    frameworks/base/services/core/java/com/android/server/AlarmManagerService.java

    // We have to set current TimeZone info to kernel
    // because kernel doesn't keep this after reboot
    setTimeZoneImpl(SystemProperties.get(TIMEZONE_PROPERTY));
    
    // Also sure that we're booting with a halfway sensible current time
    if (mNativeData != 0) {
        final long systemBuildTime = Environment.getRootDirectory().lastModified();
        if (System.currentTimeMillis() < systemBuildTime) {
            Slog.i(TAG, "Current time only " + System.currentTimeMillis()
                    + ", advancing to build time " + systemBuildTime);
            setKernelTime(mNativeData, systemBuildTime);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    system会取当前时间与system分区文件夹的时间进行比较。 如果时间小于文件夹时间,那么就会改成文件夹时间

    设置系统时间重启时间置回版本时间分析

    只要设置过一次时间,不会出现问题

    时间戳
    https://tool.lu/timestamp/

    系统时间
    date
    
    RTC时间
    hwclock -r
    
    通过(@xx,xx以s为单位)时间戳转换为时间。
    date -d @1600335717
    
    产品编译信息信息:
    adb shell getprop | grep date
    获取:"ro.build.date.utc"的值
    
    查看system分区时间:
    adb shell -> ls -al
    如:drwxr-xr-x   1 root   root    3488 2020-09-17 17:41 system
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Linux时间系统之RTC时间
    获取/设置/重置系统时间

    获取时间
    # date
    Thu Jun 4 22:53:13 PDT 2015
    # date +%s
    1433483623
    # date +%D
    06/04/15
    # date "+%d %B %Y"
    04 June 2015
    
    设置时间
    #date   //设置时间前
    Thu Jun 4 23:09:05 PDT 2015
    # date -s "21 June 2016 11:01:20"  //设置时间
    Tue Jun 21 11:01:20 PDT 2016
    # date   //设置时间后
    Tue Jun 21 11:01:22 PDT 2016
    
    设置完成后,使用clock -w,不然重启后时间又回到以前的值了
    
    $ date +%s --date 19700101 --utc   // 1970-01-01 00:00 UTC
    0
    $ date +%s --date 20120101 --utc   // 2012-01-01 00:00 UTC
    1325376000
    $ date +%s --date 20160101 --utc   // 2016-01-01 00:00 UTC
    1451606400
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    【LeetCode每日一题】——637.二叉树的层平均值
    《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法
    升级Jenkins从2.263.3到2.440.2
    有外媒称,Linux 发行版Ubuntu 23.10也将正式支持树莓派 5
    WebDAV之π-Disk派盘 + Xplore
    这些不知道,别说你熟悉 Nacos,深度源码解析!
    【Qt系列】QtableWidget表格列宽自适应表格大小
    数字化产业研究报告
    opencv ---特征描述符
    解决远程git服务器路径改变导致本地无法push的问题
  • 原文地址:https://blog.csdn.net/weixin_44008788/article/details/113879859