当前位置: 首页 > article >正文

坑多多之AC8257 i2c1 rtc-pcf8563

pcf85163

ordering information

Ordering information

Package

Description

Version

Marking code

PCF85163T/1

SO8

SOT96-1

PF85163

PCF85163TS/1

TSSOP8

SOT505-1

85163

①plastic small outline package; 8 leads;body width 3.9 mm

②plastic thin shrink small outline package;8 leads; body width 3 mm

register

HYM8563 vs PCF85163

regHYM8563PCF85163
0x00CTL1
0x01CTL2
0x02SEC
0x03MIN
0x04HOUR
0x05DAY
0x06WEEKDAY
0x07MONTH
0x08YEAR
0x09ALM_MIN
0x0aALM_HOUR
0x0bALM_DAY
0x0cALM_WEEK
0x0dCLKOUT
0x0eTMR_CTL
0x0fTMR_CNT

detail 

Bit positions labeled as x are not relevant. Bit positions labeled with N should always be written with logic 0; if read, they couldbe either logic 0 or logic 1. 

76543210
TESTNSTOPNTESTCNNN
NNNTI_TPAFTFAIETIE
VL
x
xx
xx
xxxxx
CENTURYxx
AE_M
AE_Hx
AE_Dx
AE_Wxxxx
FExxxxx
TExxxxx

clkout_ops

clkout_opsfunction
pcf8563_clkout_preparepcf8563_clkout_controlRW
pcf8563_clkout_unpreparepcf8563_clkout_controlRW
pcf8563_clkout_is_preparedR
pcf8563_clkout_recalc_rateR
pcf8563_clkout_round_rate
pcf8563_clkout_set_rateRW

问题

佰维BWMECX32H2A-08Gb停产,内存颗粒换成BWMZFX32H2A-8G-X,linux内核启动时间与之前的内存颗粒比提前100ms左右,rtc芯片驱动访问i2c1与MTK sensor hub协处理器访问i2c1冲突导致i2c读写失败,最终probe失败,rtc设备不存在,厂测失败,厂线停产。rtc驱动初始化时增加100毫秒延时可以避开冲突。

日志

异常

<3>[    0.523511] (2)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_read_block_data: read error
<3>[    0.523516] (2)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_probe: read error996        : preloader813        : lk<3>[    0.520859] (3)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_write_block_data: err=-121 addr=0e, data=03
<3>[    0.520867] (3)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_probe: write error
<4>[    0.520892] (3)[1:swapper/0]rtc-pcf8563: probe of 1-0051 failed with error -5<3>[    0.524627] (3)[1:swapper/0]rtc-pcf8563 1-0051: low voltage detected, date/time is not reliable.
<6>[    0.524737] (3)[1:swapper/0]rtc-pcf8563 1-0051: rtc core: registered rtc-pcf8563 as rtc1
<3>[    0.525180] (3)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_write_block_data: err=-121 addr=0d, data=00
<6>[    0.739091] (3)[1:swapper/0]rtc-pcf8563 1-0051: setting system clock to 2009-01-01 00:01:11 UTC (1230768071)

正常

       991        : preloader977        : lk
<6>[    0.574644] (2)[1:swapper/0]rtc-pcf8563 1-0051: rtc core: registered rtc-pcf8563 as rtc1
<6>[    0.782513] (3)[1:swapper/0]rtc-pcf8563 1-0051: setting system clock to 2009-01-01 23:38:17 UTC (1230853097)

0121 i2c1 rtc-pcf8563

设备上电3.18秒左右访问0xee,9次,1ms后2个9次,3ms后访问0x18,3个9次。对应的kernel时间0.841042左右。lk里boot_linux_fdt不启动linux kernel,不会有0xee 0x18访问。

delayed work

--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -650,7 +650,39 @@ static struct i2c_driver pcf8563_driver = {.id_table   = pcf8563_id,};+#ifdef MODULEmodule_i2c_driver(pcf8563_driver);
+#else
+static struct delayed_work rtc_init_work;
+
+static void rtc_init_work_callback(struct work_struct *work)
+{
+   i2c_add_driver(&pcf8563_driver);
+   return;
+}
+
+static int __init pcf8563_init(void)
+{
+   int rval = 0;
+
+   INIT_DELAYED_WORK(&rtc_init_work, rtc_init_work_callback);
+   rval = schedule_delayed_work(&rtc_init_work, HZ * 2);
+   if (rval < 0) {
+       pr_info("pcf8563 init fail %d\n", rval);
+   }
+
+   return rval;
+}
+
+static void __exit pcf8563_exit(void)
+{
+   i2c_del_driver(&pcf8563_driver);
+   return;
+}
+
+module_init(pcf8563_init)
+module_exit(pcf8563_exit)
+#endifMODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");MODULE_DESCRIPTION("Philips PCF8563/Epson RTC8564 RTC driver");

dts

--- a/arch/arm/boot/dts/ac8257_demo_1g_32.dts
+++ b/arch/arm/boot/dts/ac8257_demo_1g_32.dts
@@ -993,7 +993,7 @@compatible = "autochips,lcm_bridge_ic";reg = <0x0c>;lcm_id = <0>;
-               status = "okay";
+               status = "disabled";};};@@ -1007,7 +1007,7 @@compatible = "autochips,lcm_bridge_ic";reg = <0x0c>;lcm_id = <1>;
-               status = "okay";
+               status = "disabled";};/* 720P demo board */
@@ -1038,7 +1038,7 @@interrupt-parent = <&pio>;interrupts = <12 IRQ_TYPE_EDGE_FALLING 12 0>;-               status = "okay";
+               status = "disabled";};/* 720P Main  */

delay 100ms

--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -22,6 +22,7 @@#include <linux/module.h>#include <linux/of.h>#include <linux/err.h>
+#include <linux/delay.h>#define PCF8563_REG_ST1                0x00 /* status */#define PCF8563_REG_ST2                0x01
@@ -650,7 +651,31 @@ static struct i2c_driver pcf8563_driver = {.id_table       = pcf8563_id,};+#ifdef MODULEmodule_i2c_driver(pcf8563_driver);
+#else
+static int __init pcf8563_init(void)
+{
+       int rval = 0;
+
+       msleep(100);
+       rval = i2c_add_driver(&pcf8563_driver);
+       if (rval < 0) {
+               pr_info("pcf8563 init fail %d\n", rval);
+       }
+
+       return rval;
+}
+
+static void __exit pcf8563_exit(void)
+{
+       i2c_del_driver(&pcf8563_driver);
+       return;
+}
+
+module_init(pcf8563_init)
+module_exit(pcf8563_exit)
+#endifMODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");MODULE_DESCRIPTION("Philips PCF8563/Epson RTC8564 RTC driver");

0122 debug

i2c1接pcf8563(写地址0xa2,读地址0xa3),2ms后访问0xee,9次,1ms后2个9次,3ms后访问0x18,3个9次。

kernel设备树中禁用pcf8563,示波器已经量不到pcf8563驱动的i2c操作;在此基础上,把i2c1上的rtc芯片pcf8563断开,示波器抓到的i2c信号变成,访问0xa2 3个9次,访问0xee 3个9次,访问0x18 3个9次。

dts

--- a/arch/arm/boot/dts/ac8257_demo_1g_32.dts
+++ b/arch/arm/boot/dts/ac8257_demo_1g_32.dts
@@ -1106,7 +1106,7 @@};rtc: pcf8563@51 {
-       status = "okay";
+       status = "disabled";compatible = "nxp,pcf8563";reg = <0x51>;};

i2c-mtk.c

--- a/drivers/i2c/busses/i2c-mtk.c
+++ b/drivers/i2c/busses/i2c-mtk.c
@@ -1428,6 +1428,9 @@ static int mt_i2c_transfer(struct i2c_adapter *adap,int ret;struct mt_i2c *i2c = i2c_get_adapdata(adap);+   if (1 == i2c->adap.nr) {
+       pr_info("zzz i2c bus %d, client 0x%02x\n", i2c->adap.nr, msgs->addr);
+   }if (i2c->multiplexing) {/* Once AP use i2c to transfer, It means bus belong AP.*/i2c->multiplexing = 0;

 rtc-pcf8563.c

--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -13,6 +13,7 @@* it under the terms of the GNU General Public License version 2 as* published by the Free Software Foundation.*/
+#define DEBUG#include <linux/clk-provider.h>#include <linux/i2c.h>
@@ -245,6 +246,8 @@ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)tm->tm_sec, tm->tm_min, tm->tm_hour,tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);+   dump_stack();
+return 0;}@@ -357,6 +360,7 @@ static int pcf8563_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *tm)tm->time.tm_hour, tm->time.tm_mday, tm->time.tm_wday,tm->enabled, tm->pending);+   dump_stack();return 0;}

main.c

--- a/init/main.c
+++ b/init/main.c
@@ -979,6 +979,7 @@ static int __ref kernel_init(void *unused){int ret;+   msleep(5000);kernel_init_freeable();/* need to finish all async __init code before freeing the memory */async_synchronize_full();

0123 /proc/interrupts

proc.c

--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -441,6 +441,12 @@ int show_interrupts(struct seq_file *p, void *v)int i = *(loff_t *) v, j;struct irqaction *action;struct irq_desc *desc;
+   const char *trigger_type_sz[IRQ_TYPE_PROBE] = {
+       "", "rising", "falling", "both",
+       "high", "", "", "",
+       "low", "", "", "",
+       "high|low", "", "", "",
+   };if (i > ACTUAL_NR_IRQS)return 0;
@@ -489,6 +495,7 @@ int show_interrupts(struct seq_file *p, void *v)seq_printf(p, " %*d", prec, (int) desc->irq_data.hwirq);#ifdef CONFIG_GENERIC_IRQ_SHOW_LEVELseq_printf(p, " %-8s", irqd_is_level_type(&desc->irq_data) ? "Level" : "Edge");
+   seq_printf(p, "(%-8s)", trigger_type_sz[irqd_get_trigger_type(&desc->irq_data)]);#endifif (desc->name)seq_printf(p, "-%-8s", desc->name);

0213 MTK TINYSYS SCP

defconfig中禁用SCP后,i2c总线上不再有写地址0xee 0x18的访问。

defconfg

-CONFIG_MTK_TINYSYS_SCP_SUPPORT=y
+CONFIG_MTK_TINYSYS_SCP_SUPPORT=n

0214 i2c1

禁用SCP后i2c总线上只有rtc芯片相关的数据访问,示波器解码出来的i2c数据,与rtc-pcf8563驱动代码一致。

i2c1数据分析

functioni2c
pcf8563_probea2 0e 03Set timer to lowest frequency to save power
pcf8563_get_alarm_modea2 01 A3 00
pcf8563_rtc_read_timea2 00 a3 08 00 38 08 02 14 3d 22 25__rtc_read_alarm
pcf8563_rtc_read_alarma2 09 a3 80 81 80__rtc_read_alarm
  pcf8563_get_alarm_modea2 01 a3 00
pcf8563_rtc_read_timea2 00 a3 08 00 38 08 02 14 3d 22 25__rtc_read_alarm
pcf8563_rtc_read_timea2 00 a3 08 00 38 08 02 14 3d 22 25rtc_initialize_alarm
pcf8563_clkout_register_clka2 0d 00disable the clkout output
a2 0d a3 38pcf8563_clkout_recalc_rate
200ms
pcf8563_rtc_read_timea2 00 a3 08 00 38 08 02 14 3d 22 25rtc_hctosys

 usleep

可能出现返回值小于0,实际休眠时间可能比想要的时间短的情况,接触到的大部分人没有判断函数返回值、man命令查看帮助的习惯,量产后程序时不时出现莫名其妙的情况。

bionic/libc/upstream-freebsd/lib/libc/gen/usleep.c

sleep

bionic/libc/upstream-freebsd/lib/libc/gen/sleep.c

 43 unsigned int44 __sleep(unsigned int seconds)45 {46     struct timespec time_to_sleep;47     struct timespec time_remaining;4849     /*50      * Avoid overflow when `seconds' is huge.  This assumes that51      * the maximum value for a time_t is >= INT_MAX.52      */53     if (seconds > INT_MAX)54         return (seconds - INT_MAX + __sleep(INT_MAX));5556     time_to_sleep.tv_sec = seconds;57     time_to_sleep.tv_nsec = 0;58     if (_nanosleep(&time_to_sleep, &time_remaining) != -1)59         return (0);60     if (errno != EINTR)61         return (seconds);       /* best guess */62     return (time_remaining.tv_sec +63         (time_remaining.tv_nsec != 0)); /* round up */64 }6566 __weak_reference(__sleep, sleep);67 __weak_reference(__sleep, _sleep);

nanosleep

kernel/time/hrtimer.c

1666 SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
1667         struct timespec __user *, rmtp)
1668 {
1669     struct timespec tu;
1670
1671     if (copy_from_user(&tu, rqtp, sizeof(tu)))
1672         return -EFAULT;
1673
1674     if (!timespec_valid(&tu))
1675         return -EINVAL;
1676
1677     return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
1678 }

相关文章:

坑多多之AC8257 i2c1 rtc-pcf8563

pcf85163 ordering information Ordering information Package Description Version Marking code PCF85163T/1 SO8 ① SOT96-1 PF85163 PCF85163TS/1 TSSOP8 ② SOT505-1 85163 ①plastic small outline package; 8 leads;body width 3.9 mm ②plastic thin…...

UE求职Demo开发日志#32 优化#1 交互逻辑实现接口、提取Bag和Warehouse的父类

1 定义并实现交互接口 接口定义&#xff1a; // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "UObject/Interface.h" #include "MyInterActInterface.generated.h…...

自动化测试题

1.什么项目适合做自动化测试&#xff1f; 答&#xff1a;一般来说&#xff0c;适合做自动化测试的项目应该满足以下几个条件&#xff1a; 项目需求稳定&#xff0c;变更不频繁。 项目周期较长&#xff0c;需要反复进行回归测试。 项目功能较复杂&#xff0c;涉及多个模块和…...

vite配置proxy和nginx同步配置反向代理,vite的base含义

vite配置代理是为了在开发环境下联调服务器接口&#xff0c;如果不配置代理&#xff0c;开发时会出现跨域&#xff0c; 会在请求的url的前缀添加标识如/api,代理请求时在rewrite为""&#xff0c;或者rewrite为其他字符串&#xff0c; 项目打包部署后&#xff0c;需要…...

如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题

在安装Qt时&#xff0c;遇到了一些问题&#xff0c;尤其是在Mac上安装Qt后&#xff0c;发现Qt Creator没有出现在应用程序中。通过一些搜索和操作&#xff0c;最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后&#xff0c;启动应用程…...

FFmpeg+SDL实现简易视频播放器

参考链接 https://blog.csdn.net/qq_26611129/article/details/98732561 https://www.cnblogs.com/Azion/p/17756274.html https://avmedia.0voice.com/?id49050 https://blog.csdn.net/qq_44825209/article/details/133760652 https://www.cnblogs.com/Azion/p/17525955.htm…...

set_intersection set_union set_difference set_symmetric_difference

std::set_intersection 用于计算两个已排序范围的交集。它将交集的结果写入到指定的输出迭代器中。 std::set_union 用于计算两个已排序范围的并集。它将并集的结果写入到指定的输出迭代器中。 std::set_difference 用于计算两个已排序范围的差集。它将差集的结果写入到指…...

webpack打包优化策略

1. 减少打包体积 减少打包文件的大小是为了提高加载速度&#xff0c;降低网络带宽消耗&#xff0c;提升用户体验。常见的减少打包体积的优化策略包括&#xff1a; 代码分割&#xff08;Code Splitting&#xff09;&#xff1a;将代码拆分成多个小文件&#xff0c;让浏览器按需…...

多线程基础面试题剖析

一、线程的创建方式有几种 创建线程的方式有两种&#xff0c;一种是继承Thread&#xff0c;一种是实现Runable 在这里推荐使用实现Runable接口&#xff0c;因为java是单继承的&#xff0c;一个类继承了Thread将无法继承其他的类&#xff0c;而java可以实现多个接口&#xff0…...

WEB安全--SQL注入--floor报错注入

一、原理&#xff1a; floor()报错注入需要组合count()、rand()、group by()等函数使用&#xff0c;通过一些手段使数据库在处理语句时产生主键重复的报错&#xff0c;从而达到爆出信息的目的 二、内容&#xff1a; ?id-1 or (select 1 from (select count(*),concat(databa…...

resultMap 标签

resultMap 是 MyBatis 框架中用于定义数据库结果集与 Java 对象之间映射关系的核心标签。它的主要作用是解决数据库字段名与 Java 对象属性名不一致的问题&#xff0c;或处理复杂查询&#xff08;如关联查询、嵌套对象、集合映射等&#xff09;时的映射需求。 主要用途&#x…...

17.推荐系统的在线学习与实时更新

接下来就讲解推荐系统的在线学习与实时更新。推荐系统的在线学习和实时更新是为了使推荐系统能够动态地适应用户行为的变化&#xff0c;保持推荐结果的实时性和相关性。以下是详细的介绍和实现方法。 推荐系统的在线学习与实时更新 在线学习的概念 在线学习&#xff08;Onli…...

Android设备 网络安全检测

八、网络与安全机制 6.1 网络框架对比 volley&#xff1a; 功能 基于HttpUrlConnection;封装了UIL图片加载框架&#xff0c;支持图片加载;网络请求的排序、优先级处理缓存;多级别取消请求;Activity和生命周期的联动&#xff08;Activity结束生命周期同时取消所有网络请求 …...

Kotlin 2.1.0 入门教程(二十)扩展

扩展 Kotlin 提供了一种能力&#xff0c;无需继承类或使用像装饰器这样的设计模式&#xff0c;就能为类或接口扩展新的功能。这是通过一种名为扩展的特殊声明来实现的。 例如&#xff0c;你可以为无法修改的第三方库中的类或接口编写新的函数。这些函数可以像原类的方法一样以…...

神经网络的学习 求梯度

import sys, ossys.path.append(os.pardir) import numpy as npfrom common.functions import softmax, cross_entropy_error from common.gradient import numerical_gradient# simpleNet类 class simpleNet:def __init__(self):self.W np.random.rand(2, 3) # 随机形状为2*…...

机器学习数学基础:24.随机事件与概率

一、教程目标 本教程致力于帮助零基础或基础薄弱的学习者&#xff0c;全面掌握概率论与数理统计的基础公式&#xff0c;透彻理解核心概念&#xff0c;熟练学会应用解题技巧&#xff0c;最终能够轻松应对期末或考研考试。 二、适用人群 特别适合那些对概率论与数理统计知识了…...

【NLP 24、模型训练方式】

你的痛苦&#xff0c;我都心疼&#xff0c;想为你解决 —— 25.2.15 一、按学习范式分类 1. 监督学习&#xff08;Supervised Learning&#xff09; 核心思想&#xff1a;使用带有标签&#xff08;已知输入-输出对&#xff09;的数据训练模型。 常见任务&#xff1a;分类&…...

【鸿蒙】ArkUI-X跨平台问题集锦

系列文章目录 【鸿蒙】ArkUI-X跨平台问题集锦 文章目录 系列文章目录问题集锦1、HSP,HAR模块中 无法引入import bridge from arkui-x.bridge;2、CustomDialog 自定义弹窗中的点击事件在Android 中无任何响应&#xff1b;3、调用 buildRouterMode() 路由跳转页面前&#xff0c;…...

AI向量数据库之LanceDB快速介绍

LanceDB LanceDB 是一个开源的向量搜索数据库&#xff0c;具备持久化存储功能&#xff0c;极大地简化了嵌入向量的检索、过滤和管理。 LanceDB的主要特点 LanceDB 的主要特点包括&#xff1a; 生产级向量搜索&#xff1a;无需管理服务器。 存储、查询和过滤向量、元数据以…...

嵌入式玩具--无人机字幕

day01 01-无人机-组成结构-上 哎&#xff0c;好&#xff0c;各位&#xff0c;那现在呢我们一起来看一下&#xff0c;就是咱们接下来要做的这个小项目啊。呃&#xff0c;当然这个名字有很多啊&#xff0c;就是这种飞行器有管&#xff0c;它叫四旋翼飞行器的&#xff0c;也有叫…...

CentOS7 安装配置FTP服务

CentOS7 安装配置FTP服务 CentOS7 安装配置FTP服务1. FTP简介2. 先行准备2.1 关闭防火墙2.2 关闭 SELinux 3.安装FTP软件包4. 创建 FTP 用户及目录4.1 创建 FTP 目录并设置权限4.2 防止 FTP 用户登录 Linux 终端4.3 创建 FTP 用户组及用户4.4 创建 FTP 可写目录 5. 配置ftp服务…...

几款dxf文件转Gcode的开源软件

以下是一些常用的开源软件,可以将DXF文件转换为Gcode: 1. **Inkscape with Gcode Tools** - **Inkscape** 是一款开源的矢量图形编辑器,支持DXF文件导入。通过安装 **Gcode Tools** 插件,可以将矢量图形转换为Gcode。 - 官网: [Inkscape](https://inkscape.org/) …...

【设计模式】03-理解常见设计模式-行为型模式(专栏完结)

前言 前面我们介绍完创建型模式和创建型模式&#xff0c;这篇介绍最后的行为型模式&#xff0c;也是【设计模式】专栏的最后一篇。 一、概述 行为型模式主要用于处理对象之间的交互和职责分配&#xff0c;以实现更灵活的行为和更好的协作。 二、常见的行为型模式 1、观察者模…...

【计算机网络】传输层数据段格式

在计算机网络中&#xff0c;数据段&#xff08;Segment&#xff09; 是传输层协议&#xff08;如 TCP 或 UDP&#xff09;使用的数据单元。TCP 和 UDP 的数据段格式有所不同&#xff0c;以下是它们的详细说明&#xff1a; 1. TCP 数据段格式 TCP&#xff08;传输控制协议&…...

编程题-最大子数组和(中等-重点【贪心、动态规划、分治思想的应用】)

题目&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 解法一&#xff08;枚举法-时间复杂度超限&#xff09;&#xff1a; …...

网络将内网服务转换到公网上

当然&#xff0c;以下是根据您提供的描述&#xff0c;对内网端口在公网上转换过程的详细步骤&#xff0c;并附上具体例子进行说明&#xff1a; 内网端口在公网上的转换过程详细步骤 1. 内网服务配置 步骤说明&#xff1a; 在内网中的某台计算机&#xff08;我们称之为“内网…...

本地通过隧道连接服务器的mysql

前言 服务器上部署了 mysql&#xff0c;本地希望能访问该 mysql&#xff0c;但是又不希望 mysql 直接暴露在公网上 那么可以通过隧道连接 ssh 端口的方式进行连接 从外网看&#xff0c;服务器只开放了一个 ssh 端口&#xff0c;并没有开放 3306 监听端口 设置本地免密登录 …...

跳跃游戏 II - 贪心算法解法

问题描述&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums&#xff0c;我们从数组的第一个元素 nums[0] 开始。每个元素 nums[i] 表示从索引 i 可以跳跃的最大长度&#xff0c;换句话说&#xff0c;从位置 i&#xff0c;你可以跳到位置 i j&#xff0c;其中 0 < j &…...

2. grafana插件安装并接入zabbix

一、在线安装 如果不指定安装位置&#xff0c;则默认安装位置为/var/lib/grafana/plugins 插件安装完成之后需要重启grafana 命令在上一篇讲到过 //查看相关帮助 [rootlocalhost ~]# grafana-cli plugins --help //从列举中的插件过滤zabbix插件 [rootlocalhost ~]# grafana…...

Linux第107步_Linux之PCF8563实验

使用PCF8563代替内核的RTC&#xff0c;可以降低功耗&#xff0c;提高时间的精度。同时有助于进一步熟悉I2C驱动的编写。 1、了解rtc_time64_to_tm()和rtc_tm_to_time64() 打开“drivers/rtc/lib.c” /* * rtc_time64_to_tm - Converts time64_t to rtc_time. * Convert seco…...