当前位置:首页>Linux>小白也能懂—CAN总线:Linux CAN驱动

小白也能懂—CAN总线:Linux CAN驱动

  • 2026-03-23 20:11:39
小白也能懂—CAN总线:Linux CAN驱动

大家好,我是快乐学习,开心分享的科技探索员 🎉

前两期我们分别搞懂了 CAN 总线的硬件原理,以及 Linux SocketCAN 框架的使用方法。这一期进入最底层——驱动开发。

一个问题:SocketCAN 是怎么知道"往哪根线上发数据"的?答案就藏在 CAN 控制器驱动里。驱动是硬件和内核之间的翻译官,它向下直接操作寄存器控制 CAN 芯片,向上遵循 Linux net_device 框架提供统一接口,让 SocketCAN 完全感知不到硬件差异。

写一个 Linux 驱动,本质上是在内核规定的框架里"填空"——内核告诉你在哪里写代码,你只需要把硬件操作填进去。

本期以 MCP2515(最经典的 SPI 接口 CAN 控制器)为例,带你看懂 Linux CAN 驱动的完整骨架。

一、CAN 驱动的整体架构

先看整体分层,建立宏观认知:

▲ Linux CAN驱动四层架构——SocketCAN核心层、网络设备层、控制器驱动层、硬件层

四层职责一句话概括:

• SocketCAN核心层(can.ko):提供PF_CAN 协议族和套接字接口,与驱动无关

• CAN 网络设备层:把 CAN 控制器抽象成标准 net_device,对上暴露统一的 ndo_* 操作

• CAN 控制器驱动:本期主角,负责初始化芯片、设置波特率、发帧收帧、处理中断

• 硬件层:MCP2515 通过SPI 总线挂在 CPU 上,所有操作最终变成 SPI 读写时序

💡 理解这个分层后,你会发现:不管是 MCP2515SPI接口)、TJA1050(直接内存映射)还是 SoC 内置的 FlexCAN,驱动骨架完全相同,差别只在底层寄存器操作。换芯片只需换"填空"的内容。

二、驱动注册:platform_driver  spi_driver

CAN 控制器的驱动类型取决于它的总线接口:

• SPI 外接(MCP2515):使用spi_driver 框架

• 内存映射(SoC 内置FlexCANMCAN):使用platform_driver 框架

• USB 接口(PEAK USB CAN):使用 usb_driver 框架

 MCP2515 spi_driver 为例,驱动注册与注销流程:

▲ spi_driver 注册流程—— module_init  probe 再到 register_candev 的完整调用链

probe 函数:驱动的"入口"

当内核发现设备树中描述的 MCP2515 设备与驱动匹配时,调用 probe 函数。probe 必须完成以下工作:

• 第一步:alloc_candev(sizeof(私有数据结构), TX队列数) — 分配 CAN 网络设备

• 第二步:填充 net_device_opsndo_openndo_stopndo_start_xmit

• 第三步:填充 can_bittiming_const(描述芯片支持的波特率参数范围)

• 第四步:硬件初始化(复位芯片、配置振荡器、设置工作模式)

• 第五步:register_candev(ndev) — 向内核注册,can0 出现在系统中

• 第六步:request_irq() — 注册中断处理函数

设备树(DTS)配置

现代 Linux 驱动通过设备树描述硬件,MCP2515的典型 DTS 节点:

• compatible = "microchip,mcp2515":与驱动的 of_device_id 匹配

• reg = <0>SPI 片选号

• spi-max-frequency = <10000000>:最大 SPI 频率 10MHz

• clocks = <&clk20m>:外部晶振引用,MCP2515需要 8/16/20MHz 时钟

• interrupt-parent / interrupts:中断配置,MCP2515 有一个低电平有效的 INT 引脚

⚠️ MCP2515 的外部晶振频率必须在设备树中正确配置。驱动会根据晶振频率计算波特率分频参数,配错了会导致波特率偏差,轻则通信偶发错误,重则完全无法通信。

三、核心操作函数:ndo_open / ndo_stop / ndo_start_xmit

▲ CAN驱动关键代码——发送函数ndo_start_xmit和探测函数probe的核心实现

ndo_openip link set can0 up 时调用

打开接口时需要:

• 调用 open_candev(ndev) — 内核检查波特率等参数是否已配置

• 硬件配置波特率(根据 can->bittiming 计算并写入芯片寄存器)

• 使能中断(写 MCP2515 CANINTE 寄存器,开启 TX/RX 中断)

• 设置芯片为正常工作模式(退出配置模式,进入 Normal 模式)

• 调用 netif_start_queue(ndev) — 通知内核可以开始发送

ndo_stopip link set can0 down 时调用

• netif_stop_queue(ndev) — 停止发送队列

• 芯片进入睡眠或复位模式

• close_candev(ndev) — 释放资源

ndo_start_xmit:发送一帧 CAN 报文

这是驱动最核心的函数,当用户调用 write() 发送 CAN 帧时,内核最终调用到这里:

•  skbsocket buffer)中取出 can_frame 结构体

• 停止发送队列 netif_stop_queue()MCP2515 只有3TX缓冲,发完再开)

• 通过 SPI 将帧数据写入MCP2515  TX 缓冲区寄存器

•  RTS 命令寄存器触发MCP2515 开始发送

• 返回 NETDEV_TX_OK

💡 skbsocket buffer)是 Linux 网络子系统的核心数据结构,存放要发送或刚收到的网络数据包。在 CAN 驱动里,一个 skb 对应一个can_frame。用 can_get_echo_skb()  can_put_echo_skb() 来处理回环报文的统计。

四、中断处理:驱动的实时响应核心

MCP2515 有一个 INT 引脚,任何事件(TX完成、RX收到帧、错误)都会拉低这个引脚触发中断。驱动必须在中断处理函数里快速响应:

▲ CAN驱动中断处理——TX发送完成和RX帧接收的并行处理流程

中断处理函数的主体逻辑

• 读取 MCP2515 CANINTF 寄存器,获知中断原因

• TX 中断(TXIF):发送完成 → netif_wake_queue() 重新开启发送队列 → 更新 net_device stats

• RX 中断(RXIF):读取RXB0/RXB1 缓冲区 → 组装 can_frame → alloc_can_skb() → netif_rx() 送入内核

• 错误中断(ERRIF):读取EFLG 寄存器 → 分析错误类型 → 构造错误 skb → 上报给 SocketCAN 错误处理

• 清除对应中断标志位,否则中断会持续触发

NAPI 优化:高负载下的接收优化

在高波特率(1Mbps)总线满负荷时,每帧都产生一次中断会导致 CPU 频繁进出中断上下文。内核的 NAPINew API)机制解决了这个问题:

• 第一帧到达触发中断 → 关闭RX 中断 → 调度 napi_schedule()

• 内核在软中断上下文调用 poll 函数,一次性处理多个帧

• 处理完毕后重新开启 RX 中断

Linux 内核的 MCP2515 驱动(drivers/net/can/spi/mcp251x.c)使用了 NAPI,可直接阅读源码学习。

⚠️ 中断处理函数里不能睡眠、不能调用可能阻塞的函数。MCP2515  SPI 读写在中断上下文中必须用 spi_sync()(同步非阻塞),而不能用 spi_async(),否则会触发内核 BUG

五、波特率配置:把 500Kbps 翻译成寄存器值

波特率配置是 CAN 驱动里最容易踩坑的地方。内核负责上层计算,驱动负责把计算结果写进寄存器。

CAN 位时序参数

• TQTime Quantum):最小时间单位,由振荡器频率和 BRP(波特率预分频)决定

• Sync_Seg:固定 1 TQ,用于同步

• Prop_Seg + Phase_Seg1:传播延迟和相位补偿(采样点之前)

• Phase_Seg2:采样点之后的相位补偿

• 采样点 = (Sync_Seg + Prop_Seg + Phase_Seg1) / (TQ),通常设在 75%87.5%

驱动侧的实现

驱动需要向内核注册 can_bittiming_const,告知芯片支持的参数范围(各 Seg 的最大最小值、BRP范围等)。内核根据用户设置的波特率自动搜索最优参数组合,然后调用驱动的 do_set_bittiming 回调,驱动把参数写入 MCP2515  CNF1/CNF2/CNF3 寄存器即可。

💡 不需要手动计算寄存器值!内核的 can_calc_bittiming() 函数会自动完成所有计算,驱动只需实现好can_bittiming_const  do_set_bittiming 回调。这是 SocketCAN 框架设计得极为优雅的地方之一。

六、实战建议:读懂内核现有驱动源码

最好的学习方式就是直接读 Linux 内核里的真实驱动代码:

• MCP2515 SPI驱动:drivers/net/can/spi/mcp251x.c(约 1400 行,经典教科书级代码)

• 虚拟 CAN 驱动:drivers/net/can/vcan.c(约 200 行,最简单的 CAN 驱动,适合入门)

• SoC FlexCAN驱动:drivers/net/can/flexcan/flexcan-core.cNXP i.MX系列,功能完整)

推荐阅读顺序:

• 第一步:读 vcan.c,搞清楚最小 CAN 驱动的骨架(open/stop/xmit/register_candev

• 第二步:读 mcp251x.c,学习真实硬件驱动的完整实现(SPI操作、中断、错误处理)

• 第三步:读 flexcan-core.c,学习内存映射型驱动和 NAPI 的结合使用

💡  VSCode  Elixir Cross Referencerhttps://elixir.bootlin.com)中阅读内核源码,可以跳转到任意函数定义,事半功倍。推荐搭配《Linux设备驱动开发详解》第四版一起读。

七、总结:CAN 驱动开发知识速查

• 驱动框架:SPI接口用spi_driver,内存映射用 platform_driver,核心是 net_device + can_priv

• probe 函数:alloc_candev → 填充 ops → 硬件初始化 → register_candev → request_irq

• 发送路径:ndo_start_xmit →  can_frame → SPITX缓冲 → 触发发送 → TX中断 → wake_queue

• 接收路径:RX中断 → RX缓冲 → alloc_can_skb → 填充can_frame → netif_rx

• 波特率:实现 can_bittiming_const + do_set_bittiming,内核自动计算参数,驱动写寄存器

• 参考代码:drivers/net/can/spi/mcp251x.c 是学习 CAN 驱动的最佳范本

下期预告 🔔

CAN总线:应用层开发实战——真实项目代码全公开。 周期报文调度、UDS诊断服务框架、多节点通信架构设计,带你把前三期的所有知识落地成可运行的工程代码。

喜欢这篇文章?点个「在看」,让更多工程师看到它 👇

关注「科技探索员」,每期深入一个技术点,不讲玄学,只讲干货。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:59:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/482014.html
  2. 运行时间 : 0.220737s [ 吞吐率:4.53req/s ] 内存消耗:5,037.73kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ba213985dc85acbf258368288ae114b8
  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.001083s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001557s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000713s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002610s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001411s ]
  6. SELECT * FROM `set` [ RunTime:0.000625s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001556s ]
  8. SELECT * FROM `article` WHERE `id` = 482014 LIMIT 1 [ RunTime:0.001117s ]
  9. UPDATE `article` SET `lasttime` = 1774576798 WHERE `id` = 482014 [ RunTime:0.019372s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000714s ]
  11. SELECT * FROM `article` WHERE `id` < 482014 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001334s ]
  12. SELECT * FROM `article` WHERE `id` > 482014 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001481s ]
  13. SELECT * FROM `article` WHERE `id` < 482014 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003618s ]
  14. SELECT * FROM `article` WHERE `id` < 482014 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002621s ]
  15. SELECT * FROM `article` WHERE `id` < 482014 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009537s ]
0.227521s