当前位置:首页>Linux>小白也能看懂的 Linux 内核中断机制解析

小白也能看懂的 Linux 内核中断机制解析

  • 2026-07-01 17:14:12
小白也能看懂的 Linux 内核中断机制解析

小白也能看懂的 Linux 内核中断机制解析

学 Linux 驱动时,中断机制是一个绕不开的坎。很多初学者会卡在几个问题上:外设为什么能“打断”CPU?中断号从哪里来?中断处理函数什么时候执行?为什么中断里不能随便睡眠?上半部、下半部、线程化中断又是什么?

这篇文章不从复杂源码开始,而是先建立一条清晰主线:**外设发出中断信号,中断控制器汇总并送给 CPU,CPU 进入内核中断入口,内核找到对应驱动的处理函数,驱动快速处理关键现场,再把耗时工作延后。**

理解这条链路,后面再看 request_irq()/proc/interrupts、设备树里的 interrupts 属性,思路就会顺很多。

一、中断解决的核心问题:CPU 不用一直傻等

先从一个最朴素的问题开始:假设按键被按下,CPU 怎么知道?

最简单的方法是轮询。CPU 每隔一段时间去读一次 GPIO 状态,看看按键有没有变化。这个方法容易理解,但有明显缺点:

  • 读得太慢,响应会有延迟。
  • 读得太快,CPU 时间被浪费。
  • 外设很多时,轮询逻辑会越来越臃肿。

中断的思路相反:CPU 平时正常执行任务,外设有事件时主动发信号通知 CPU。CPU 暂停当前执行流,跳到内核中断处理路径,处理完再回到原来的位置继续运行。

这就像你不用一直盯着门口看快递到了没有,而是让门铃响了再去开门。

在 Linux 系统里,一次典型中断路径可以拆成几步:

  • 外设产生事件,例如按键按下、网卡收到包、串口收到数据。
  • 外设通过 IRQ 线或内部中断信号通知中断控制器。
  • 中断控制器判断优先级、屏蔽状态,再把中断送给 CPU。
  • CPU 进入异常入口,切换到内核中断上下文。
  • 内核根据中断号找到驱动注册的处理函数。
  • 驱动处理关键状态,必要时唤醒线程或调度延后任务。

这里有一个关键点:**中断不是某个驱动自己凭空触发的,而是硬件事件、控制器、CPU 和内核共同完成的一套机制。**

二、硬件入口:IRQ 信号先到中断控制器

在嵌入式 SoC 里,外设通常不会直接把中断送到 Linux 驱动。它们会先连接到中断控制器,例如 ARM 平台常见的 GIC。GPIO 控制器、I2C 控制器、SPI 控制器、网卡、USB 控制器、定时器等外设,都可能有自己的中断输出。

中断控制器负责几件事:

  • 接收多个外设中断信号。
  • 判断哪个中断当前允许上报。
  • 处理中断优先级。
  • 把中断路由到某个 CPU 核。
  • 向 CPU 报告当前需要处理的中断 ID。

驱动里看到的 IRQ number,并不一定等于硬件手册里的原始中断线编号。Linux 会把硬件中断号映射成内核使用的虚拟 IRQ 编号,驱动通常只需要使用内核分配好的 IRQ。

在设备树平台里,中断信息常常长这样:

// 示例:设备通过设备树描述自己的中断资源
example_device: sensor@40 {
    compatible = "demo,irq-sensor";
    reg = <0x40>;
    interrupt-parent = <&gpio1>;
    interrupts = <12 IRQ_TYPE_EDGE_FALLING>;
};

这段描述表达的是:设备的中断接在 gpio1 控制器的第 12 路,触发方式是下降沿。驱动并不直接硬编码这个数字,而是从设备树或平台资源中获取 IRQ。

触发方式也很重要:

  • 边沿触发:信号从低到高或从高到低的瞬间触发。
  • 电平触发:信号保持在某个电平时持续有效。

如果触发方式配置错了,可能出现两类问题:

  • 完全没有中断。
  • 中断一直触发,形成中断风暴。

这也是调试中断问题时必须检查硬件原理图、设备树和芯片手册的原因。

三、内核处理:上半部要短,下半部做重活

中断来了以后,CPU 会进入内核中断上下文。这个上下文很特殊:它不是普通进程上下文,不能像普通线程那样随便睡眠、等待锁、做长时间阻塞操作。

因此 Linux 驱动设计里有一个基本原则:**中断处理函数要尽量短。**

传统说法里,中断处理分为上半部和下半部:

  • 上半部:真正的硬中断处理函数,响应要快。
  • 下半部:把耗时或可延后的工作放到稍后执行。

上半部通常做这些事:

  • 确认中断来源。
  • 读取硬件状态寄存器。
  • 清除或应答中断。
  • 保存必要数据。
  • 唤醒等待队列或调度后续任务。

它不适合做这些事:

  • 长时间循环处理大量数据。
  • 等待 mutex。
  • 访问可能睡眠的接口。
  • 做复杂业务逻辑。
  • 在中断里打印大量日志。

一个简化的中断处理函数大概是这样:

// 示例:表达中断上半部的典型处理逻辑
static irqreturn_t demo_irq_handler(int irq, void *dev_id)
{
struct demo_dev *ddev = dev_id;
    u32 status;

// 读取状态寄存器,确认是否是本设备产生的中断
    status = readl(ddev->base + DEMO_INT_STATUS);
if (!status)
return IRQ_NONE;

// 清除中断,避免同一个中断反复进入
    writel(status, ddev->base + DEMO_INT_CLEAR);

// 保存轻量状态,唤醒后续处理
    ddev->last_status = status;
    wake_up_interruptible(&ddev->waitq);

return IRQ_HANDLED;
}

这段代码的重点不是寄存器名字,而是处理策略:先确认来源,再清中断,再保存必要状态,最后唤醒后续逻辑。复杂工作不要堆在这里。

Linux 里常见的下半部机制包括:

  • softirq:内核内部高性能延后处理机制,网络收包路径常用。
  • tasklet:基于 softirq 的较老机制,新代码里使用要谨慎。
  • workqueue:在进程上下文执行,可以睡眠,适合耗时工作。
  • threaded IRQ:把中断处理线程化,适合很多驱动场景。

对于初学驱动的人,重点先记住一句话:**硬中断里只做必须马上做的事,能晚点做的事放到下半部。**

四、驱动怎么注册中断

驱动想处理某个中断,需要先向内核注册处理函数。常见接口是 request_irq() 或 devm_request_irq()

devm_request_irq() 更适合现代驱动,因为它和设备生命周期绑定,设备卸载时资源会自动释放,减少忘记 free_irq() 的风险。

简化示例如下:

// 示例:驱动 probe 阶段申请中断
staticint demo_probe(struct platform_device *pdev)
{
struct demo_dev *ddev;
int irq;
int ret;

// 从设备树或平台资源中获取 IRQ 编号
    irq = platform_get_irq(pdev, 0);
if (irq < 0)
return irq;

    ddev = devm_kzalloc(&pdev->dev, sizeof(*ddev), GFP_KERNEL);
if (!ddev)
return -ENOMEM;

    init_waitqueue_head(&ddev->waitq);

// 注册中断处理函数
    ret = devm_request_irq(&pdev->dev, irq, demo_irq_handler,
                           IRQF_TRIGGER_FALLING,
"demo-irq-device", ddev);
if (ret)
return ret;

    platform_set_drvdata(pdev, ddev);
return0;
}

这里有几个参数值得理解:

  • irq
    :内核分配给这个设备的 IRQ 编号。
  • demo_irq_handler
    :中断触发时执行的处理函数。
  • IRQF_TRIGGER_FALLING
    :触发方式,实际项目要和硬件一致。
  • "demo-irq-device"
    :显示在 /proc/interrupts 里的名字。
  • ddev
    :传给中断处理函数的私有数据。

如果多个设备共享一根中断线,还可能使用 IRQF_SHARED。共享中断时,中断处理函数必须检查硬件状态,确认中断是否真的来自本设备。如果不是,就返回 IRQ_NONE

五、调试中断,先看三个地方

中断问题不要一上来就钻源码。更高效的顺序是先确认硬件信号、内核计数和驱动日志。

先看 /proc/interrupts

# 查看系统中断计数和中断名称
cat /proc/interrupts

重点看几件事:

  • 设备对应的中断项是否存在。
  • 触发外设后计数是否增长。
  • 中断是否集中在某个 CPU 上。
  • 名称是否和驱动注册时一致。
  • 是否有异常快速增长的中断计数。

再看内核日志:

# 观察驱动 probe、中断注册、异常日志
dmesg -w

如果驱动注册失败,常见原因包括:

  • 设备树中断属性写错。
  • interrupt-parent
     指向不对。
  • 触发方式和硬件不一致。
  • 中断已经被其他驱动占用。
  • GPIO 没有配置成中断输入。

再结合硬件确认:

  • 用示波器或逻辑分析仪看 IRQ 引脚是否真的跳变。
  • 确认上拉、下拉、电平转换是否正确。
  • 确认外设中断状态寄存器是否置位。
  • 确认驱动是否正确清除中断。

中断风暴是初学者很容易遇到的问题。它通常表现为 CPU 占用升高,/proc/interrupts 计数疯狂增长,系统响应变慢。常见原因是中断状态没有清除、电平触发信号一直有效,或者触发方式配置错。

可以临时用下面的方式观察中断计数变化:

# 每秒刷新一次中断计数
watch -n 1 cat /proc/interrupts

如果某一行计数在没有真实事件时也持续快速增长,就要优先检查清中断逻辑和触发方式。

六、小白应该怎么建立整体模型

学习 Linux 中断机制,不建议一开始就陷入架构相关汇编入口。更有效的方法是先建立四层模型:

  • 硬件层:外设是否真的产生 IRQ 信号。
  • 控制器层:中断控制器是否接收、屏蔽、路由该中断。
  • 内核层:Linux 是否把 IRQ 映射好,并调用对应 handler。
  • 驱动层:驱动是否正确注册、确认来源、清除中断并唤醒后续逻辑。

以后遇到中断不触发,可以按这个顺序排查:

1. 先确认硬件信号有没有变化。 2. 再确认设备树或平台资源是否描述正确。 3. 再看 /proc/interrupts 计数是否增长。 4. 再看中断处理函数是否进入。 5. 最后检查是否清中断、是否唤醒等待队列、是否调度下半部。

这样排查比盲目加日志更稳定。

七、总结

Linux 中断机制看起来复杂,本质上是在解决一个问题:外设发生事件时,如何让 CPU 高效、及时、可控地响应。

它的主线并不难:

  • 外设产生事件。
  • IRQ 信号进入中断控制器。
  • CPU 跳入内核中断入口。
  • 内核调用驱动注册的处理函数。
  • 上半部快速确认和清理现场。
  • 下半部或线程继续处理复杂工作。

对驱动开发来说,真正重要的不是背概念,而是形成工程判断:中断处理要短,触发方式要对,状态要清干净,调试时要看 /proc/interruptsdmesg 和硬件信号。

掌握这条链路之后,再去读具体平台的 GIC、GPIO 中断、request_irq()、线程化中断源码,理解难度会明显下降。

【往期推荐】

一个 USB 口可以通过 Hub 接多少个设备?

一文讲透 Debian、Buildroot、Yocto 的实战运用和区别

具身智能到底是什么?为什么机器人突然“活”起来了

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 03:50:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/497373.html
  2. 运行时间 : 0.343269s [ 吞吐率:2.91req/s ] 内存消耗:4,639.37kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c190c681d6ed90bc9e6a45a77ade0c7d
  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.001198s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001604s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003912s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.006215s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001607s ]
  6. SELECT * FROM `set` [ RunTime:0.000646s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001437s ]
  8. SELECT * FROM `article` WHERE `id` = 497373 LIMIT 1 [ RunTime:0.001137s ]
  9. UPDATE `article` SET `lasttime` = 1783021858 WHERE `id` = 497373 [ RunTime:0.019833s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.001018s ]
  11. SELECT * FROM `article` WHERE `id` < 497373 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005757s ]
  12. SELECT * FROM `article` WHERE `id` > 497373 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.028814s ]
  13. SELECT * FROM `article` WHERE `id` < 497373 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.032412s ]
  14. SELECT * FROM `article` WHERE `id` < 497373 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.019684s ]
  15. SELECT * FROM `article` WHERE `id` < 497373 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.027929s ]
0.344856s