当前位置:首页>Linux>Linux 功耗子系统(三)reset 通用框架梳理

Linux 功耗子系统(三)reset 通用框架梳理

  • 2026-06-30 02:51:25
Linux 功耗子系统(三)reset 通用框架梳理

在 Linux 内核的功耗管理体系中,SoC 上的硬件资源需要一层层抽象才能被上层驱动安全使用。时钟有 CCF,电源域有 genpd,复位也需要自己的通用框架——reset framework。

我们从一个典型的 SoC 功耗控制路径看 reset 的位置:

整个功耗控制链路上,reset 位于最靠近硬件的底层:当需要关闭一个不用的硬件模块,顺序通常是停止请求 → 关闭时钟 → 置位复位 → 关闭电源;打开时反过来:上电 → 等待电压稳定 → 开时钟 → 释放复位 → 开始工作。

CCF 管"给不给时钟信号",reset 管"进不进工作状态",两者配合才能让一个模块彻底关断,实现最低功耗。如果没有 reset 框架,每个驱动都要自己操作复位寄存器,代码重复,而且共享复位线会出问题。

本文我们就从实际硬件出发,按实际情况 → 抽象对象 → 框架模型 → 数据流 → 运行行为 → 实际案例这个路径,把 reset 框架的设计说清楚。

实际情况

在 CCF 系列文章中,我们分析过 Linux 内核如何把 SoC 上成百上千个时钟资源用通用框架建模,使驱动能够通过统一接口获取和操作。SoC 上还有一类资源与时钟高度相似,就是复位信号。

每个硬件模块——外设、控制器、总线接口——上电后都需要复位信号完成初始化状态机。一个典型的移动 SoC 集成的复位源数量在 100 到 300 个之间。这些复位信号分散在多个控制器中,有的独立存在,有的与时钟控制器集成在一起,还有的通过 PMU 间接控制。

早期内核没有统一的复位管理机制。每个驱动自己实现复位操作,直接读写硬件寄存器。同一条复位线被多个硬件模块共享时,驱动之间没有同步机制,容易出现一个驱动刚释放复位,另一个驱动又马上置位的冲突。复位操作的时序参数也是硬编码在各个驱动中,芯片改版后需要同步修改十几个驱动文件。

这些问题在多平台内核维护中被放大。同一个 IP 核的驱动可能要适配五六个不同的 SoC,每个 SoC 的复位寄存器布局都不一样。内核社区在 3.10 版本前后开始引入 reset framework,解决复位资源的标准化管理问题。

复位本身的作用是把硬件模块拉到已知初始状态,保证上电后从确定状态开始工作。在功耗管理里,复位也常用来做彻底关闭模块:不需要的模块保持复位状态,可以彻底关掉时钟甚至电源,功耗更低。所以复位框架和 CCF 时钟框架总是一起出现在 SoC 上:每个硬件模块往往需要先复位,再开时钟才能正常工作,关闭时先关时钟,再保持复位才能最低功耗。

图中可以看到清晰的边界:CCF 负责时钟建模,reset 框架负责复位建模,最终都是给外设/IP 模块提供控制能力,两者都是底层资源底座,上层驱动只需要通过统一接口操作,不需要关心寄存器细节。

抽象对象

reset 框架的核心对象模型比 CCF 更简单,只有四个核心对象:

  1. 1. reset_controller:复位控制器 provider,对应 SoC 顶层的复位控制器硬件模块,管理一组复位线。
  2. 2. reset_controller_device:复位控制器实例,注册到 system 链表,提供操作复位线的 struct reset_controller_ops 方法表。
  3. 3. reset_line:一条具体的复位线,对应 provider 中的某一个 bit,绑定到具体 consumer 设备。
  4. 4. reset_control:consumer 拿到的句柄,指向对应 reset_line,provider 和 consumer 都不需要知道对方内部细节。
struct reset_control {
struct reset_controller_dev *rcdev;

    unsigned
 int id;
    bool
 shared;
    atomic_t
 deassert_count;
};

每个 reset_control 关联到一个复位控制器设备 struct reset_controller_dev,以及该控制器内的复位线编号 id。对于共享的复位线,内核通过 deassert_count 引用计数管理多个 consumer 的并发操作。

复位控制器驱动提供一组操作函数指针:

struct reset_control_ops {
    int
 (*reset)(struct reset_controller_dev *rcdev, unsigned long id);
    int
 (*assert)(struct reset_controller_dev *rcdev, unsigned long id);
    int
 (*deassert)(struct reset_controller_dev *rcdev, unsigned long id);
    int
 (*status)(struct reset_controller_dev *rcdev, unsigned long id);
};

这四个操作为框架提供了统一的硬件抽象。reset 执行完整的复位脉冲,assert 置位复位信号,deassert 释放复位信号,status 查询当前复位状态。

复位信号有两种工作模式。自清除模式下,assert 操作自动触发一个硬件脉冲后释放。电平模式下,assert 和 deassert 是两个独立的操作,复位信号保持在置位状态直到显式释放。框架内部处理这两种模式的差异,consumer 驱动不需要区分。

常用接口包括:

  • • of_reset_control_get:通过 DT 获取复位句柄
  • • reset_control_assert:断言复位,让模块保持复位状态
  • • reset_control_deassert:解除复位,让模块开始工作

和时钟框架对比:时钟框架是树形结构,有 parent 级联关系,clock 可以复用 parent 分频;复位框架没有复杂级联,结构更扁平,每个复位线通常对应控制器中的一个 bit 或一组 bit;接口更简单,主要实现 assert/deassert,不需要 rate 计算、parent 级联和频率传播。

模型

复位框架采用 provider-consumer 分层模型,与时钟框架的设计高度一致。

provider 侧由 SoC 顶层复位控制器驱动实现。驱动初始化时探测硬件寄存器,填充 reset_control_ops 函数指针,然后调用 reset_controller_register 把控制器注册到框架中。注册时指定控制器支持的复位线数量和设备树节点匹配方式。

consumer 侧的外设驱动通过 devm_reset_control_get 系列函数从设备树获取复位句柄。拿到句柄后调用 reset_control_assert、reset_control_deassert 等通用接口操作复位信号,不需要知道具体寄存器地址和位域定义。

共享复位线是框架处理的一个核心场景。多个设备可能挂在同一条复位信号下,比如一个总线下面的所有外设共享同一个总线复位。框架通过引用计数确保只有最后一个 consumer 调用 deassert 时才真正释放复位,避免中间状态导致的硬件异常。

独占复位线则直接操作硬件,没有引用计数开销。框架在 consumer 获取句柄时检查复位线的共享属性,自动选择对应的操作路径。

复位控制器可以级联。一个主控制器输出的复位信号作为另一个子控制器的输入,子控制器再拆分出更多的复位线。框架支持这种级联拓扑,consumer 看到的仍然是统一的接口。

数据流

provider 驱动初始化流程

复位控制器驱动一般对应 SoC 顶层复位模块。它的 probe 流程非常清晰:

核心步骤:

  1. 1. 设备树中声明复位控制器节点
  2. 2. 驱动 probe 分配 reset_controller_dev 实例
  3. 3. 初始化操作方法表和复位线数量
  4. 4. 注册到系统全局复位链表
  5. 5. 后续 consumer 通过 phandle + id 找到对应复位线

整个流程非常直接,因为没有树形结构需要建立,本质是创建控制器 → 暴露一组复位线 → 交给 reset core 做统一分发。

consumer 驱动获取与操作流程

consumer 驱动,也就是具体外设/IP 驱动,使用复位的流程也比较固定:

Image

整个使用流程符合驱动开发的通用模式:

  1. 1. 在设备树中声明依赖:resets = <&cru 0>; 指定控制器和索引
  2. 2. 驱动 probe 阶段调用 devm_reset_control_get() 获取复位句柄
  3. 3. 调用 reset_control_assert() 让模块保持复位,进入确定的初始状态
  4. 4. 根据硬件手册等待必要的复位稳定时间
  5. 5. 调用 reset_control_deassert() 解除复位,模块开始工作

释放流程通常不需要显式编写。使用 devm 接口时,设备移除阶段由 devm 框架自动释放资源。

这里最容易出问题的不是接口,而是顺序。寄存器访问、clock、regulator、power domain 状态必须满足硬件时序;如果 clock 没开就访问寄存器,或者电压未稳定就释放复位,设备可能直接启动异常。

运行

复位框架的运行时行为围绕引用计数和并发保护展开。

多个驱动同时操作同一条共享复位线时,框架通过 atomic_t 类型的 deassert_count 保证原子性。递增和递减操作都是原子指令,不需要额外的锁。这在中断上下文也能安全执行。

驱动获取复位句柄时可以指定获取模式。RESET_EXCLUSIVE 强制要求独占访问,如果复位线已经被标记为共享则返回错误。RESET_SHARED 允许共享访问,多个 consumer 可以同时持有同一条复位线的句柄。

复位状态查询通过 reset_control_status 接口实现。这个接口返回 0 表示复位已释放,正数表示复位已置位,负数表示不支持查询。不是所有硬件都能回读复位状态,provider 驱动根据硬件能力实现。

举例:RK3588 顶层复位控制器

拿实际芯片看,RK3588 把大量顶层控制能力放在 CRU / PMUCRU 这类控制器里。它们既提供 clock,也提供 reset。设备树中通过 #clock-cells 和 #reset-cells 说明 consumer 引用时需要携带 ID。

Image

RK3588 顶层控制器提供多个独立复位线,例如:

  • • GPIO 控制器复位
  • • SATA 控制器复位
  • • GMAC 以太网复位
  • • USB 控制器复位
  • • 其他外设和总线模块复位

每个复位线对应一个具体硬件模块,各个模块驱动各自获取需要的复位句柄,操作统一走 reset framework 接口。

以 Rockchip RK3588 SoC 的 CRU(Clock and Reset Unit)控制器为例,驱动在 drivers/reset/reset-rockchip.c 中实现,注册时指定每个复位线对应的寄存器偏移和位域:

static conststruct rockchip_reset_info rk3588_reset_info[] = {
    RK3588_RESET(0, 0x400, 0),
    RK3588_RESET(1, 0x400, 1),
    ...
};

RK3588_RESET 宏把复位线编号映射到 CRU 寄存器地址和位偏移。provider 驱动的 assert 函数根据这个信息计算出要写入的寄存器值,执行写操作后插入 10 微秒延迟,确保复位时序满足硬件要求。

consumer 侧以 SDHCI 驱动为例,设备树节点中声明复位线引用:

sdmmc: mmc@fe2b0000 {
    compatible = "rockchip,rk3588-dw-apb-uart";
    resets = <&cru SRST_MMC0>;
    reset-names = "reset";
};

驱动 probe 时通过 devm_reset_control_get_exclusive 获取独占复位句柄,然后在硬件初始化序列中执行:

reset_control_assert(host->rst);
udelay(10);
reset_control_deassert(host->rst);

这个序列产生一个 10 微秒的复位脉冲,让 SDHCI 控制器进入已知的初始状态。整个过程中,SDHCI 驱动不需要知道 CRU 寄存器的地址,也不需要处理 RK3588 与其他 Rockchip 芯片的复位控制器差异。

如果多个设备共享同一条复位线,比如 SPI0 和 I2C0 都挂在同一个总线复位下,驱动分别获取同一个复位线的句柄。第一个驱动 deassert 时真正释放复位,第二个驱动调用 deassert 时引用计数递增但不操作硬件。两个驱动都 assert 后引用计数归零,复位信号才真正置位。

RK3588 还通过 PMIC 提供部分电源域的复位控制,这部分作为独立的复位控制器驱动注册到框架中。consumer 驱动引用 PMIC 复位线的方式与引用 CRU 复位线完全相同,接口没有差异。

总结

reset 框架是 Linux 内核 SoC 资源底座中比较简单的一层:

  • • 定位:和 CCF 时钟框架并列,都是底层硬件资源的标准化抽象
  • • 设计思想:provider 实现底层操作,consumer 只依赖统一接口
  • • 对象模型:控制器 → 复位线 → consumer 句柄,分层清晰,没有复杂级联
  • • 操作接口:assert/deassert 是核心动作,接口少,但时序要求不能忽略

放到功耗管理的整体视角看,reset 是模块开关路径中的关键资源:

  • • 关闭模块:停止请求 → 关 clock → assert reset → 进入低功耗状态
  • • 打开模块:供电/clock 条件满足 → deassert reset → 恢复寄存器 → 允许 I/O

所以 reset framework 本身不直接制定功耗策略,但它是功耗管理能落到硬件动作上的重要底座。

对比
时钟框架(CCF)
复位框架(reset)
级联结构
树形,支持 parent 和 rate 传播
通常更扁平,复位线相对独立
核心操作
set rate / prepare / enable
assert / deassert / reset
功耗作用
降频、关 gate,减少动态功耗
保持模块确定状态,配合关钟关电

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-02 23:26:59 HTTP/2.0 GET : https://f.mffb.com.cn/a/500443.html
  2. 运行时间 : 0.110682s [ 吞吐率:9.03req/s ] 内存消耗:4,438.76kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ff9636266d8139ae79343ff074f744c0
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000567s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000880s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000309s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000277s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000454s ]
  6. SELECT * FROM `set` [ RunTime:0.000204s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000497s ]
  8. SELECT * FROM `article` WHERE `id` = 500443 LIMIT 1 [ RunTime:0.000583s ]
  9. UPDATE `article` SET `lasttime` = 1783006019 WHERE `id` = 500443 [ RunTime:0.019050s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000290s ]
  11. SELECT * FROM `article` WHERE `id` < 500443 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000540s ]
  12. SELECT * FROM `article` WHERE `id` > 500443 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002259s ]
  13. SELECT * FROM `article` WHERE `id` < 500443 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008966s ]
  14. SELECT * FROM `article` WHERE `id` < 500443 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002615s ]
  15. SELECT * FROM `article` WHERE `id` < 500443 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007826s ]
0.112203s