当前位置:首页>Linux>从 MCU 到 Linux:开发思维的一些变化

从 MCU 到 Linux:开发思维的一些变化

  • 2026-06-24 10:44:24
从 MCU 到 Linux:开发思维的一些变化

关注+星标公众号,不容错过精彩

作者:HywelStar

有单片机背景的工程师转向嵌入式 Linux 时,都会经历一段"明明查得到资料,但就是写不好"的阶段。当然现在写代码,很多都被AI替代了,这个本章节不提这个了。根本原因不是缺少某个知识点,而是底层的开发模型变了,但思维方式还没跟上

这篇文章试图把这些思维变化说说。

1. 硬件访问模型变化

1.1 单片机的方式

单片机开发中,操作硬件的路径极短:

// 直接操作寄存器,没有任何中间层RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;GPIOA->CRL &= ~(0xF << 20);GPIOA->CRL |= (0x3 << 20);GPIOA->ODR |= (1 << 5);

知道每一行在做什么,知道时序,知道副作用。硬件是确定的,代码和硬件之间是直接映射关系。

1.2 Linux 的驱动模型

Linux 在硬件和应用之间,插入了整套驱动框架:

应用程序    ↓  系统调用(open/read/write/ioctl)VFS(虚拟文件系统)    ↓字符设备 / 块设备 / 网络设备驱动    ↓总线模型(platform / I2C / SPI / USB)    ↓硬件寄存器

这套分层不是为了让你写起来麻烦,而是为了解决几个单片机不需要面对的问题:

1. 多进程并发访问同一硬件: 驱动层要做互斥、引用计数,保证不会有两个进程同时乱操作同一个外设。

2. 硬件换了,上层代码要不要全改? Linux 的总线-设备-驱动模型把"硬件描述"和"驱动逻辑"分离。换一块板子,改设备树,驱动代码不动。

3. 设备树(DTS): 设备树是硬件的"说明书",描述板子上有哪些外设、接在哪个总线上、中断号是多少。内核启动时读取 DTS,自动匹配并加载对应驱动。

/* 设备树描述一个 I2C 传感器 */&i2c1 {    sensor@48 {        compatible = "ti,tmp102";   /* 匹配驱动的关键字 */        reg = <0x48>;               /* I2C 地址 */        interrupt-parent = <&gpio1>;        interrupts = <7 IRQ_TYPE_LEVEL_LOW>;    };};

驱动代码里通过 compatible 字符串匹配设备,内核自动完成绑定,不需要硬编码任何地址。

真正的挑战在于:当驱动行为不符合预期时,你需要能顺着这条链路向下追——从应用的系统调用,到 VFS,到驱动,到寄存器操作,每一层都可能出问题。

2. 执行模型

2.1 单片机是硬实时系统

单片机(含 RTOS)的调度是确定的:中断响应时间可以精确到微秒级,任务优先级严格执行,不会有"系统突然卡一下"的情况。这是因为整个软件栈都在你的掌控之内。

2.2 Linux 的调度器不保证实时性

标准 Linux 内核使用 CFS(完全公平调度器),目标是所有进程公平地分享 CPU,而不是保证某个任务的最大延迟。

这意味着:

// 这段代码在单片机上精确,在标准 Linux 上不保证struct timespec ts = {0, 1000000};  // 1msnanosleep(&ts, NULL);// 实际可能睡了 1ms,也可能睡了 5ms,取决于调度器心情

实际测量标准 Linux 的调度抖动,往往能达到几毫秒甚至几十毫秒。对于工业控制、电机驱动这类场景,这是不可接受的。

2.3 需要实时性怎么办?

方案一:PREEMPT_RT 补丁

将内核大部分不可抢占的临界区改为可抢占,让高优先级任务能更快得到响应。打上补丁后,调度延迟可以降低到几十微秒量级。

# 查看内核是否支持 RTuname -a# 带有 PREEMPT_RT 的内核版本号会包含 rt 字样# Linux 5.15.x-rt...

方案二:双核异构(AMP)架构

现在很多 SoC 同时集成了 Cortex-A(跑 Linux)和 Cortex-M(跑 RTOS 或裸机),分别处理不同实时等级的任务。RT 任务给 M 核,Linux 负责通信、UI、网络。

方案三:隔离 CPU 核心

通过 isolcpus 启动参数,把某个核心从内核调度器中隔离出来,专门给实时任务使用。

# 在 bootargs 中添加,隔离第3个核心(从0开始)isolcpus=2

3. 内存模型

单片机的内存是物理直映射的:

链接脚本划好区域,程序运行时知道每个变量的精确物理地址,没有碎片,没有换页,没有意外。

Linux 进程运行在虚拟地址空间里:

每个进程都认为自己独占一个完整的地址空间(32位系统是4GB),实际的物理内存映射由 MMU 和内核管理。

这带来了几个需要重新理解的概念:

1. malloc 返回的不是物理地址,也不一定立刻分配物理内存

Linux 使用"延迟分配"策略。malloc(1MB) 成功返回,但物理页面只有在你真正写入时才会被分配(缺页中断触发)。

char *buf = malloc(1024 * 1024);  // 成功,但物理内存还没分配memset(buf, 0, 1024 * 1024);      // 这里才真正触发物理页面分配

这意味着:malloc 成功不代表内存真的够用,实际写入时可能触发 OOM。

2. 内存泄漏在长期运行的嵌入式产品上是致命的

  // 一个典型的泄漏场景:错误处理路径忘记释放int process_data(void) {    char *buf = malloc(4096);    if (!buf) return -1;    if (read_sensor(buf) < 0) {        return -1;  // ← 忘记 free(buf),每次出错泄漏 4KB    }    free(buf);    return 0;}

设备跑了一个月,内存慢慢涨满,OOM killer 把进程杀掉,问题难以复现。

3. 如何追踪内存问题

# 查看进程内存使用cat /proc/<pid>/status | grep -i vm# Valgrind 检测泄漏(开发阶段)valgrind --leak-check=full ./myapp# mtrace:glibc 内置的内存追踪export MALLOC_TRACE=/tmp/mtrace.log./myappmtrace ./myapp /tmp/mtrace.log

4. 栈溢出的行为完全不同

单片机栈溢出通常导致数据被覆盖,行为诡异。Linux 进程有栈保护(guard page),栈溢出会触发 SIGSEGV,产生 core dump,反而更容易定位。

4. 并发模型

单片机的并发模型

单片机的并发依赖两件事:中断(处理异步事件)+ 主循环或 RTOS 任务(处理业务逻辑)。整个系统的并发结构一目了然,竞争关系可以完全掌控。

Linux 的并发工具箱要复杂得多

线程 vs 进程的选择

Linux 的线程(pthread)和进程都能实现并发,但代价和适用场景不同:

进程:独立地址空间,崩溃不影响其他进程,通信成本高(需要 IPC)线程:共享地址空间,通信成本低,一个线程崩溃可能带倒整个进程

对于嵌入式产品,如果某个模块的稳定性不确定(比如解析外部数据),用独立进程隔离是更稳健的选择。

IO 多路复用:epoll 的正确使用姿势

// 监控多个文件描述符,任何一个有数据就处理int epfd = epoll_create1(0);struct epoll_event ev;ev.events = EPOLLIN;ev.data.fd = uart_fd;epoll_ctl(epfd, EPOLL_CTL_ADD, uart_fd, &ev);ev.data.fd = socket_fd;epoll_ctl(epfd, EPOLL_CTL_ADD, socket_fd, &ev);// 事件循环while (1) {    int n = epoll_wait(epfd, events, MAX_EVENTS, -1);    for (int i = 0; i < n; i++) {        if (events[i].data.fd == uart_fd) handle_uart();        else if (events[i].data.fd == socket_fd) handle_socket();    }}

这比"每个 fd 一个线程阻塞等待"的方式,在大量并发连接时效率高得多。

进程间通信(IPC)的选型

方式
适用场景
特点
管道 / FIFO
父子进程,单向数据流
简单,有容量限制
Unix Domain Socket
本机进程间高频通信
接口与网络 socket 一致,性能好
共享内存 + 信号量
大数据量传输
最快,但需要手动同步
D-Bus / 自定义协议
系统服务间通信
适合复杂的消息路由场景

竞争条件(Race Condition)的隐蔽性

单片机里关中断就能保护临界区,简单粗暴。Linux 多线程环境下,用错同步原语,或者锁的粒度不对,竞争条件可能几天才触发一次,极难复现。

5. 调试方式

单片机调试的工具链相对简单,但嵌入式 Linux 产品一旦出现问题,需要能从多个维度同时分析。

5.1 运行时追踪

# strace:追踪进程的所有系统调用strace -p <pid>strace -e trace=read,write,ioctl ./myapp# ltrace:追踪库函数调用ltrace ./myapp# 查看进程打开了哪些文件/设备ls -la /proc/<pid>/fd

5.2 内核事件追踪(ftrace)

当问题出在内核层(驱动、调度),ftrace 是关键工具:

# 追踪特定内核函数echo function > /sys/kernel/debug/tracing/current_tracerecho 'spi_sync' > /sys/kernel/debug/tracing/set_ftrace_filterecho 1 > /sys/kernel/debug/tracing/tracing_on# ... 运行一段时间 ...cat /sys/kernel/debug/tracing/trace

5.3 Core Dump 分析

程序崩溃时,保存现场比打印日志更有价值:

# 允许生成 core dumpulimit -c unlimitedecho '/tmp/core.%e.%p' > /proc/sys/kernel/core_pattern# 事后用 gdb 分析gdb ./myapp /tmp/core.myapp.1234(gdb) bt          # 查看崩溃时的调用栈(gdb) info locals # 查看局部变量

5.4 系统级性能分析

# perf:采样 CPU 热点perf record -g ./myappperf report# 查看调度延迟cyclictest -t1 -p 80 -n -i 1000 -l 10000# 专门用于测量实时系统的调度抖动

核心转变:调试能力需要覆盖从应用到内核的完整链路,而不是只盯着自己写的那层代码。

6. 系统构建

从"编译一个 .hex"到"构建完整的 Linux 系统"

单片机的构建很简单:一个工程,编译链接,生成一个固件文件,烧进去,完事。

嵌入式 Linux 是一个系统工程

需要独立构建和集成的部分包括:

Bootloader(U-Boot)    ↓Linux Kernel + 设备树    ↓根文件系统(rootfs)  ├── 基础库(glibc / musl)  ├── 系统服务(systemd / busybox)  ├── 应用程序  └── 配置文件

Buildroot vs Yocto 的本质区别

Buildroot:简单直接,适合资源受限、定制化程度高的场景。整个系统从源码编译,结果可控,但灵活性有限。

Yocto:基于层(layer)的架构,可复用性强,适合需要维护多个硬件平台的团队,但学习曲线很陡。

这两个这里就不具体介绍。

7. 结语

从单片机到嵌入式 Linux,不是"学几个命令"的事,而是需要在六个维度上重建认知:

  • • 硬件访问:理解驱动模型和设备树,而不是直接操作寄存器
  • • 执行模型:理解调度器行为,主动设计实时性
  • • 内存管理:建立动态内存的全生命周期管理意识
  • • 并发设计:掌握多种 IPC 和同步原语,选对工具
  • • 调试能力:从应用到内核的全链路可观测性
  • • 系统构建:把整个 Linux 系统当成交付物来管理

每一个转变单独拿出来都不算太难,难的是同时把这六件事都想清楚,并在实际项目中贯通使用。

往期推荐

GitLab 内部部署与多人协作使用指南

GitLab 局域网安装记录(国内源)

I3C:I2C 的下一代总线

嵌入式 Linux 实时性入门:PREEMPT_RT 到底解决了什么问题?

STM32 擦除失败,解析Option Bytes陷阱

嵌入式里的NPU它到底能干什么?

Linux 中的 buffer 与cache

嵌入式工程师都该懂一点安全

面试技巧-2.注意要点

面试技巧-1.STAR法则

嵌入式中动态库路径的那些坑

嵌入式开发中常用存储认识

A/B 分区 OTA 升级机制与 U-Boot 实现

嵌入式系统 OTA 固件升级

“阅读原文”一起来充电吧!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 09:32:46 HTTP/2.0 GET : https://f.mffb.com.cn/a/497488.html
  2. 运行时间 : 0.100318s [ 吞吐率:9.97req/s ] 内存消耗:4,604.72kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6862c9397f862a434c3ba1a388e33a2e
  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.000606s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000837s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000324s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000259s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000466s ]
  6. SELECT * FROM `set` [ RunTime:0.000201s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000494s ]
  8. SELECT * FROM `article` WHERE `id` = 497488 LIMIT 1 [ RunTime:0.000426s ]
  9. UPDATE `article` SET `lasttime` = 1783042366 WHERE `id` = 497488 [ RunTime:0.017965s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000245s ]
  11. SELECT * FROM `article` WHERE `id` < 497488 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000432s ]
  12. SELECT * FROM `article` WHERE `id` > 497488 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004440s ]
  13. SELECT * FROM `article` WHERE `id` < 497488 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000753s ]
  14. SELECT * FROM `article` WHERE `id` < 497488 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000689s ]
  15. SELECT * FROM `article` WHERE `id` < 497488 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004459s ]
0.101892s