编辑
2025-04-01
内核设备树
0

在Linux中,设备树(Device Tree)的使用差异主要源于X86和ARM架构在设计哲学、硬件生态和启动流程上的根本区别。以下是具体原因分析:


1. 硬件标准的差异

  • X86架构
    • 高度标准化:X86平台由Intel/AMD主导,硬件接口(如PCI、ACPI、USB等)有严格的规范,操作系统可以通过标准协议(如PCI枚举、ACPI表)动态探测硬件配置。
    • 固件(BIOS/UEFI)的作用:X86固件会在启动时初始化硬件,并通过ACPI(高级配置与电源管理接口)向内核提供硬件信息(如处理器、内存、设备等),内核无需提前知道硬件细节。
编辑
2025-03-26
内核设备树
0

PCIe ranges 属性详解

设备树内容为:

c
pcie3x2: pcie@fe160000 { compatible = "rockchip,rk3588-pcie", "snps,dw-pcie"; #address-cells = <3>; #size-cells = <2>; bus-range = <0x10 0x1f>; clocks = <&cru ACLK_PCIE_2L_MSTR>, <&cru ACLK_PCIE_2L_SLV>, <&cru ACLK_PCIE_2L_DBI>, <&cru PCLK_PCIE_2L>, <&cru CLK_PCIE_AUX1>, <&cru CLK_PCIE2L_PIPE>; clock-names = "aclk_mst", "aclk_slv", "aclk_dbi", "pclk", "aux", "pipe"; device_type = "pci"; interrupts = <GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 257 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 255 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 254 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "sys", "pmc", "msg", "legacy", "err"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie3x2_intc 0>, <0 0 0 2 &pcie3x2_intc 1>, <0 0 0 3 &pcie3x2_intc 2>, <0 0 0 4 &pcie3x2_intc 3>;
编辑
2025-03-24
linux开发
0

在 Linux 系统中,BufferCache 都是内存管理的重要机制,用于提升系统性能,但它们的用途和工作原理有所不同。以下是它们的区别和联系:


1. Buffer(缓冲区)

  • 用途: Buffer 主要用于临时存储磁盘与内存之间的数据,作为数据传输的“中间层”。

    • 例如:当数据需要写入磁盘时,内核会先将数据暂存到 Buffer 中,待合适的时机(如磁盘空闲时)再批量写入,减少对磁盘的直接操作次数。
    • 也用于存储元数据(如文件系统的目录结构、权限信息等)。
  • 特点

    • 面向磁盘块的读写(Block-level)。
    • 数据是待写入或刚读取的原始数据,尚未被处理。
    • 通常由应用程序或内核主动管理。
编辑
2025-03-19
linux开发
0

用户层内存池

先阅读以下代码

c
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define POOL_SIZE 1024 // 内存池大小 #define BLOCK_SIZE 1024 // 每个内存块的大小 typedef struct MemoryBlock { struct MemoryBlock* next; } MemoryBlock; typedef struct MemoryPool { MemoryBlock* freeList; // 空闲内存块链表 char* memory; // 内存池的实际内存 pthread_mutex_t lock; // 互斥锁,用于线程安全 } MemoryPool;
编辑
2025-03-18
linux开发
0

用户层线程池

这是一个用户层线程池的示例代码

c
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #define THREAD_POOL_SIZE 4 #define QUEUE_SIZE 100 typedef struct { void (*function)(void *); void *argument; } task_t; typedef struct { task_t tasks[QUEUE_SIZE]; int head; int tail; int count; pthread_mutex_t lock; pthread_cond_t notify; } task_queue_t;