RK3566 android11 RTC-HYM8563移植
硬件
设备树
RTC权限
diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts
index 3c007b0..6ad427a 100644
--- a/sepolicy/vendor/genfs_contexts
+++ b/sepolicy/vendor/genfs_contexts
@@ -28,6 +28,10 @@ genfscon sysfs /devices/platform/ff3c0000.i2c/i2c-0/0-0020/rk808-rtc/rtc/rtc0/hc
# for kernel 4.19
genfscon debugfs /sync u:object_r:debugfs_sw_sync:s0
+# 25-06.09 liguoyi RTC
+# rk356x RTC
+genfscon sysfs /devices/platform/fdd40000.i2c/i2c-0/0-0051/rtc/rtc0/hctosys u:object_r:sysfs_hctosys:s0
+
# for usb grf
genfscon sysfs /class/extcon/extcon0 u:object_r:sysfs_extcon:s0
genfscon sysfs /devices/platform/rk-headset/extcon/extcon1/state u:object_r:sysfs_extcon:s0
kernel
diff --git a/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi b/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi
index 35e6b660314d..2e64bdb0494b 100755
--- a/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi
+++ b/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi
@@ -206,8 +206,10 @@
pinctrl-0 = <&uart1m0_rtsn>;
pinctrl-1 = <&uart1_gpios>;
BT,reset_gpio = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
- BT,wake_gpio = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
- BT,wake_host_irq = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
+ // BT,wake_gpio = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
+ // BT,wake_host_irq = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
+ BT,wake_gpio = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;
+ BT,wake_host_irq = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
status = "okay";
};
@@ -273,7 +275,14 @@
&i2c0 {
status = "okay";
-
+ hym8563:hym8563@51{
+ compatible = "haoyu,hym8563";
+ reg = <0x51>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rtc_int>;
+ interrupt-parent = <&gpio0>;
+ interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
+ };
vdd_cpu: tcs4525@1c {
compatible = "tcs,tcs452x";
reg = <0x1c>;
@@ -636,6 +645,12 @@
rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
+
+ rtc{
+ rtc_int: rtc-int{
+ rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
};
驱动配置
kenrnel目录下运行
依次进入目录(键盘上下键移动,回车进入)
在 Real Time Clock 下,打开 Haoyu Microelectronics HYM8563
,并关闭 RK808 的RTC。按 Y 打开,按 N 关闭。
完成后右键选择到 Save 然后一直保存。保存完成后,退出所有路径直到退出menuconfig界面。
因为我们刚刚保存的是.config每次编译的时候脚本都会去组合生产.config所以你的配置就会被覆盖掉,这也是很多小伙伴经常提问的为什么配置没生效,正确的方式是生成defconfig然后并覆盖到之前的arch/arm64/configs/
下代替我们使用的defconfig
我们SDK使用的是rockchip_linux_defconfig
,所以把生成的defconfig复制过去代替rockchip_linux_defconfig
我用的是repo带git版本所有我就直接复制过去了,如果你没有git管理就先备份一个然后在代替过去,避免搞坏了回不去了。
测试方法
测试rtc关机后时间是否同步
设置当前时间和自己手机同步
拔掉电源,等待几分钟开机
确认板子时间是否则和当前手机时间一致
其他查看rtc方法
同时在以下目录中也可以直接读取驱动相关的信息。
rk3568_r:/sys/class/rtc # ls
rtc0
rk3568_r:/sys/class/rtc # cd rtc0
rk3568_r:/sys/class/rtc/rtc0 # cd ..
rk3568_r:/sys/class/rtc # ls -l
total 0
lrwxrwxrwx 1 root root 0 2021-01-01 12:00 rtc0 -> ../../devices/platform/fe5e0000.i2c/i2c-5/5-0051/rtc/rtc0
rk3568_r:/sys/class/rtc # cd rtc0
rk3568_r:/sys/class/rtc/rtc0 # ls
date device max_user_freq power subsystem uevent wakeup8 dev hctosys name since_epoch time wakealarm
rk3568_r:/sys/class/rtc/rtc0 # cat name
rtc-hym8563 5-0051
rk3568_r:/sys/class/rtc/rtc0 # cat time
03:04:57
rk3568_r:/sys/class/rtc/rtc0 # cat hctosys
1
遇到的问题
问题描述:测试rtc ,通过指令读取正常。使用指令保存 确认系统时间 和rtc 时间都一致后重启,系统时间和rtc 回到初始时间 ,并且未接网线来同步网络时间
执行指令:
hwclock --show --rtc=/dev/rtc0 查看RTC0的时间
date 查看系统时间
date "2024-03-09 09:46:00" 写入系统时间
hwclock --systohc --rtc=/dev/rtc0 将系统时间写入硬件时钟,并指定硬件时钟设备为 /dev/rtc0
解决办法:
只能往后调时间,不能往前跳时间。该问题不建议解决。
通过在 android 系统的界面上设置时间我发现了个问题,如果往前设置时间就会出现重启后,时间不是上次设置的时间。
经过反复验证,发现如果时间设置有问题,系统时间就会变成编译时候时间点。如果把设置的时间点大于编译时间,重启后就是刚才设置的时间。
Android 11 系统中确实有一个机制,会比较系统时间和编译时间的大小,如果系统时间小于等于编译时间,系统会将时间自动设置为编译时间。这个机制是为了避免一些时间相关的问题,例如应用程序的过期问题、证书验证问题等等。
不过需要注意的是,这个机制针对的是系统级别的时间,而不是应用程序级别的时间。即使系统时间被设置为编译时间,应用程序仍然可以通过系统提供的 API 获取当前的真实时间。
文件路径:android源码\frameworks\base\services\core\java\com\android\server\AlarmManagerService.java
如果强行注释该内容可能会导致系统异常,因此不建议解决。
评论