迅为RK3576开发板Android 多屏显示

news2025/1/20 7:02:37

迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片,集成了4个Cortex-A72和4个Cortex-A53核心,以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。

 

1.1 Android 多屏同显

iTOP-RK3576 开发板支持以下屏幕

迅为 MIPI 7 寸屏幕

标准 HDMI 屏幕(通过 HDMI 线连接)

迅为 LVDS 7 寸屏幕

迅为 LVDS 10.1 寸 1024*600 屏幕

迅为 LVDS 10.1 寸 1280*800 屏幕

然后修改 Android 源码 kernel-6.1/arch/arm64/boot/dts/rockchip/topeet-screen-lcds.dtsi 中的

设备树文件,如下图所示。LVDS 屏幕是 MIPI 通过转接板连接显示的,RK3576 不支持 LVDS

显示接口。

 

我们可以根据自己的需求来修改 topeet-screen-lcds.dtsi 文件。总之,修改

topeet_screen_choose.dtsi 的规律是:打开所连接的屏幕对应的宏定义,rk3576 有三个显示通

道 vp0 vp1 vp2,所打开的宏定义对应的 vp 通道不能重复。默认打开对应的宏定义为多屏同显。

如果打开的宏定义是#define LCD_TYPE_LVDS_10_1_1280x800_GT9271, 需要将

kernel-6.1/arch/arm64/configs/rockchip_defconfig 文件中的

CONFIG_TOUCHSCREEN_GT9271=y 宏定义使能,然后再编译源码。

如果打开的宏定义是#define LCD_TYPE_LVDS_10_1_1024x600_GT911,需要将

kernel-6.1/arch/arm64/configs/rockchip_defconfig 文件中的 CONFIG_TOUCHSCREEN_GT9XX

宏定义使能,然后再编译源码。

1.2 Android 多屏异显

如果要支持多屏异显,首先要调试好双屏或多屏都可以正常显示,并且分别挂载在不同的

vp 上,可以参考上一个小节根据自己的需求打开 topeet-screen-lcds.dtsi 设备树中的宏定义。默

认开启后,多屏显示的是同一个画面(如果要支持双屏或者多屏异显,需要应用支持异显,才会显示不同的内容)。查看当前的屏幕显示状态输入以下命令

cat /sys/kernel/debug/dri/0/summary

如果双屏或者多屏的显示器分辨率比例不同,比如说主屏是 16:9,副屏是 4:3,那么副

屏显示的画面会拉伸或者缩小,原因是副屏的画面是主屏映射过去的,所以副屏上显示的是

主屏的分辨率。如果同样的屏幕情况下,应用支持异显,那么副屏会显示实际正常的分辨率。

所以如果要支持双屏或者多屏同显并要求显示正常,双屏或者多屏的屏幕的分辨率比要一致。

1.2.1 指定主副屏

多屏异显的实际应用中,需要指定哪个是主屏,哪个是副屏。修改 Android14 源码目录下

rk3576_android14/device/rockchip/rk3576/topeet_rk3576/topeet_rk3576.mk 文件,添加如下内容:

如果要指定 MIPI 屏幕为主屏,HDMI 屏幕为副屏,如下设置:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A

如果要指定 MIPI 屏幕为主屏,EDP 屏幕为副屏,如下设置:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=eDP

如果需要定义多个主副屏时,需要用逗号隔开,比如指定 MIPI eDP 为主屏,HDMI-A 为副屏,

设置如下:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI,eDP

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A

1.2.2 异显方案介绍

目前有两种异显方案分别是 Android Presentation 和 Andorid Activity 指定屏幕启动 。

Android Presentation,需要 APP 应用开发中调用相应接口使指定的 view (Presentation

view 是一个特殊的 dialog 类型 view)在副屏中显示。

Android Activity 指定屏幕启动,APP 在启动 activity 时可以使用 display id 参数在对应

的屏幕上直接显示。

两者主要区别在:

1 前者的 acitivity 需要独立开发,把需要显示的内容投到副屏,后者可以不需要源码,调用命令行或者系统接口把第三方 app 的 acitivity 投送到副屏;

2 .前者只有一个 activity 在顶层,通过特殊的 dialog 将指定内容显示在副屏,后者是两

个 activity 分别显示在主副屏。

接下来我们详细讲述这俩种方法。

1.2.3 Android Presentation

本小节讲解 Android Presentation 异显方案,瑞芯微和迅为提供了使用 Android Presentation

编写好的 APP 例程,接下来进行测试。

1.2.3.1 ApiDemos APP

在 Android12 源码中瑞芯微已经提供了使用 Presentation 接口的测试 APP,在源码

development/samples/ApiDemos 目录下,需要使用 mm 命令编译 APP。迅为提供了编译好的

测试 APP 在网盘资料“iTOP-RK3576 开发板/02_【iTOP-RK3576 开发板】/07_多屏显示配套

资料/Android/ApiDemosAPK”目录下。

此 APP 源码在 Android 源码 rk3576_android14/development/samples/ApiDemos 目录下,进

入此目录,输入“mm”命令进行编译,如下图所示:

 

然后使用 adb 命令安装 APP,依次点击 App->Activity->Presentation 选项,即可进入

Presentation 调用界面。如下图所示:

 

在该界面需点击如下副屏的 checkbox 选项,即可在副屏显示相应图片。如下所示:

 

副屏 HDMi 屏幕显示图片,如下所示:

 

1.2.3.2 Presentation sampleAPP

此 APP 在网盘资料“iTOP-RK3576 开发板/02_【iTOP-RK3576 开发板】/07_多屏显示配

套资料/Android/Presentation-sample”目录下,下载此 APP 工程,然后用 Androidstudio 打开,

并编译 apk。编译成功之后,安装 APP,APP 安装成功之后如下图所示:

 

打开 APP 如下图所示:

 

点击“显示副屏”按钮,会在副屏显示,如下图所示:

 

APP 重要知识点讲解:

随着用户的需求增多,特别是对于一些 Android 平板电脑以及其他的一些 Android 智能设

备可能有多个屏幕,用户不仅想要在主屏幕上显示内容,同样在第二屏幕上也要显示想要的

内容,这样可以达到更好的体验效果。Google 也是不负众望在 Android4.2 版本以后提供了

Presentation 类,可以轻松实现在两块屏幕上同时显示不同的内容。Presentation 是一个特殊的

dialog,它的目的是显示内容到第二屏幕。在 Presentation 创建的时候关联一个目标设备,确

定 Presentation 要显示在那个设备上,根据这个设备的信息来配置 Presentation 的 context 和

resources 信息。目前系统提供了两种方式来与目标显示屏进行绑定。

1 通过 MediaRouter 接口获取并绑定:

选择显示 presentation 的设备最简单的方法就是使用 Media Router,media router 服务持续

追踪在系统中哪个音频、视频线路是可用的,当 routes 被选择或者不被选择,或者更好的显

示 presentation display 的线路发生改变后 media router 就会发送消息。所以一些应用程序可以

自动监视这些消息来在首选设备上显示或取消 presentation。

首选显示 presentation 的设备是 Media Router 进行推荐的,如果应用想要显示内容在第二

屏幕上就该使用该设备。下面将给出如何使用 media router 在主屏的设备创建和显示

presentation。

MediaRouter mediaRouter =(MediaRouter)

context.getSystemService(Context.MEDIA_ROUTER_SERVICE); MediaRouter.RouteInfo route =

mediaRouter.getSelectedRoute();

if(route !=null){

Display presentationDisplay = route.getPresentationDisplay();

if(presentationDisplay !=null){

Presentation presentation =newMyPresentation(context, presentationDisplay);

presentation.show();

}

}

根据上面代码可以看出通过系统服务 Media Router 来选择一个合适的 route,从 route 中来

获取首选的 display,如果 display 不为空就会创建该 presentation,创建完成后调用 presentation

的 show 方法将该 presentation 显示出来。

2 通过 DisplayManager 接口获取并绑定

另外一个获取首选 display 的方法是直接使用 display Manager 来获取。display manager 服

务提供方法枚举和描述系统中所有的设备,包括可以显示 presentation 的设备。display manager

持续追踪系统中所有的设备,然而,并不是所有的设备都适合显示 presentation,例如,如果

一个 Activity 试图在主屏幕上显示一个 presentation,它可能会掩盖自己的内容,这就像在

Activity 上打开一个 dialog 一样。

DisplayManager displayManager =(DisplayManager)

context.getSystemService(Context.DISPLAY_SERVICE); Display[] presentationDisplays

=displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);

if(presentationDisplays.length >0){

// If there is more than one suitable presentation display, then we could consider

// giving the user a choice. For this example, we simply choose the first display

// which is the one the system recommends as the preferred presentation display.

Display display = presentationDisplays[1]; // displays[1]是副屏

Presentation presentation =new MyPresentation(context, presentationDisplay);

presentation.show();

}

根据上面代码可以看出通过系统服务 Display Manager 来获取所有适合显示 presentation 的

display 列表,如果获取到了多个适合 display 对象,我们选择副屏的 display。最后显示

presentation。

1.2.4 Android Activity 指定屏幕启动

本小节讲解 Android Activity 指定屏幕启动异显方案,瑞芯微提供了使用 Android Activity

指定屏幕启动编写好的 APP 例程,接下来进行测试。

1.2.4.1 dualscreendemo APP

RK DualScreen 主要区别与 android presentation,在于它实现了应用的派发,允许厂商快

速根据现有的 app 功能,进行模块的集成,减少开发周期和研发成本。示例代码为

DualScreenDemo.zip 工程,在网盘资料“iTOP-RK3576 开发板/02_【iTOP-RK3576 开发板】/07_

多屏显示配套资料/Android/DualScreenDemo”目录下下载。

使用 Androidstudio 打开此工程代码,编译安装 APP,安装完成后如下所示:

打开此 APP,如下所示,有三个按钮。

第三个按钮使用了 Android Activity 指定屏幕启动,关键代码如下所示,第一个和第二个

按钮使用了 Presentation。

private void showSecondByActivity(Context context){

ActivityOptions options = ActivityOptions.makeBasic();

MediaRouter mediaRouter = (MediaRouter)

context.getSystemService(Context.MEDIA_ROUTER_SERVICE);

MediaRouter.RouteInfo route =

mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);

if (route != null) {

Display presentationDisplay = route.getPresentationDisplay();

options.setLaunchDisplayId(presentationDisplay.getDisplayId());

Intent intent = new Intent("android.intent.action.MUSIC_PLAYER");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent, options.toBundle());

}

}

在 startActivity 接口参数中设置指定屏幕的 display id,Activity 将在指定屏幕上直接启

动显示。

Activity 的多显示器支持需要设备支持<feature

name="android.software.activities_on_secondary_displays" />。

同时 application 或者 activity 需要支持分屏属性即<application>或者<activity>标签下设

置新的属性 android:resizeableActivity="true",这个属性在你 target 到 Android N 后

android:resizeableActivity 的默认值就是 true。

ActivityOptions 提供两个新函数以支持多个显示器,分别是 setLaunchDisplayId()和

getLaunchDisplayId()。

setLaunchDisplayId() 指定 Activity 在启动后应显示在哪个显示器上。

getLaunchDisplayId() 返回操作组件的当前启动显示器。

在上述代码中使用 MediaRouter 接口获取副屏的 display id,同理也可以使用

DisplayManager 接口获取响应的 display id。

1.2.5 支持输入法在副屏显示

修改 Android14 源码下的 device/rockchip/common/display_settings.xml 文件,如下所示:

将设置相应屏幕 shouldShowIme 为 true,如上配置支持输入法在 local:1 的副屏上显示。

1.2.6 副屏 DPI 设置

修改 Android14 源码下的 device/rockchip/common/display_settings.xml 文件,如下所示:

修改 forcedDensity 的值可以修改副屏的屏幕密度。

1.2.7 主屏幕可以触摸,副屏不触摸

如果想要实现主屏可以触摸,副屏不用触摸的功能。有两种解决方式:第一种是在 App

应用代码中实现。第二种需要修改 framework 层的源码。

第一种方式:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,

WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

第二种方式:

修改 Android14 源码 frameworks/native/services/inputflinger/reader/EventHub.cpp 文件,屏蔽掉 device->classes |= InputDeviceClass::EXTERNAL;属性,如下图所示:

1.2.8 多屏异触

多屏异触需要指定主副屏。这里使用修改 Android 源码的方式实现绑定副屏触摸芯片。这

样设置以后,系统开机会自动将 ft5x06 触摸绑定到副屏上面去。修改文件:

frameworks/native/services/inputflinger/reader/EventHub.cpp,添加如下加红的代码。通过修改

EventHub.cpp 文件,在 isExternalDeviceLocked 函数中判断设备名称为指定的副屏设备(比如

副屏的设备名称是 generic ft5x06 (79)),则返回 true。

bool EventHub::Device::isExternalDeviceLocked() {

const char *I2C_DEVICE_NAME = "generic ft5x06 (79)";

ALOGE("input deviceis '%s' ",device->identifier.name.c_str());

if (strcmp(device->identifier.name.c_str(), I2C_DEVICE_NAME) == 0) {

return true;

}

if (configuration) {

std::optional<bool> isInternal = configuration->getBool("device.internal");

if (isInternal.has_value()) {

return !isInternal.value();

}

}

return identifier.bus == BUS_USB || identifier.bus == BUS_BLUETOOTH;

}

这里的 I2C_DEVICE_NAME 需要根据实际情况添加,用户可根据 ALOGE 打印信息在

logcat 中寻找识别到的芯片实际的名字。下面是添加了 ALOGE 打印信息后在 logcat 中得到的

设备名字的截图:

上图中的 goodix-ts 和 generic ft5x06 (79)即为这里使用的触摸 IC 芯片的名字,将这个复制

到代码中即可。修改完毕,重新编译Android镜像,用户测试的时候可以直接使用ApiDemo APP

进行测试。

1.2.9 鼠标异屏切换

在多屏异显情况下,修改以下代码使鼠标箭头可以移动到需要的副屏上去进行操作。

我们需要修改 Android14 源码中

frameworks/native/services/inputflinger/reader/mapper/CursorInputMapper.cpp 文件

搜索"sys.mouse.presentation",然后将下面的代码中 0 改为 1。

//-----rk-code----

char mMousePresentation[PROPERTY_VALUE_MAX] = {1};

property_get("sys.mouse.presentation", mMousePresentation, "1");

if (strcmp(mMousePresentation, "1") == 0) {

if (std::optional<FloatRect> rect = mPointerController->getBounds();

rect.has_value()) {

if(xCursorPosition==rect->left||xCursorPosition==rect->right||yCursorPosition==rect->top||yCursor

Position==rect->bottom){

mDisplayId=getPolicy()->notifyDisplayIdChanged();

}

}

}else{

mDisplayId = mPointerController->getDisplayId();

}

然后重新编译 Android 源码,然后烧写镜像。
1.2.10 副屏显示配置

1.2.10.1 副屏全屏显示

设置副屏(副屏 1、副屏 2 等)是否全屏显示可通过修改 persist.sys.rotation.efull-n(n=1、

2、3、….)参数的取值进行配置,若配置为 true 则会进行全屏显示。

现以 MIPI 主屏、 HDMI 副 屏 为 例 ,修改如下:

在 device/rockchip/rk3576/topeet_rk3576/topeet_rk3576.mk 文件中添加如下内容,使得

HDMI 副屏可以全屏显示(由于副屏图像参考主屏宽高比进行缩放,若宽高比不一致,则出

现黑边,所以默认 HDMI 副屏显示会有黑边):

PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.efull-1=true

修改完成后,保存退出,重新编译烧写镜像即可。

注:由于 mipi 竖屏显示与 HDMI 宽高比相差较大,HDMI 设置全屏显示后拉伸较明显!

1.2.10.2 副屏显示方向

副屏的旋转角度可通过 persist.sys.rotation.einit-n(n=1、2、3、….)属性控制,该属性用

于设置副屏(副屏 1、副屏 2 等)的显示方向,可取值为 0/1/2/3,分别表示将副屏显示方

向旋转(顺时针)0 度、90 度、180 度、270 度。

现以 MIPI 主屏、 HDMI 副 屏 为 例 ,修改如下:

在 device/rockchip/rk3576/topeet_rk3576/topeet_rk3576.mk 文件中添加如下内容,使得

HDMI 副屏的显示方向旋转 90 度:

PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.einit-1=1

PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.efull-1=false

 

修改完成后,保存退出,重新编译烧写镜像即可,HDMI 会旋转 90°竖屏显示。

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

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

相关文章

gather算子的CUDA编程和算子测试

知乎介绍参考添加链接描述 完整测试框架参考本人仓库 添加链接描述 gather算子的onnx定义参考添加链接描述,该算子的主要变换参考下图: 这里我们不妨以input = [A, dimsize, D], indices = [B,C], axis = 1举例子,此时对应的output形状是[A,B,C,D],并且根据gather算子定…

深度学习 Pytorch 张量的线性代数运算

pytorch中并未设置单独的矩阵对象类型&#xff0c;因此pytorch中&#xff0c;二维张量就相当于矩阵对象&#xff0c;并且拥有一系列线性代数相关函数和方法。 在实际机器学习和深度学习建模过程中&#xff0c;矩阵或者高维张量都是基本对象类型&#xff0c;而矩阵所涉及到的线…

Linux下构建OpenEuler22.03+Nginx的Docker镜像

1. 制作OpenEuler22.03的Docker镜像 首先&#xff0c;下载OpenEuler20.03的镜像压缩包&#xff1a; 下载链接为&#xff1a; https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS/docker_img/x86_64/openEuler-docker.x86_64.tar.xz 这里我们可以顺便下载一下对应的…

Coder星球-测试用例设计

项目介绍 Coder星球是一个前后端分离的开源技术交流平台&#xff0c;包括管理后台和web前端&#xff0c;旨在打造一个互相交流技术并共同进步的平台。 项目功能结构图 测试用例 1.登录 2.注册 3.文章发布 4.点赞 5.评论

wow-agent---task2使用llama-index创建Agent

一&#xff1a;创造俩个函数&#xff0c;multiply和add作为fuction calling被LLM当做工具来使用&#xff0c;实现计算一个简单的计算题&#xff1a; from llama_index.llms.ollama import Ollama from llama_index.core.agent import ReActAgent from llama_index.core.tools …

React的应用级框架推荐——Next、Modern、Blitz等,快速搭建React项目

在 React 企业级应用开发中&#xff0c;Next.js、Modern.js 和 Blitz 是三个常见的框架&#xff0c;它们提供了不同的特性和功能&#xff0c;旨在简化开发流程并提高应用的性能和扩展性。以下是它们的详解与比较&#xff1a; Next、Modern、Blitz 1. Next.js Next.js 是由 Ve…

Git - 将指定文件夹或文件忽略(无论添加缓存区或提交都不会显示)

前言 有些时候&#xff0c;我们 不希望 项目有些文件夹被 Git “监控” 起来&#xff0c;而是与 Git 毫无关系。 第一步 注意&#xff1a;touch 与 . 之间有空格。 在 Gitbash 命令窗口中&#xff0c;输入以下命令&#xff1a; touch .gitignore此时&#xff0c;你的项目文件…

HTML5+Canvas实现的鼠标跟随自定义发光线条源码

源码介绍 HTML5Canvas实现的鼠标跟随自定义发光线条特效源码非常炫酷&#xff0c;在黑色的背景中&#xff0c;鼠标滑过即产生彩色变换的发光线条效果&#xff0c;且线条周围散发出火花飞射四溅的粒子光点特效。 效果预览 源码如下 <!DOCTYPE html PUBLIC "-//W3C//D…

C++:bfs解决多源最短路与拓扑排序问题习题

1. 多源最短路 其实就是将所有源头都加入队列&#xff0c; 01矩阵 LCR 107. 01 矩阵 - 力扣&#xff08;LeetCode&#xff09; 思路 求每个元素到离其最近0的距离如果我们将1当做源头加入队列的话&#xff0c;无法处理多个连续1的距离存储&#xff0c;我们反其道而行之&…

Java基础--类和对象

目录 什么是类&#xff1f; 什么是对象 为什么java会设计对象 Java对象该怎么用 程序执行流程 类的加载顺序 什么是类&#xff1f; 类是构建对象的模板&#xff0c;一个类可以创建多个对象&#xff0c;每个对象的数据的最初来源来自对象 public class Student{public in…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

重新创建WebApi项目&#xff0c;安装Microsoft.AspNetCore.Authentication.JwtBearer包&#xff0c;将之前JwtBearer测试项目中的初始化函数&#xff0c;jwt配置类、token生成类全部挪到项目中。   重新编写login函数&#xff0c;之前测试Cookie和Session认证时用的函数适合m…

Electron实践继续

文章目录 前言一、知识储备前提二、开发工具集&#xff08;一&#xff09;代码编辑器之选&#xff08;二&#xff09;命令行工具运用&#xff08;三&#xff09;Git 与 GitHub 协作利器&#xff08;四&#xff09;Node.js 与 npm 核心环境 你的第一个Electron应用程序 前言 上…

《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统

和组合导航一样&#xff0c;也可以通过预积分 IMU 因子加上雷达残差来实现基于预积分和图优化的紧耦合 LIO 系统。一些现代的 Lidar SLAM 系统也采用了这种方式。相比滤波器方法来说&#xff0c;预积分因子可以更方便地整合到现有的优化框架中&#xff0c;从开发到实现都更为便…

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

快速入门:如何注册并使用GPT

文章目录 ProtonMail邮箱步骤 1&#xff1a;访问Proton官网步骤 2&#xff1a;创建ProtonMail账户步骤 3&#xff1a;选择注册免费账户步骤 4&#xff1a;填写邮箱地址和手机号&#xff08;可选&#xff09;步骤 5&#xff1a;邮箱验证&#xff08;必须进行验证&#xff09;步骤…

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…

Vulnhub DC-8靶机攻击实战(一)

导语   Vulnhub DC-8靶机教程来了,好久没有更新打靶的教程了,这次我们在来更新一期关于Vulnhub DC-8的打靶训练,如下所示。 安装并且启动靶机 安装并且启动靶机,如下所示。 开始信息采集 进入到Kali中,通过如下的命令来查找到靶机的IP地址。 arp-scan -l根据上面的结…