32、深入理解Linux系统中的唤醒源管理与PCI设备驱动

深入理解Linux系统中的唤醒源管理与PCI设备驱动

1. 唤醒源管理

在Linux系统中,唤醒源管理对于系统的电源管理至关重要。唤醒源的激活和停用涉及一系列特定的步骤。

1.1 唤醒源激活

唤醒源激活时会执行以下操作:
- 将唤醒源标记为活动状态,并增加唤醒源的 active_count 元素。
- 将唤醒源的 last_time 字段更新为当前时间。
- 如果 autosleep_enabled 字段为真,则更新唤醒源的 start_prevent_time 字段。

1.2 唤醒源停用

唤醒源停用包含以下步骤:
- 将唤醒源的 active 字段设置为 false 。
- 通过将活动状态所花费的时间添加到旧值来更新唤醒源的 total_time 字段。
- 如果活动状态的持续时间大于旧的 max_time 字段的值,则用该持续时间更新唤醒源的 max_time 字段。
- 用当前时间更新唤醒源的 last_time 字段,删除唤醒源的定时器,并清除 timer_expires 。
- 如果 prevent_sleep_time 字段为真,则更新唤醒源的 prevent_sleep_time 字段。

停用操作可能会立即发生(如果 msec == 0 ),或者在未来 msec 毫秒后安排执行(如果 msec 不为零)。

以下是唤醒源激活和停用步骤的表格总结:
| 操作 | 步骤 |
| — | — |
| 激活 | 1. 标记唤醒源为活动,增加 active_count
2. 更新 last_time 为当前时间
3. 若 autosleep_enabled 为真,更新 start_prevent_time |
| 停用 | 1. 设置 active 为 false
2. 更新 total_time
3. 若活动时长大于旧 max_time ,更新 max_time
4. 更新 last_time ,删除定时器,清除 timer_expires
5. 若 prevent_sleep_time 为真,更新 prevent_sleep_time |

1.3 唤醒源与sysfs

为了调试目的,可以通过打印 /sys/kernel/debug/wakeup_sources 文件的内容来列出系统中的所有唤醒源。该文件还报告每个唤醒源的统计信息。以下是一些与唤醒源相关的sysfs文件属性:
- wakeup :可读写属性,其内容决定了 device_may_wakeup() 辅助函数的返回值。
- wakeup_abort_count 和 wakeup_count :只读属性,指向 wakeup->wakeup_count 字段。
- wakeup_expire_count :映射到 wakeup->expire_count 字段。
- wakeup_active :只读,映射到 wakeup->active 元素。
- wakeup_total_time_ms :只读属性,返回 wakeup->total_time 值,单位为毫秒。
- wakeup_max_time_ms :返回 power.wakeup->max_time 值,单位为毫秒。
- wakeup_last_time_ms :只读属性,对应 wakeup->last_time 值,单位为毫秒。
- wakeup_prevent_sleep_time_ms :只读,映射到 wakeup->prevent_sleep_time 值,单位为毫秒。

2. IRQF_NO_SUSPEND标志

在系统的电源管理中, IRQF_NO_SUSPEND 标志起着重要作用。有些中断需要在整个系统的挂起 - 恢复周期中都能触发,例如定时器中断。对于这类中断,必须设置该标志。

不过,需要注意的是,该标志虽然有助于在挂起阶段保持中断启用,但并不能保证中断能将系统从挂起状态唤醒。要实现这一点,需要使用 enable_irq_wake() 函数,而该函数是特定于平台的。此外,如果一个带有该标志的中断被多个用户共享,那么所有用户都会受到影响,因此应避免将 IRQF_NO_SUSPEND 和 IRQF_SHARED 标志混合使用。

3. PCI设备驱动概述

PCI不仅仅是一种总线,它还是一个标准,定义了计算机不同部分之间的交互方式。多年来,PCI总线已成为设备互连的事实上的标准,几乎每个SoC都对其提供原生支持。随着对速度的需求不断增加,PCI总线也发展出了不同的版本和代际。

3.1 PCI总线的发展
  • PCI总线 :早期实现PCI标准的总线,取代了ISA总线。它具有32位寻址和无跳线自动检测与配置功能,改善了ISA总线的地址限制(ISA总线限于24位寻址,有时需要使用跳线来路由IRQ等)。
  • PCI Express(PCIe) :当前的PCI总线家族,是一种串行总线,而其前身是并行总线。除了速度提升外,PCIe还将其前身的32位寻址扩展到64位,并在中断管理系统方面有多项改进。PCIe分为不同的代际,如Gen1、Gen2、Gen3等。
3.2 PCIe的优势

与传统PCI总线相比,PCIe具有以下优势:
- 串行总线技术 :减少了连接设备所需的I/O通道数量,降低了设计复杂度。
- 增强的中断管理 :提供基于消息的中断(MSI)或其扩展版本(MSI - X),增加了PCI设备可处理的中断数量,同时不增加延迟。
- 更高的传输频率和吞吐量 :不同代际的PCIe在速度上不断提升。

以下是PCI和PCIe的对比表格:
| 特性 | PCI | PCIe |
| — | — | — |
| 总线类型 | 并行 | 串行 |
| 寻址 | 32位 | 64位 |
| 中断管理 | 传统 | MSI/MSI - X |
| 速度 | 相对较低 | 不断提升 |

3.3 PCI设备的特点

PCI设备是一种内存映射设备。连接到任何PCI总线的设备会在处理器的地址空间中被分配地址范围。这些地址范围在PCI地址域中有不同的含义,包含三种不同类型的内存:控制、数据和状态寄存器,以及根据访问方式(I/O端口或内存映射)划分的内存。设备驱动程序或内核将访问这些内存区域来控制连接在PCI总线上的特定设备并与之共享信息。

4. PCIe术语

在深入了解PCIe之前,需要熟悉一些相关术语:
- 根复合体(Root Complex, RC) :指SoC中的PCIe主机控制器,它可以在不经过CPU干预的情况下访问主内存,其他设备可利用这一特性访问主内存,也被称为主机到PCI桥。
- 端点(Endpoint, EP) :PCIe设备,由类型为 00h 的配置空间头表示,不会出现在交换机的内部总线上,且没有下游端口。
- 通道(Lane) :代表一组差分信号对(一对用于发送,一对用于接收)。
- 链路(Link) :表示两个组件之间的双单工通信通道。为了扩展带宽,链路可以聚合多个通道,用 xN (如 x1 、 x2 、 x4 、 x8 、 x12 、 x16 和 x32 )表示,其中 N 是通道对的数量。
- 桥(Bridges) :提供与其他总线(如PCI或PCI - X,甚至另一个PCIe总线)的接口,也可以提供与同一总线的接口。例如,PCI到PCI桥通过创建一个完全独立的二级总线来增加总线上的负载。
- 交换机(Switches) :提供聚合功能,允许更多设备连接到单个根端口。交换机有一个上游端口和多个下游端口,能够像数据包路由器一样工作,根据数据包的地址或其他路由信息(如ID)识别数据包的传输路径。

以下是PCIe术语的mermaid流程图:

graph LR
    A[PCIe系统] --> B[根复合体(RC)]
    A --> C[端点(EP)]
    A --> D[桥(Bridges)]
    A --> E[交换机(Switches)]
    D --> F[PCI到PCI桥]
    E --> G[上游端口]
    E --> H[下游端口]
    B --> I[访问主内存]
    C --> J[无下游端口]
    F --> K[创建二级总线]
    H --> L[虚拟PCI - PCI桥]
5. PCI总线枚举、设备配置和寻址

PCIe相对于PCI的一个显著改进是其点对点的总线拓扑结构,每个设备都位于自己的专用总线上,在PCIe术语中称为链路。理解PCIe设备的枚举过程需要一些基础知识。

5.1 设备类型识别

当查看设备的寄存器空间(在头类型寄存器中)时,可以判断其是类型0还是类型1的寄存器空间。通常,类型0表示端点设备,类型1表示桥设备。软件需要识别与之通信的是端点设备还是桥设备,因为桥设备的配置与端点设备不同。

5.2 桥设备配置

在桥设备(类型1)枚举期间,软件需要为其分配以下元素:
- 主总线号(Primary Bus Number) :上游总线号。
- 二级/从属总线号(Secondary/Subordinate Bus Number) :给出特定PCI桥下游总线号的范围。二级总线号是PCI - PCI桥紧下游的总线号,而从属总线号表示该桥下游所有可到达总线的最高总线号。在枚举的第一阶段,从属总线号字段被赋予值 0xFF (因为255是最高总线号),随着枚举的进行,该字段将被赋予该桥实际能到达的下游总线的最高编号。

5.3 设备识别

在PCI子系统中,设备识别由以下参数组成:
- 厂商ID(Vendor ID) :识别设备的制造商。
- 设备ID(Device ID) :识别特定厂商的设备。
- 修订ID(Revision ID) :指定设备特定的修订标识符。
- 类代码(Class Code) :识别设备实现的通用功能。
- 头类型(Header Type) :定义头的布局。

所有这些参数都可以从设备配置寄存器中读取,内核在枚举总线时会利用这些信息来识别设备。

5.4 总线枚举

在进行PCIe总线枚举之前,需要考虑一些基本限制:
- 系统中最多可以有256条总线(编号为0 - 255),因为用8位来识别它们。
- 每条总线上最多可以有32个设备(编号为0 - 31),因为用5位来识别它们。
- 一个设备最多可以有8个功能(编号为0 - 7),用3位来识别它们。

PCI枚举过程基于深度优先搜索(DFS)算法,通常从一个已知节点(在PCI枚举中为根复合体)开始,沿着每个分支尽可能深入地探索(实际上是寻找桥),然后回溯。当找到一个桥时,配置软件会为其分配一个至少比该桥所在总线号大1的编号,然后在新总线上继续寻找新的桥,依此类推。

枚举后的设备使用BDF格式(Bus - Device - Function)进行标识,使用三个字节(十六进制表示,不包含 0x ),例如 00:01:03 表示总线 0x00 上设备 0x01 的功能 0x03 。这种表示法有助于在给定拓扑中快速定位设备。如果使用双字节表示法,则表示功能被省略或不重要,例如 XX:YY 。

以下是一个简单的PCIe总线枚举步骤示例:
1. 根复合体(总线0)中有两个桥( 00:00:00 和 00:01:00 )。
2. 00:00 作为一个(虚拟)桥,其下游端口被分配为总线1,然后对总线1进行枚举。
3. 总线1上有一个交换机,其内部总线被编号为2。
4. 交换机的第一个下游桥的总线被编号为3,后面是一个端点设备。
5. 回溯后,交换机的第二个下游桥的总线被编号为4,后面有一个设备。
6. 00:01 桥的下游总线被编号为5,该总线上有一个交换机,其内部总线被编号为6,有三个下游桥。
7. 第一个下游桥的总线被编号为7,后面是一个端点设备。
8. 回溯后,第二个下游桥的总线被编号为8,后面有一个PCIe到PCI桥。

通过以上步骤,我们可以看到PCIe设备的枚举过程是一个复杂但有序的过程,它确保了系统能够正确识别和配置所有连接的PCIe设备。

深入理解Linux系统中的唤醒源管理与PCI设备驱动

6. PCI总线枚举示例分析

为了更清晰地理解PCI总线枚举过程,我们结合之前提到的示例拓扑图进行详细分析。

在这个拓扑图中,标准化枚举逻辑从步骤C开始。以下是对各个步骤的详细解释:

步骤 描述
A - B 根复合体内部,主机总线编号为0,有两个桥 00:00:00 和 00:01:00 。
C 总线1上有一个交换机,其内部总线编号为2。
D 交换机的第一个下游桥被找到,其总线编号为3,后面是一个端点设备,根据DFS算法,到达此分支的叶节点,开始回溯。
E 交换机中与步骤D中桥为兄弟关系的虚拟桥轮到被处理,其总线编号为4,后面有一个设备,再次进行回溯。
F 步骤B中找到的虚拟桥被分配总线编号5,该总线上有一个交换机,其内部总线编号为6,有三个下游桥。
G 3 - 端口交换机的第一个下游虚拟桥的总线编号为7,后面是一个端点设备,到达分支底部,开始回溯。
H 3 - 端口交换机的第二个下游虚拟桥的总线编号为8,后面有一个PCIe到PCI桥。

这个枚举过程严格遵循深度优先搜索(DFS)算法,确保了系统能够全面且有序地识别和配置所有PCIe设备。

以下是该枚举过程的mermaid流程图:

graph LR
    A[根复合体(总线0)] --> B[桥00:00:00]
    A --> C[桥00:01:00]
    B --> D[总线1]
    D --> E[交换机(内部总线2)]
    E --> F[下游桥1(总线3)]
    F --> G[端点设备]
    E --> H[下游桥2(总线4)]
    H --> I[设备]
    C --> J[总线5]
    J --> K[交换机(内部总线6)]
    K --> L[下游桥1(总线7)]
    L --> M[端点设备]
    K --> N[下游桥2(总线8)]
    N --> O[PCIe到PCI桥]
7. Linux内核PCI子系统与数据结构

在Linux内核中,PCI子系统提供了一系列的数据结构和API来管理PCI设备。这些数据结构和API抽象了底层的PCI总线操作,使得驱动开发者可以更方便地编写PCI设备驱动。

以下是一些重要的数据结构和对应的功能:

数据结构 功能
struct pci_dev 表示一个PCI设备,包含设备的各种信息,如设备ID、厂商ID、资源信息等。
struct pci_driver 表示一个PCI设备驱动,包含驱动的名称、设备ID表、探测和移除函数等。
struct pci_bus 表示一个PCI总线,包含总线的编号、父总线、子设备等信息。

驱动开发者可以通过这些数据结构和相关的API来完成PCI设备的注册、初始化、资源分配等操作。例如,使用 pci_register_driver() 函数来注册一个PCI设备驱动,使用 pci_enable_device() 函数来启用一个PCI设备。

8. PCI与直接内存访问(DMA)

PCI设备通常支持直接内存访问(DMA)功能,这允许设备直接与系统内存进行数据传输,而无需CPU的干预,从而提高了数据传输的效率。

在Linux内核中,使用DMA需要进行以下几个步骤:

  1. DMA映射 :使用 dma_map_single() 或 dma_map_sg() 函数将设备的物理地址映射到内核的虚拟地址空间。
  2. DMA传输 :配置设备的DMA控制器,设置传输的源地址、目的地址和传输长度等参数,然后启动DMA传输。
  3. DMA完成处理 :在DMA传输完成后,使用 dma_unmap_single() 或 dma_unmap_sg() 函数解除映射,并处理传输结果。

以下是一个简单的DMA传输示例代码:

#include <linux/pci.h>
#include <linux/dma-mapping.h>

static int my_pci_driver_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
    struct device *device = &dev->dev;
    dma_addr_t dma_handle;
    void *buffer;
    int ret;

    // 分配内存
    buffer = dma_alloc_coherent(device, PAGE_SIZE, &dma_handle, GFP_KERNEL);
    if (!buffer) {
        dev_err(device, "Failed to allocate DMA buffer\n");
        return -ENOMEM;
    }

    // 配置设备的DMA控制器
    // ...

    // 启动DMA传输
    // ...

    // 等待DMA传输完成
    // ...

    // 解除映射
    dma_free_coherent(device, PAGE_SIZE, buffer, dma_handle);

    return 0;
}

static struct pci_device_id my_pci_device_table[] = {
    { PCI_DEVICE(VENDOR_ID, DEVICE_ID), },
    { 0, }
};
MODULE_DEVICE_TABLE(pci, my_pci_device_table);

static struct pci_driver my_pci_driver = {
    .name = "my_pci_driver",
    .id_table = my_pci_device_table,
    .probe = my_pci_driver_probe,
    // .remove = my_pci_driver_remove,
};

static int __init my_pci_driver_init(void)
{
    return pci_register_driver(&my_pci_driver);
}

static void __exit my_pci_driver_exit(void)
{
    pci_unregister_driver(&my_pci_driver);
}

module_init(my_pci_driver_init);
module_exit(my_pci_driver_exit);
9. 技术要求总结

开发PCI设备驱动需要具备一定的技术基础,以下是详细的技术要求:

  • Linux内存管理和内存映射 :需要了解Linux内核的内存管理机制,包括物理内存和虚拟内存的映射关系,以及如何进行内存分配和释放。
  • 中断和锁机制 :熟悉Linux内核中的中断处理和锁机制,确保驱动在多线程环境下的正确性和稳定性。
  • Linux内核版本 :建议使用Linux kernel v4.19.X版本的源代码,可以从 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/tags 下载。

通过掌握以上技术要求,驱动开发者可以更好地理解和开发PCI设备驱动。

10. 总结

本文深入探讨了Linux系统中的唤醒源管理和PCI设备驱动相关内容。在唤醒源管理方面,我们了解了唤醒源的激活和停用步骤,以及如何通过sysfs接口查看唤醒源的统计信息。同时,介绍了 IRQF_NO_SUSPEND 标志的作用和使用注意事项。

在PCI设备驱动方面,我们回顾了PCI总线的发展历程,分析了PCIe的优势和相关术语,详细阐述了PCI总线的枚举过程、设备配置和寻址方法。此外,还介绍了Linux内核PCI子系统的数据结构和API,以及PCI设备的DMA功能和使用方法。

通过对这些内容的学习,我们可以更好地理解Linux系统中的电源管理和PCI设备驱动开发,为进一步的系统优化和设备驱动开发打下坚实的基础。

相关推荐

深入解析AM64x PCIe子系统:中断机制与地址转换实战指南

在计算机体系结构中,中断机制与地址转换是确保外设与CPU高效协同工作的两大核心技术。中断作为外设与CPU通信的异步信号机制,其核心原理在于允许设备在需要服务时主动打断CPU当前任务,从而实现实时响应。现代PCIe总线在此基础上发展出MSI和MSI-X等基于消息的信号中断,它们通过向特定内存地址写入数据来传递中断向量,大幅提升了中断处理的并发性和效率,对于构建高性能、低延迟的计算系统具有重要价值。地址转换则是连接不同地址空间的关键,它通过硬件单元(如iATU)将PCIe设备的总线地址映射到系统的物理地址,确保

weixin_30268921的博客 366

MPC8541E PowerQUICC III通信处理器:架构解析与硬件设计实战

通信处理器是嵌入式网络设备的核心,它通过集成专用硬件模块来高效处理网络协议与安全任务,其核心价值在于提升系统整体性能与能效。这类处理器通常采用SoC设计,将通用处理器核心与通信协处理器、硬件安全引擎、高速总线等模块集成,以实现数据平面与控制平面的高效协同。在技术实现上,硬件安全引擎通过专用执行单元(如AESU、PKEU)对加密算法进行硬件加速,能显著降低CPU负载,保障通信安全。其应用场景广泛覆盖路由器、交换机、防火墙等网络基础设施。本文以MPC8541E PowerQUICC III为例,深入剖析其包含e

weixin_33896726的博客 328

Intel x86 架构中 EC、BIOS 与 OS 三方协作机制深度解析

在 Intel x86 架构的计算机系统中,嵌入式控制器(Embedded Controller,简称 EC)是一颗独立于主 CPU(SoC)的微控制器,通常采用 8051 内核或 ARM Cortex-M 系列架构。EC 负责管理系统中大量低速、实时性要求高的外设和传感器,是连接硬件世界与软件世界(BIOS/UEFI 固件和操作系统)的关键桥梁。

u010881504的博客 542

最新推荐-2026年固态电池+锂电正极+硅基负极等关键技术实践PPT合集(55份).zip

2026年最新固态电池+锂电正极+硅基负极等关键技术实践PPT合集,共55份。供大家查阅。 一、固态电池 1.全固态电池用硅基负极材料研究进展 2.全固态电池硅基负极的开发思考 3.功能型固态电解质设计及界面调控 4.固态电池及关键材料研发与产业化进展 5.固态电池的产业化应用探索 6.固态锂电池开发现状及未来展望 7.固态锂离子电池正极结构设计与材料选择 8.固态锂金属电池设计与应用 9.硫化物全固态电池石墨和硅负极性能调控技术 10.硫化物固态电解质行业应用 11.聚合物基固态电解质与固态电池的关键技术 12.蜂鸟声共振技术-固态电池产业化的革命性创新 13.长安汽车固态电池应用探索 14.高安全性固态电池技术发展趋势 15.高性能硫化物全固态锂电池解决方案 16.高硅体系的膨胀解决方案 二、硅基负极 1.化学气相沉积碳包覆技术在硅基负极材料中的应用 2.新型粘结剂解决 硅基负极膨胀问题 3.氧化亚硅负极材料化学预锂化与界面设计 4.流化床法生产磷酸铁锂及硅负极材料研究 5.石墨烯包覆硅碳负极 6.硅基材料的发展现状及展望 7.硅基负极与固态电解质 8.硅基负极技术与进展 9.硅基负极材料体积膨胀解决策略 10.硅基负极材料及其结构设计 11.硅基负极材料的冶金法制备 12.硅基负极材料的发展与应用 13.硅基负极材料研究进展 14.硅基负极材料:从基础研究到产业应用 15.硅基负极析锂行为及调制研究 16.硅碳负极低成本制造技术报告 17.硅碳负极制备用多孔碳的开发 18.硅碳负极挑战和进展 19.硅碳负极新路线及关键材料制备 20.硅碳负极锂离子电池应力特性研究 21.锂电石墨负极材料工程化技术进步 22.锂离子电池负极材料 23.高容量石墨烯-硅基复合负极材料的研究进展 三、锂电正极 1.基于AI和图论结构化学的锂电池的材料基因探索 2.废旧磷酸铁锂电池梯次及再生利用进展 3.电动汽车大功率充电标准体系与检测认证实践 4.磷酸铁及磷酸铁锂异物防控管理 5.磷酸铁锂正极材料:液相法合成及产业化应用研究 6.磷酸锰铁锂正极材料的研究现状 7.车用动力电池安全标准化工作进展及未来展望 8.锂电层状氧化物正极材料的原子尺度失效机制 9.锂电正极材料工厂异物防控管理图册 10.锂离子电池高熵正极材料成分设计及储锂机制研究 11.高压实磷酸铁锂正极材料生产工艺配方.docx 12.高安全正极材料添加剂提升三元锂电安全性 13.高比能富锂锰基电池关键技术 14.高能量密度锂离子电池正极材料及应用研究 15.高镍单晶三元正极材料研究 16.三元高电压单晶正极材料

Zotero 是学术管理领域非常优秀的软件 它功能成熟、生态稳定,帮助许多科研人员建立了最初的文献归档体系

Zotero 是学术管理领域非常优秀的软件。它功能成熟、生态稳定,帮助许多科研人员建立了最初的文献归档体系。但在当下日常科研与深度使用各类 Agent 时,传统的文献工具链暴露出一些断点:上下文严重分散:论文存储在 Zotero,笔记记在 Obsidian,与模型的推导和分析留在各个网页对话框中。三者数据彼此隔离,当需要 Agent 结合某篇具体论文与历史笔记进行深入推导时,用户必须反复手动复制粘贴。文献格式对模型不友好:人类习惯阅读排版良好的 PDF 文件;但对于模型而言,直接解析双栏排版、跨页表格、复杂数学公式和交叉引用的成本极高,极易产生识别错误与幻觉。结构化 Markdown 与 LaTeX 才是模型容易准确理解的格式。维护成本较高:AI 伴读、全文翻译、笔记同步等高频需求,往往需要安装和调试多个社区插件,配置门槛高且在版本升级时容易出现兼容性问题。批量自动化能力有限:通过 Deep Research 或自动化检索工具发现的大量文献,目前仍需人工在浏览器中逐篇点击保存,难以顺畅衔接批量研究流。Agentero 并非旨在替代 Zotero,而是探索一种人与 Agent 协同处理科研上下文的新方式:人类负责:提出研究问题、进行学术价值判断、深度研读与核心结论推导;Agent 负责:批量检索筛选、元数据抓取、图表与公式提取、引用关系梳理及基础总结。

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 298

SAP 第三方销售

第三方销售

yanzibing99的博客 3516

Ubuntu技巧-Ubuntu远程访问之SSH反向代理

💡大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、互联网和自媒体。要把内网的一台的Ubuntu服务器让外面也能访问,总共有三种可行的方案,前面已经介绍了两种方式,今天就来介绍更健壮稳定的方式——ssh反向代理。大概的框架图如下,今天就从服务器购买到设置,手把手的教程,让你花费100块以内,就拥有一个强大的「云服务器」。

可夫小子的频道 1153

lammps模拟石墨烯吸附水分子(gcmc)

本文分享lammps gcmc吸附的一个案例代码,上下壁面的通道材料为石墨烯,吸附的分子为tip4p水分子。大家好,我是小马老师。

lammps_jiayou的博客 2592

Redhawk: dynamic ir drop分析(Clock Buffer Clustering)

在dynamic分析中,ir drop问题多出现在三种情况下,缺power mesh,缺power switch,clock cell过于密集。 前两种情况通过选中具体instance查看min res path都比较容易分析出来,而且大部分问题都出现在channel里,这里不多做赘述。 clock cell过于密集这是观察结果,缺少报告支持,这里分享一下分析方法。 首先,选中压降超过signoff标准的instance,(Results->List of Worst Instance DVD中

m0_61544122的博客 5278

31、人工智能对神性观念的重塑与启示

本文探讨人工智能发展对神学与哲学中神性观念的深刻影响,通过奥古斯丁和爱任纽的神义论视角,分析AI系统的道德地位、自由意志类比、不可解释性与信任问题。文章提出‘可实例化的神性’这一新概念,认为在人与AI的互动中,神性在‘可能性矩阵’中得以实现。最后呼吁在技术进步的同时加强道德创造、可解释性研究与哲学神学反思,以实现人与技术的和谐发展。

xray4的博客 141

计算机网络基础:揭开网络世界的神秘面纱

计算机网络基础:揭开网络世界的神秘面纱,计算机网络已深度融入现代生活,这篇文章对其基础内容展开全面阐述。开篇介绍计算机网络的定义,说明其由计算机设备、网络设备和传输介质构成。接着从地域范围和拓扑结构两个维度对计算机网络进行分类,并详细讲解 OSI 和 TCP/IP 参考模型,明晰各层功能与联系。随后阐述网络通信协议的定义及常见协议,如 TCP/IP、HTTP 等。最后聚焦网络安全,涵盖定义、重要性以及防火墙、加密技术等常用安全技术。文章旨在帮助读者构建计算机网络基础知识体系,理解其在生活和工作中的应用与价值

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 6万+

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 138

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 31、文化对图形密码可用性的影响及波点艺术风格转换研究
下一篇: 12、低功耗内存应用中的先进隧道场效应晶体管
人间清醒863
博客等级 码龄3年 33粉丝 1544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值