当前位置:首页>Linux>Linux MMIO 与寄存器访问机制解析

Linux MMIO 与寄存器访问机制解析

  • 2026-06-17 23:55:05
Linux MMIO 与寄存器访问机制解析
看一个框架图,有疑问我们可以评论区或者加群讨论

第一章 MMIO 的本质

1.1 什么是 MMIO

在 Linux 驱动开发过程中,CPU 控制硬件最直接的方式就是访问设备寄存器。对于 UART、GPIO、SPI、I2C、CAN、Ethernet 等控制器而言,其内部状态、配置参数以及数据收发功能最终都通过寄存器完成管理。所谓 MMIO(Memory Mapped I/O,内存映射输入输出),本质上是将设备寄存器映射到 CPU 地址空间,使 CPU 可以像访问内存一样访问硬件设备,而无需使用专门的 I/O 指令。

现代 ARM、RISC-V 等嵌入式处理器几乎全部采用 MMIO 机制。例如 RK3568 的 UART 控制器可能位于 0xFE660000,CAN 控制器位于 0xFE570000,这些地址虽然看起来像内存地址,但实际上对应的是外设寄存器区域。当 CPU 执行读写操作时,请求会通过总线到达对应硬件模块,从而实现对设备的控制。

1.2 MMIO 与普通内存的区别

从程序角度观察,MMIO 区域和普通内存都表现为地址空间的一部分,因此很多寄存器访问代码看起来与内存操作没有区别。但从硬件角度看,两者存在本质差异。普通内存用于存储数据,读写内容通常不会产生额外动作,而寄存器访问往往会触发硬件行为,例如启动发送、清除中断、复位模块或者改变工作模式。

由于寄存器具有副作用,因此 MMIO 区域不能完全按照普通内存方式处理。CPU 对普通内存进行缓存、预取或者乱序执行通常不会产生问题,但如果这些优化作用于设备寄存器,则可能导致驱动看到错误状态甚至破坏设备时序。因此 Linux 专门为 MMIO 提供独立访问框架,以保证寄存器访问的正确性和一致性。

第二章 从总线角度理解 MMIO

2.1 CPU 如何访问设备寄存器

当驱动执行一次寄存器读取操作时,CPU 实际发出的是一次总线访问请求。对于 SoC 而言,内部通常包含 AXI、AHB 或 APB 等总线结构,各种外设控制器挂接在总线之上。当访问地址落入某个设备地址范围时,总线仲裁逻辑会将请求转发给对应控制器,从而完成寄存器访问。

例如 CAN 控制器地址范围为 0xFE570000~0xFE570FFF,当 CPU 读取该区域地址时,请求最终会被路由到 CAN 模块。控制器接收到访问请求后返回寄存器内容,再通过总线传递回 CPU。整个过程虽然表现为一次普通内存读取,但底层实际上经历了完整的总线事务过程。

2.2 地址空间的划分方式

现代 SoC 通常将整个物理地址空间划分为多个区域,包括 DDR、SRAM、BootROM、寄存器区域以及外设控制器区域。CPU 在访问地址时并不关心具体目标设备,而是由地址译码单元根据访问地址决定最终访问对象,这也是统一地址空间模型能够工作的基础。

对于驱动开发者而言,设备手册中的寄存器基地址实际上就是总线地址映射结果。例如 GPIO、UART、SPI 等模块都拥有独立地址范围,只要访问落入对应区域,硬件便能够识别目标设备。因此 MMIO 的核心思想就是利用统一地址空间完成设备访问,而无需额外设计复杂的 I/O 指令体系。

第三章 Linux 中的 MMIO 映射

3.1 为什么需要 ioremap

虽然设备寄存器拥有固定物理地址,但 Linux 内核运行在虚拟地址空间之中。CPU 实际访问的是虚拟地址,而不是 SoC 手册中的物理地址,因此驱动无法直接使用物理地址访问寄存器。为了让 MMU 能够正确完成地址转换,内核必须先建立从虚拟地址到设备物理地址的映射关系。

ioremap 的作用正是完成这种映射。当驱动传入寄存器物理地址和长度后,内核会申请虚拟地址区域并建立页表项,最终返回一个新的虚拟地址。后续所有寄存器访问都通过该地址完成,而 MMU 则负责自动将其转换到目标设备寄存器区域。

3.2 MMIO 映射后的访问流程

驱动调用 ioremap 获得地址后,看到的是一个普通指针,但底层已经具备完整页表映射关系。当 CPU 执行寄存器读写时,MMU 首先查询页表获取对应物理地址,然后将访问请求发送至总线,最终由目标控制器完成寄存器访问并返回结果。

整个过程中驱动无需感知 MMU、页表或总线细节,只需要保存映射地址即可完成硬件控制。这种分层设计将驱动逻辑与硬件地址管理解耦,使 Linux 能够在不同处理器架构和不同 SoC 平台之间保持统一的驱动开发模式。

第四章 readl 与 writel

4.1 为什么不能直接解引用

许多初学者在看到 MMIO 地址后,会尝试通过强制类型转换直接访问寄存器,例如使用指针读写映射地址。从语法角度看这种方式能够工作,但它绕过了 Linux 提供的寄存器访问框架,可能导致编译器优化、CPU 重排序或者平台兼容性问题。

Linux 提供 readb、readw、readl 以及对应的 write 接口,目的就是统一寄存器访问行为。这些接口内部会根据体系结构特点处理必要的同步和屏障操作,保证设备寄存器访问严格符合驱动预期,因此主线驱动代码几乎全部采用标准接口完成寄存器操作。

4.2 寄存器访问顺序的重要性

很多硬件模块要求寄存器按照固定顺序访问。例如初始化 UART 时需要先配置波特率,再开启发送器和接收器;初始化 CAN 控制器时需要先进入配置模式,再设置波特率参数,最后启动控制器。如果访问顺序被打乱,设备可能进入异常状态。

现代 CPU 为提高执行效率,会主动进行乱序执行和流水线优化。如果没有合适的同步机制,寄存器访问顺序可能与代码顺序不同。Linux 的寄存器访问接口通过屏障机制限制这种优化行为,确保配置寄存器、状态寄存器和控制寄存器按照驱动要求顺序执行。

第五章 MMIO 与缓存机制

5.1 为什么设备寄存器不能缓存

普通内存的访问速度远低于 CPU,因此引入 Cache 可以显著提高性能。但设备寄存器的目标并非存储数据,而是反映硬件实时状态。如果 CPU 缓存了寄存器内容,那么驱动读取到的数据可能已经过时,导致状态判断出现错误。

例如网卡接收完成后会更新状态寄存器,如果 CPU 一直读取缓存副本,则驱动可能永远无法发现新的数据到达。同样,向控制寄存器写入启动命令后,如果数据停留在缓存而未真正写入设备,那么硬件也不会执行对应动作。因此 MMIO 区域通常被配置为不可缓存属性。

5.2 Device Memory 属性

ARM64 架构页表支持多种内存属性,其中 Device Memory 专门用于寄存器区域。与 Normal Memory 不同,Device Memory 禁止缓存、禁止预取,同时严格限制访问重排序行为,从而保证 CPU 对寄存器的访问能够真实、及时地到达硬件设备。

Linux 在执行 ioremap 时会自动设置合适的页属性,因此驱动开发者通常无需手工处理缓存问题。但理解 Device Memory 的工作机制仍然十分重要,因为很多驱动故障最终都与错误的内存属性或者不正确的访问方式有关。

第六章 MMIO 在驱动中的应用

6.1 GPIO 驱动中的寄存器控制

GPIO 控制器本质上是一组寄存器集合,方向配置、输入状态和输出电平都由不同寄存器管理。驱动完成 ioremap 后,通过读取状态寄存器获取引脚电平,通过写入控制寄存器改变输出状态,从而实现对外部设备的控制。

从驱动框架角度看,GPIO 子系统只是对底层寄存器进行了进一步封装。无论是 gpiod_set_value() 还是 gpiod_get_value(),最终都会转化为 MMIO 寄存器访问,因此理解 MMIO 实际上也是理解 GPIO 驱动实现机制的重要基础。

6.2 CAN 与 UART 驱动中的 MMIO

CAN 和 UART 控制器同样依赖大量寄存器完成工作。例如发送数据时,驱动需要将数据写入发送缓冲寄存器,然后设置发送控制位启动硬件;接收数据时,则通过状态寄存器判断数据是否到达,再从接收缓冲寄存器读取数据内容。

对于这类通信控制器而言,几乎所有功能最终都表现为 MMIO 操作。Linux 网络子系统、TTY 子系统虽然提供了统一接口,但底层驱动仍然依赖 readl 和 writel 与硬件交互,因此 MMIO 是整个设备驱动体系最基础的组成部分之一。

第七章 MMIO 设计思想

7.1 Linux 如何抽象硬件访问

从设备树描述硬件资源,到 Platform Driver 获取资源信息,再到 ioremap 建立映射、readl 和 writel 完成寄存器访问,Linux 构建了一套完整的硬件抽象体系。驱动开发者无需关心具体总线实现,也无需管理复杂页表结构,只需按照统一接口访问设备即可。

这种抽象极大提高了驱动可移植性。同一套驱动代码能够运行在不同 ARM SoC、RISC-V 平台甚至部分 x86 嵌入式设备上,而底层 MMIO 映射和寄存器访问细节则由内核负责处理,从而降低了驱动开发复杂度。

7.2 从 MMIO 理解驱动架构

很多 Linux 子系统看似复杂,但如果向下追踪最终都会回到 MMIO 层面。无论是网络设备、串口设备、存储控制器还是工业总线设备,其核心任务都是通过寄存器控制硬件行为,因此 MMIO 可以被视为驱动与硬件之间最直接的连接通道。

理解 MMIO 后,再学习 GPIO、UART、SPI、I2C、CAN 或 PCIe 驱动会容易很多,因为这些驱动的本质区别往往只是寄存器定义不同,而访问方式基本一致。从某种意义上说,掌握 MMIO 就等于掌握了 Linux 驱动控制硬件的底层语言。

建了一个嵌入式Linux技术群,专门聊难题分析和求职面试,欢迎大家一起加入,共同解决工作中的疑难杂症问题

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 06:44:22 HTTP/2.0 GET : https://f.mffb.com.cn/a/497756.html
  2. 运行时间 : 0.122483s [ 吞吐率:8.16req/s ] 内存消耗:4,662.81kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7a85af30e87193f07f07d353fd1934ac
  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.000479s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000778s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000348s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000283s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000531s ]
  6. SELECT * FROM `set` [ RunTime:0.000223s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000601s ]
  8. SELECT * FROM `article` WHERE `id` = 497756 LIMIT 1 [ RunTime:0.000441s ]
  9. UPDATE `article` SET `lasttime` = 1783032262 WHERE `id` = 497756 [ RunTime:0.013329s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000283s ]
  11. SELECT * FROM `article` WHERE `id` < 497756 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000550s ]
  12. SELECT * FROM `article` WHERE `id` > 497756 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000419s ]
  13. SELECT * FROM `article` WHERE `id` < 497756 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002274s ]
  14. SELECT * FROM `article` WHERE `id` < 497756 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001267s ]
  15. SELECT * FROM `article` WHERE `id` < 497756 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.018885s ]
0.124567s