【RK3399 Android10, 支持温控风扇】

文章目录

  • 【RK3399 Android10, 支持温控风扇】
    • 需求描述
    • patch

【RK3399 Android10, 支持温控风扇】

需求描述

3399 Android10 的风扇,希望能做成温度控制的风扇,通过设置不同测温度阈值来实行不同的风速

patch

kernel

0020-feat-rochchip-system-monitor-add-temperature-notifye.patch

From 92116bdb9aa3efc280dd9c2699e8e82642860343 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Tue, 26 Dec 2023 15:50:42 +0800
Subject: [PATCH 20/24] feat: rochchip system monitor add temperature notifyerChange-Id: I8a561b9fdcaf4d15a8ee9e827eb3a350e342f55c
Signed-off-by: liangji <liangji@keenon.com>
---drivers/soc/rockchip/rockchip_system_monitor.c | 42 ++++++++++++++++++++++++--include/soc/rockchip/rockchip_system_monitor.h | 26 ++++++++++++++++2 files changed, 65 insertions(+), 3 deletions(-)diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c
index 8a84d02..fcd980be 100644
--- a/drivers/soc/rockchip/rockchip_system_monitor.c
+++ b/drivers/soc/rockchip/rockchip_system_monitor.c
@@ -64,6 +64,7 @@ struct system_monitor {struct thermal_zone_device *tz;struct delayed_work thermal_work;
+	int last_temp;int offline_cpus_temp;int temp_hysteresis;unsigned int delay;
@@ -84,6 +85,7 @@ static LIST_HEAD(monitor_dev_list);static struct system_monitor *system_monitor;static atomic_t monitor_in_suspend;+static BLOCKING_NOTIFIER_HEAD(system_monitor_notifier_list);static BLOCKING_NOTIFIER_HEAD(system_status_notifier_list);int rockchip_register_system_status_notifier(struct notifier_block *nb)
@@ -1167,6 +1169,31 @@ void rockchip_system_monitor_unregister(struct monitor_dev_info *info)}EXPORT_SYMBOL(rockchip_system_monitor_unregister);+int rockchip_system_monitor_register_notifier(struct notifier_block *nb)
+{
+	return blocking_notifier_chain_register(&system_monitor_notifier_list, nb);
+}
+EXPORT_SYMBOL(rockchip_system_monitor_register_notifier);
+
+void rockchip_system_monitor_unregister_notifier(struct notifier_block *nb)
+{
+	blocking_notifier_chain_unregister(&system_monitor_notifier_list, nb);
+}
+EXPORT_SYMBOL(rockchip_system_monitor_unregister_notifier);
+
+static int rockchip_system_monitor_temp_notify(int temp)
+{
+	struct system_monitor_event_data event_data;
+	int ret;
+
+	event_data.temp = temp;
+	ret = blocking_notifier_call_chain(&system_monitor_notifier_list,
+					   SYSTEM_MONITOR_CHANGE_TEMP,
+					   (void *)&event_data);
+
+	return notifier_to_errno(ret);
+}
+static int rockchip_system_monitor_parse_dt(struct system_monitor *monitor){struct device_node *np = monitor->dev->of_node;
@@ -1266,7 +1293,7 @@ static void rockchip_system_monitor_thermal_update(void){int temp, ret;struct monitor_dev_info *info;
-	static int last_temp = INT_MAX;
+	//static int last_temp = INT_MAX;ret = thermal_zone_get_temp(system_monitor->tz, &temp);if (ret || temp == THERMAL_TEMP_INVALID)
@@ -1274,9 +1301,15 @@ static void rockchip_system_monitor_thermal_update(void)dev_dbg(system_monitor->dev, "temperature=%d\n", temp);-	if (temp < last_temp && last_temp - temp <= 2000)
+	//if (temp < last_temp && last_temp - temp <= 2000)
+	if (temp < system_monitor->last_temp &&
+	    system_monitor->last_temp - temp <= 2000)goto out;
-	last_temp = temp;
+	//last_temp = temp;
+	system_monitor->last_temp = temp;
+
+	rockchip_system_monitor_temp_notify(temp);
+down_read(&mdev_list_sem);list_for_each_entry(info, &monitor_dev_list, node)
@@ -1379,6 +1412,8 @@ static int monitor_pm_notify(struct notifier_block *nb,if (system_monitor->tz)rockchip_system_monitor_thermal_update();atomic_set(&monitor_in_suspend, 0);
+		system_monitor->last_temp = INT_MAX;
+break;default:break;
@@ -1532,6 +1567,7 @@ static int rockchip_system_monitor_probe(struct platform_device *pdev)rockchip_system_monitor_parse_dt(system_monitor);if (system_monitor->tz) {
+		system_monitor->last_temp = INT_MAX;INIT_DELAYED_WORK(&system_monitor->thermal_work,rockchip_system_monitor_thermal_check);mod_delayed_work(system_freezable_wq,
diff --git a/include/soc/rockchip/rockchip_system_monitor.h b/include/soc/rockchip/rockchip_system_monitor.h
index 1f8bffc..bdc9a3f 100644
--- a/include/soc/rockchip/rockchip_system_monitor.h
+++ b/include/soc/rockchip/rockchip_system_monitor.h
@@ -6,11 +6,23 @@#ifndef __SOC_ROCKCHIP_SYSTEM_MONITOR_H#define __SOC_ROCKCHIP_SYSTEM_MONITOR_H+#include <linux/pm_opp.h>
+#include <linux/pm_qos.h>
+#include <linux/regulator/consumer.h>
+enum monitor_dev_type {MONITOR_TPYE_CPU = 0,	/* CPU */MONITOR_TPYE_DEV,	/* GPU, NPU, DMC, and so on */};+enum system_monitor_event_type {
+	SYSTEM_MONITOR_CHANGE_TEMP = 0,
+};
+
+struct system_monitor_event_data {
+	int temp;
+};
+struct volt_adjust_table {unsigned int min;	/* Minimum frequency in MHz */unsigned int max;	/* Maximum frequency in MHz */
@@ -127,6 +139,8 @@ int rockchip_monitor_dev_low_temp_adjust(struct monitor_dev_info *info,int rockchip_monitor_dev_high_temp_adjust(struct monitor_dev_info *info,bool is_high);int rockchip_monitor_suspend_low_temp_adjust(int cpu);
+int rockchip_system_monitor_register_notifier(struct notifier_block *nb);
+void rockchip_system_monitor_unregister_notifier(struct notifier_block *nb);introckchip_system_monitor_adjust_cdev_state(struct thermal_cooling_device *cdev,int temp, unsigned long *state);
@@ -177,6 +191,18 @@ static inline int rockchip_monitor_suspend_low_temp_adjust(int cpu)};static inline int
+rockchip_system_monitor_register_notifier(struct notifier_block *nb)
+{
+	return 0;
+};
+
+static inline void
+rockchip_system_monitor_unregister_notifier(struct notifier_block *nb)
+{
+};
+
+
+static inline introckchip_system_monitor_adjust_cdev_state(struct thermal_cooling_device *cdev,int temp, unsigned long *state){
-- 
2.7.4

0021-feat-rockchip-system-status-use-IS_REACHABLE.patch

From a5b79acc99fe356dba8f3a51ee7918bfb885b679 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Tue, 26 Dec 2023 16:00:13 +0800
Subject: [PATCH 21/24] feat: rockchip system status use IS_REACHABLEChange-Id: I62e6deba1e511d14a3c11431fd04fcfcde65d5c3
Signed-off-by: liangji <liangji@keenon.com>
---include/soc/rockchip/rockchip-system-status.h | 3 ++-1 file changed, 2 insertions(+), 1 deletion(-)diff --git a/include/soc/rockchip/rockchip-system-status.h b/include/soc/rockchip/rockchip-system-status.h
index 200b1ee..de639b9 100644
--- a/include/soc/rockchip/rockchip-system-status.h
+++ b/include/soc/rockchip/rockchip-system-status.h
@@ -6,7 +6,8 @@#ifndef __SOC_ROCKCHIP_SYSTEM_STATUS_H#define __SOC_ROCKCHIP_SYSTEM_STATUS_H-#if IS_ENABLED(CONFIG_ROCKCHIP_SYSTEM_MONITOR)
+//#if IS_ENABLED(CONFIG_ROCKCHIP_SYSTEM_MONITOR)
+#if IS_REACHABLE(CONFIG_ROCKCHIP_SYSTEM_MONITOR)int rockchip_register_system_status_notifier(struct notifier_block *nb);int rockchip_unregister_system_status_notifier(struct notifier_block *nb);void rockchip_set_system_status(unsigned long status);
-- 
2.7.4

0022-feat-hwmon-pwm-fan-add-system-monitor-notifyer.patch

From bf6df7f1173b10fadcd56ba8f9e3a357cf6613a0 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Tue, 26 Dec 2023 16:10:13 +0800
Subject: [PATCH 22/24] feat: hwmon pwm fan add system monitor notifyerChange-Id: Iaf0483d68ed46000d6eb43b3d41a34f7b4b55f4e
Signed-off-by: liangji <liangji@keenon.com>
---.../devicetree/bindings/hwmon/pwm-fan.txt          |   5 +drivers/hwmon/pwm-fan.c                            | 114 ++++++++++++++++++++-2 files changed, 117 insertions(+), 2 deletions(-)diff --git a/Documentation/devicetree/bindings/hwmon/pwm-fan.txt b/Documentation/devicetree/bindings/hwmon/pwm-fan.txt
index c6d5332..282bca2 100644
--- a/Documentation/devicetree/bindings/hwmon/pwm-fan.txt
+++ b/Documentation/devicetree/bindings/hwmon/pwm-fan.txt
@@ -5,6 +5,11 @@ Required properties:- pwms		: the PWM that is used to control the PWM fan- cooling-levels      : PWM duty cycle values in a range from 0 to 255which correspond to thermal cooling states
+- rockchip,temp-trips	: The property is an array of 2-tuples items, and
+			  each item consists of temperature in millicelsius and
+			  pwm cooling state. This depends on CONFIG_ROCKCHIP_SYSTEM_MONITOR.
+			  If add the property the fan cooling state will be changed
+			  by system monitor. Otherwise, use the default thermal governor.Example:fan0: pwm-fan {
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
index db0d15c..5ba1820 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -25,9 +25,15 @@#include <linux/pwm.h>#include <linux/sysfs.h>#include <linux/thermal.h>
+#include <soc/rockchip/rockchip_system_monitor.h>#define MAX_PWM 255+struct thermal_trips {
+	int temp;
+	int state;
+};
+struct pwm_fan_ctx {struct mutex lock;struct pwm_device *pwm;
@@ -36,6 +42,9 @@ struct pwm_fan_ctx {unsigned int pwm_fan_max_state;unsigned int *pwm_fan_cooling_levels;struct thermal_cooling_device *cdev;
+	struct notifier_block thermal_nb;
+	struct thermal_trips *thermal_trips;
+	bool thermal_notifier_is_ok;};static int  __set_pwm(struct pwm_fan_ctx *ctx, unsigned long pwm)
@@ -205,6 +214,95 @@ static int pwm_fan_of_get_cooling_data(struct device *dev,return 0;}+static int pwm_fan_get_thermal_trips(struct device *dev, char *porp_name,
+				     struct thermal_trips **trips)
+{
+	struct device_node *np = dev->of_node;
+	struct thermal_trips *thermal_trips;
+	const struct property *prop;
+	int count, i;
+
+	prop = of_find_property(np, porp_name, NULL);
+	if (!prop)
+		return -EINVAL;
+	if (!prop->value)
+		return -ENODATA;
+	count = of_property_count_u32_elems(np, porp_name);
+	if (count < 0)
+		return -EINVAL;
+	if (count % 2)
+		return -EINVAL;
+	thermal_trips = devm_kzalloc(dev,
+				     sizeof(*thermal_trips) * (count / 2 + 1),
+				     GFP_KERNEL);
+	if (!thermal_trips)
+		return -ENOMEM;
+
+	for (i = 0; i < count / 2; i++) {
+		of_property_read_u32_index(np, porp_name, 2 * i,
+					   &thermal_trips[i].temp);
+		of_property_read_u32_index(np, porp_name, 2 * i + 1,
+					   &thermal_trips[i].state);
+	}
+	thermal_trips[i].temp = 0;
+	thermal_trips[i].state = INT_MAX;
+
+	*trips = thermal_trips;
+
+	return 0;
+}
+
+static int pwm_fan_temp_to_state(struct pwm_fan_ctx *ctx, int temp)
+{
+	struct thermal_trips *trips = ctx->thermal_trips;
+	int i, state = 0;
+
+	for (i = 0; trips[i].state != INT_MAX; i++) {
+		if (temp >= trips[i].temp)
+			state = trips[i].state;
+	}
+
+	return state;
+}
+
+static int pwm_fan_thermal_notifier_call(struct notifier_block *nb,
+					 unsigned long event, void *data)
+{
+	struct pwm_fan_ctx *ctx = container_of(nb, struct pwm_fan_ctx, thermal_nb);
+	struct system_monitor_event_data *event_data = data;
+	int state, ret;
+
+	if (event != SYSTEM_MONITOR_CHANGE_TEMP)
+		return NOTIFY_OK;
+
+	state = pwm_fan_temp_to_state(ctx, event_data->temp);
+	if (state > ctx->pwm_fan_max_state)
+		return NOTIFY_BAD;
+	if (state == ctx->pwm_fan_state)
+		return NOTIFY_OK;
+
+	ret = __set_pwm(ctx, ctx->pwm_fan_cooling_levels[state]);
+	if (ret)
+		return NOTIFY_BAD;
+
+	ctx->pwm_fan_state = state;
+
+	return NOTIFY_OK;
+}
+
+static int pwm_fan_register_thermal_notifier(struct device *dev,
+					     struct pwm_fan_ctx *ctx)
+{
+	if (pwm_fan_get_thermal_trips(dev, "rockchip,temp-trips",
+				      &ctx->thermal_trips))
+		return -EINVAL;
+
+	ctx->thermal_nb.notifier_call = pwm_fan_thermal_notifier_call;
+
+	return rockchip_system_monitor_register_notifier(&ctx->thermal_nb);
+}
+
+static int pwm_fan_probe(struct platform_device *pdev){struct thermal_cooling_device *cdev;
@@ -257,6 +355,16 @@ static int pwm_fan_probe(struct platform_device *pdev)goto err_pwm_disable;ctx->pwm_fan_state = ctx->pwm_fan_max_state;
+	if (IS_REACHABLE(CONFIG_ROCKCHIP_SYSTEM_MONITOR) &&
+	    of_find_property(dev->of_node, "rockchip,temp-trips", NULL)) {
+		ret = pwm_fan_register_thermal_notifier(dev, ctx);
+		if (ret)
+			dev_err(dev, "Failed to register thermal notifier: %d\n", ret);
+		else
+			ctx->thermal_notifier_is_ok = true;
+		return 0;
+	}
+if (IS_ENABLED(CONFIG_THERMAL)) {cdev = thermal_of_cooling_device_register(pdev->dev.of_node,"pwm-fan", ctx,
@@ -299,7 +407,8 @@ static int pwm_fan_suspend(struct device *dev)pwm_get_args(ctx->pwm, &args);-	if (ctx->pwm_value) {
+	//if (ctx->pwm_value) {
+	if (ctx->pwm_value || ctx->thermal_notifier_is_ok) {ret = pwm_config(ctx->pwm, 0, args.period);if (ret < 0)return ret;
@@ -317,7 +426,8 @@ static int pwm_fan_resume(struct device *dev)unsigned long duty;int ret;-	if (ctx->pwm_value == 0)
+	//if (ctx->pwm_value == 0)
+	if (ctx->pwm_value == 0 && !ctx->thermal_notifier_is_ok)return 0;pwm_get_args(ctx->pwm, &pargs);
-- 
2.7.4

0023-feat-support-system-monitor-pwm-fan.patch

From 1cf46863c45c54007f1b4b9acf541781f138b215 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Tue, 26 Dec 2023 16:59:57 +0800
Subject: [PATCH 23/24] feat: support system monitor pwm fanChange-Id: Id40a42b3f2d185a9c6c5054125e4566b91c6c784
Signed-off-by: liangji <liangji@keenon.com>
---arch/arm64/boot/dts/rockchip/rk3399-keenon-common.dtsi | 14 ++++++++++++++arch/arm64/boot/dts/rockchip/rk3399-keenon-w3s.dts     |  4 ++++arch/arm64/configs/keenon_tablet_w3s_defconfig         |  1 +drivers/hwmon/pwm-fan.c                                |  6 +++---4 files changed, 22 insertions(+), 3 deletions(-)diff --git a/arch/arm64/boot/dts/rockchip/rk3399-keenon-common.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-keenon-common.dtsi
index fae2f81..33a10a4 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-keenon-common.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-keenon-common.dtsi
@@ -254,6 +254,20 @@compatible = "fake,battery";status = "okay";};
+
+    fan: pwm-fan {
+        compatible = "pwm-fan";
+        #cooling-cells = <2>;
+        pwms = <&pwm3 0 50000 0>;
+        cooling-levels = <0 50 100 150 200 255>;
+        rockchip,temp-trips = <
+                50000   1
+                60000   2
+                70000   3
+                80000   4
+                100000   5
+        >;
+    };};&backlight {
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-keenon-w3s.dts b/arch/arm64/boot/dts/rockchip/rk3399-keenon-w3s.dts
index 7a47c04..b8a2637 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-keenon-w3s.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-keenon-w3s.dts
@@ -18,6 +18,10 @@status = "okay";};+&pwm3{
+	status = "okay";
+};
+&backlight {enable-gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;pinctrl-names = "default";
diff --git a/arch/arm64/configs/keenon_tablet_w3s_defconfig b/arch/arm64/configs/keenon_tablet_w3s_defconfig
index 89c6e3c..db151c1 100644
--- a/arch/arm64/configs/keenon_tablet_w3s_defconfig
+++ b/arch/arm64/configs/keenon_tablet_w3s_defconfig
@@ -27,6 +27,7 @@ CONFIG_NAMESPACES=y# CONFIG_PID_NS is not setCONFIG_SCHED_TUNE=yCONFIG_BLK_DEV_INITRD=y
+CONFIG_SENSORS_PWM_FAN=y# CONFIG_RD_BZIP2 is not set# CONFIG_RD_LZMA is not set# CONFIG_RD_XZ is not set
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
index 5ba1820..0d3674d 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -356,10 +356,10 @@ static int pwm_fan_probe(struct platform_device *pdev)ctx->pwm_fan_state = ctx->pwm_fan_max_state;if (IS_REACHABLE(CONFIG_ROCKCHIP_SYSTEM_MONITOR) &&
-	    of_find_property(dev->of_node, "rockchip,temp-trips", NULL)) {
-		ret = pwm_fan_register_thermal_notifier(dev, ctx);
+	    of_find_property(pdev->dev.of_node, "rockchip,temp-trips", NULL)) {
+		ret = pwm_fan_register_thermal_notifier(&pdev->dev, ctx);if (ret)
-			dev_err(dev, "Failed to register thermal notifier: %d\n", ret);
+			dev_err(&pdev->dev, "Failed to register thermal notifier: %d\n", ret);elsectx->thermal_notifier_is_ok = true;return 0;
-- 
2.7.4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git如何在忘记pull的情况下push了代码导致的冲突

在忘记pull的情况下push代码导致冲突时&#xff0c;可以按照以下步骤解决问题&#xff1a; 首先&#xff0c;确认你的本地分支和远程分支之间存在冲突。可以通过执行git status命令查看冲突文件列表。 确定冲突文件后&#xff0c;打开这些文件并找到冲突的部分。冲突的部分会以…

go-carbon v2.3.8 发布,轻量级、语义化、对开发者友好的 golang 时间处理库

carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库&#xff0c;支持链式调用。 目前已被 awesome-go 收录&#xff0c;如果您觉得不错&#xff0c;请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…

【算法题】93. 复原 IP 地址

题目 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.011…

红队打靶练习:HEALTHCARE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 gobuster cms sqlmap 爆库 爆表 爆列 爆字段 FTP 提权 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Inte…

LoRA:语言模型微调的计算资源优化策略

编者按&#xff1a;随着数据量和计算能力的增加&#xff0c;大模型的参数量也在不断增加&#xff0c;同时进行大模型微调的成本也变得越来越高。全参数微调需要大量的计算资源和时间&#xff0c;且在进行切换下游任务时代价高昂。 本文作者介绍了一种新方法 LoRA&#xff0c;可…

Java LinkedList 实现栈和队列

Java LinkedList 实现栈和队列 package com.zhong.collection;import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {// LinkedList 创建一个队列LinkedList<String> queue new LinkedList<>();// 进队System.out…

2024年【A特种设备相关管理(电梯)】考试题及A特种设备相关管理(电梯)模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;电梯&#xff09;考试题是安全生产模拟考试一点通生成的&#xff0c;A特种设备相关管理&#xff08;电梯&#xff09;证模拟考试题库是根据A特种设备相关管理&#xff08;电梯&#xff…

BC107 矩阵转置

描述 KiKi有一个矩阵&#xff0c;他想知道转置后的矩阵&#xff08;将矩阵的行列互换得到的新矩阵称为转置矩阵&#xff09;&#xff0c;请编程帮他解答。 输入描述&#xff1a; 第一行包含两个整数n和m&#xff0c;表示一个矩阵包含n行m列&#xff0c;用空格分隔。 (1≤n≤…

UML之在Markdown中使用Mermaid绘制类图

1.UML概述 UML&#xff08;Unified modeling language UML&#xff09;统一建模语言&#xff0c;是一种用于软件系统分析和设计的语言工具&#xff0c;它用于帮助软件开发人员进行思考和记录思路。 类图是描述类与类之间的关系的&#xff0c;是UML图中最核心的。类图的是用于…

【Java数据结构】单向 不带头 非循环 链表实现

模拟实现LinkedList&#xff1a;下一篇文章 LinkedList底层是双向、不带头结点、非循环的链表 /*** LinkedList的模拟实现*单向 不带头 非循环链表实现*/ class SingleLinkedList {class ListNode {public int val;public ListNode next;public ListNode(int val) {this.val …

安全通信设置:使用 OpenSSL 为 Logstash 和 Filebeat 提供 SSL 证书

在为 Elasticsearch 采集数据时&#xff0c;我们经常使用到 Filebeat 及 Logstash。在我们之前的很多教程中&#xff0c;我们通常不为 Filebeat 和 Logstash 之前的通信做安全配置。 如何为 Filebeat 及 Logstash 直接建立安全的链接&#xff1f;这个在很多的情况下是非常有用的…

Python算法题集_环形链表

Python算法题集_环形链表 题234&#xff1a;环形链表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【集合检索】2) 改进版一【字典检测】3) 改进版二【双指针】 4. 最优算法 本文为Python算法题集之一的代码示例 题234&#xff1a;环形链表 …

分享64个节日PPT,总有一款适合您

分享64个节日PPT&#xff0c;总有一款适合您 64个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/190YgEPzmbvopsht-n7YhpQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

Django模板(一)

一、基本规则 作为一个Web框架,Django需要一种方便的方式来动态生成HTML。最常用的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述如何插入动态内容的特殊语法 1.1、django默认模板 在settings中配置: TEMPLATES = [{BACKEND: django.template.backends.django.…

Axios设置token到请求头的三种方式

1、为什么要携带token? 用户登录时&#xff0c;后端会返回一个token&#xff0c;并且保存到浏览器的localstorage中&#xff0c;可以根据localstorage中的token判断用户是否登录&#xff0c;登录后才有权限访问相关的页面&#xff0c;所以当发送请求时&#xff0c;都要携带to…

时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-GRU-AdaBo…

[Linux] 网络编程套接字

目录 预备知识 网络字节序 网络字节序和主机字节序转换的库函数 socket编程接口 socket常见API sockaddr结构 套接字的种类 预备知识 1.在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 2.端口号&#xff1a;是传输层协议的内容…

Flink面试准备

零. 主要内容 一. Flink 提交 1. Flink怎么提交? Local模式 JobManager 和 TaskManager 共用一个 JVM,只需要jdk支持&#xff0c;单节点运行&#xff0c;主要用来调试。 Standlone模式 Standlone 是Flink自带的一个分布式集群&#xff0c;它不依赖其他的资源调度框架、不依赖y…

elastic-job VS xxl-job

1、Elastic-job介绍 Elastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 &#xff0c; 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。Elastic-Job-Lite定位为轻量级无中心化解决方案&#xff0c;使用jar包的形式提供分布式任务的协调服务…

爱上算法:每日算法(24-2月5号)

&#x1f31f;坚持每日刷算法&#xff0c;&#x1f603;将其变为习惯&#x1f91b;让我们一起坚持吧&#x1f4aa; 题目链接&#xff1a;343. 整数拆分 这道题要求一个数拆几个整数之后乘积最大。 首先就想&#xff0c;怎么拆呢&#xff1f; 可以一个数拆违两个整数&#xf…