自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 acpi_ec_ecdt_probe

在 ACPI 设备枚举过程中,若平台已存在 ECDT 表,操作系统会优先使用其预定义的硬件资源,而无需依赖 DSDT 表中的设备描述(如 HID/CID 匹配)。这避免了因动态探测导致的潜在兼容性风险4。,主要用于在系统启动阶段为操作系统提供嵌入式控制器(EC)的关键硬件资源信息,以便快速初始化 EC 设备,避免通过动态设备枚举可能引发的兼容性问题24。ECDT 表存储了嵌入式控制器的寄存器地址(如命令/状态寄存器和数据寄存器)、中断(GPE)编号以及 EC 设备在 ACPI 命名空间中的路径(例如。

2025-05-17 10:58:30 461

原创 devtmpfs_create_node

通过 **devtmpfs**,Linux 内核实现了设备节点管理的**自包含**和**自洽**,既满足了早期启动的可靠性需求,又为后续用户空间管理保留了灵活性。| **符号链接** | 不处理 | 创建持久化别名(如 `/dev/disk/by-id`)|3. **默认名称**:处理 `dev_name(dev)` 中的特殊字符(如 `!- **提前预置**:需手动创建 `/dev` 下所有可能用到的设备节点(如 `mknod`)

2025-05-04 16:49:14 425

原创 device_create_sys_dev_entry

在 `/sys/dev/char/` 或 `/sys/dev/block/` 目录下创建形如 `<major>:<minor>` 的符号链接,指向设备的真实 sysfs 路径。| **设备号视图** | `/sys/dev/{char,block}`| 按设备号分类 | 通过设备号快速定位设备 || **拓扑视图** | `/sys/devices/` | 按硬件连接关系 | 反映物理/逻辑设备层次 |

2025-05-04 16:36:06 461

原创 dpm_sysfs_add

`pm_runtime_attr_group` | 支持运行时PM的设备 | `runtime_enabled`/`status`| `pm_runtime_callbacks_present()`|| `pm_wakeup_attr_group` | 可唤醒设备 | `wakeup`/`wakeup_count` | `device_can_wakeup()` |

2025-05-04 16:35:43 738

原创 device_add_attrs

总结来说,`bus_add_device()` 的核心是**建立设备与总线的双向关系**,同时将总线定义的**属性规范实例化到具体设备**。严格来说,`bus_add_device()` 的核心操作是**将设备关联到总线的体系结构中**,而非简单地将总线属性添加到设备。- `bus->dev_attrs`:总线定义的默认属性(如 PCI 设备的 `vendor`/`device`)- **操作对象**:虽然参数是 `bus`,但实际修改的是 `dev` 的 sysfs 属性。

2025-05-04 15:37:16 725

原创 static int device_add_class_symlinks(struct device *dev)

**功能分类** | 设备类型 | `/sys/class/...` | `struct class` || **物理拓扑** | 硬件连接关系 | `/sys/devices/...` | `struct device` || **总线驱动** | 驱动绑定关系 | `/sys/bus/.../drivers` | `struct bus_type` |- **硬件工程师**可以沿着 `devices/` 路径诊断物理问题。

2025-05-04 15:21:40 677

原创 device_create_file(dev, &dev_attr_uevent)

device_attribute attribute sysfs_create_filesysfs_add_file_mode_ns1. 属性类型判断分支c复制下载if (!is_bin) { /* 普通属性处理 */ struct kobject *kobj = parent->priv; const struct sysfs_ops *sysfs_ops = kobj->ktype->sysfs_ops;

2025-05-04 14:48:17 377

原创 kobject_add(&dev->kobj, dev->kobj.parent, NULL)

【代码】kobject_add(&dev->kobj, dev->kobj.parent, NULL)

2025-05-04 13:31:28 117

原创 dev_to_node、set_dev_node

【代码】dev_to_node、set_dev_node。

2025-05-04 13:22:51 79

原创 胶合目录解释

**sysfs**(`/sys/`)是内核用于展示设备树结构的一个虚拟文件系统,设备按照其所属的 **类(Class)** 和 **父设备(Parent Device)** 进行组织。| **关键点** | **说明** || **典型目录名** | `block/`(块设备)、`net/`(网络设备)等。// 增加引用计数,防止被释放。

2025-05-04 13:10:00 286

原创 int device_register(struct device *dev) 之static struct kobject *get_device_parent

从这里开始有点设计到文件系统建立首先,这个函数是紧跟parent = get_device(dev->parent),所以我们实际上会知道这个parent地址的情况,不论有没有,所以这里代码展开了讨论。:若父设备是块设备(如磁盘是分区的父设备),直接使用父设备的kobject作为父目录。内核中所有块设备的类(),用于统一管理块设备的 sysfs 属性和行为。块设备子系统的顶层kobject,对应目录。定义在中(p为类型)。glue_dirs若块设备的父设备非块设备(如),会在父目录下创建胶合目录(如。

2025-05-03 20:02:42 792

原创 int device_register(struct device *dev) 中的函数get_device

安全生命周期管理:通过引用计数避免内存泄漏或非法访问。防御性编程:检测非法操作,提升内核稳定性。接口抽象:简化开发者对复杂对象的管理,降低使用门槛。此函数体现了内核设计中"机制与策略分离"的思想——引用计数是机制,而封装了使用该机制的安全策略。

2025-05-03 19:44:30 595

原创 int device_register(struct device *dev)涉及到的重要结构体

加速同调,dev 、kobject、kset kernfs、召唤设备文件系统

2025-05-03 19:19:00 861

原创 奶奶滴,有几个关于acpi的函数和概念绕不开

在看系统对对于acpi表的处理的时候有个函数和概念非常重要不细心理解,读代码想有东西咬我一样。天天有处理不完的系统故障,和写不完的脚本。我觉得写代码和看代码得知道目标是什么才能展开对代码的工作,否则是很痛苦的。可惜,我不知道。下面我们开始吧!首先,OS在工作开展的瞬间就设计到一个概念:命名空间。这个首次出现在函数acpi_early_init中,该函数中的重要函数acpi_ns_root_initialize中,ns指的是namespace。当然,该函数不只是出现在这一个地方之中。

2024-09-16 17:45:25 512 1

原创 没有整个框架去细看OS对ACPI处理是不好的

现在已经很久没有去更新ACPI表,整日忙于工作。工作上大体上是没有任何意义,学习不到底层上的原理只能抽空看看了。越工作越觉得自己知识深度可宽度都不行。我在前面acpi_early_init 中看到了,OS会开辟一段ACPI表的空间创建,创建表头,创建信号量等一系列上的操作。acpi_init对这些函数进行了进一步的处理。init_acpi_device_notify(); 初始化ACPI设备的通知系统。acpi_bus_init():一个ACPI(高级配置和电源接口)总线初始化函数pci_mmcfg_la

2024-09-07 16:59:52 1354

原创 int __init acpi_init(void)

acpi_bus_init():一个ACPI(高级配置和电源接口)总线初始化函数。

2024-09-02 22:43:52 730

原创 假如我们获取到了ACPI每个分表虚拟地址,我们怎么使用

只查找并返回目标节点,不会返回该节点的头结点或其所有子节点的集合。它的设计是为了定位特定节点,而不是整个子树。首先,构造一个节点和一个描述符将这些数据去取出来。这是接着上一篇的理解的。

2024-09-01 00:21:21 126

原创 当我们获取到ACPI中各个FSDT,这样的表头后,后续处理

创建各个命名空间,找到各个命名空间所需要的数据,构建各自的节点并写入数据之中。信号量,结构体,都是为了这一步服务的。看来要进一步细节上去理解代码就需要我们去看具体内容了,不然接下来会很抽象,不理解代码为什么这么去写。

2024-08-31 01:20:02 1033

原创 感觉前面BIOS的ACPI传递到OS中说的太浅了

需要注意的是在该时刻我们使用的表的值是物理地址而不是虚拟地址(线性地址),我们需要使用函数acpi_os_map_memory进行进一步处理以便我们使用。acpi_os_map_memory中的代码内容就是书上介绍的地址物理地址转虚拟地址的内容。这一行代码出现在函数acpi_initialize_tables中,该函数根据BIOS的启动模式以及传递的值决定ACPI表的首个地址。因为还是讨论函数怎么调用的这个大家多看看起始基本上就知道的,我们还是要知道背后的内存级别的操作才行,以及说清代码整体思路才行。

2024-08-27 22:47:34 345 1

原创 acpi_tb_install_standard_table

函数。

2024-08-26 21:51:44 389

原创 从BIOS将ACPI表中的信息传递到OS中

start_kernel 是内核启动的入口点,通常是在汇编代码中调用的第一个 C 函数。

2024-08-26 21:32:20 1214

原创 从今天开始更新OS中ACPI表和中断向量表在系统中的使用

首先,我们需要知道的是这两张表都是从BIOS中传递上内存中的,OS从指定内存中找到这些表。其次,构建这些表的基本信息,函数调用以及特殊设备的处理。硬件向操作系统反馈的,操作系统如何调用指定函数的。如果有人催过更的话就更新快些。

2024-08-25 13:57:53 157

原创 关于系统起来这件事

不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。一:BIOS扫描环境中的可以设备并写成ACPI表,最后提供给操作系统,第二个就是对heads中存在构建基本的全局描述符寄存器以及具备描述符寄存器,如果仔细的去内核书中的介绍。

2024-08-20 21:44:29 355

原创 对linux 内存空间、中断、进程三个部分的学习总结

这是因为32位操作系统能够寻址的地址编号范围是1到2的32次方,而每一个地址都是指的内存中一个字节的地址。CPU只有一个4G空间,怎么去访问远超于4G的空间,并且兼容更多的设备就是我们需要思考的问题。总体而言,CPU的工作原理是通过不断取指、解码、执行和访存的过程,按照指令集架构(如x86、ARM等)执行程序中的指令,从而完成计算机的各种任务。3. 执行:根据指令的操作类型,CPU执行相应的操作,可能涉及数据的读取、运算、存储和控制流的改变。在学习的过程中,我发现自己对操作系统的还是有很多不足的。

2024-07-16 22:55:42 387

原创 在正式开始了解PCIe的知识前,开始学习pci知识吧

我们都知道PCI总线上可以再次去挂在PCI总线,以HOST桥可形成PCI总线树。跨PCI线需要PCI桥进行数据转发。在PCI桥的配置空间中存在一系列管理PCI总线子树的配置寄存器,这个PCI桥在PCI树中会有很多个。每个PCI设备都有独立的配置空间(计算是不是准备好了一块映射空间来针对这一点),在每个PCI设备使用的物理地址并不相同。需要注意的是,PCI总线地址和处理器访问的存储地址是不同的。PCI总线上的设备可以通过四根中断请求信号向处理器提出中断,PCI配置空间中记录了这个四条中断信号所代表的信息。

2023-11-15 21:44:02 92

文件系统初始化相关代码

大师大师大但是大叔大婶大叔大婶大萨达

2025-04-22

acpi scan 描述基本很详细了

acpi你大大阿达阿达阿达打电动

2025-04-20

acpi,acpi-bus-init.eeddx

acpi表初始化中的函数

2025-04-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除