当前位置:首页>Linux>从MCU到Linux开发,得打破思维限制

从MCU到Linux开发,得打破思维限制

  • 2026-01-19 13:23:36
从MCU到Linux开发,得打破思维限制

初次接触嵌入式Linux时,可能会感到困惑:

  • • 为什么不能直接操作硬件? 在MCU上,你可以直接写GPIOA->ODR |= 0x01,但在Linux中却要通过文件系统操作
  • • 什么是内核空间和用户空间? MCU上所有代码都在同一地址空间运行

核心原因:MCU是"裸机"系统,拥有完全控制权;而Linux是一个多任务操作系统,需要遵循操作系统的规则和抽象。

差异理解

MMU与虚拟内存:地址不再是"真实"的

MCU的思维(直接映射)

在MCU上,地址是"真实"的:

// STM32中,0x40020000就是GPIOA的物理地址GPIOA->ODR = 0x01;  // 直接操作物理地址

特点

  • • 地址0x40020000就是硬件寄存器的真实位置
  • • 所有程序共享同一个地址空间
  • • 程序可以直接访问任何地址(包括硬件寄存器)

Linux的思维(虚拟内存)

在Linux中,地址是"虚拟"的:

// Linux中,你看到的地址0x40020000可能是虚拟地址// 实际物理地址可能完全不同

MMU(Memory Management Unit)的作用

  • • 地址转换:将程序使用的虚拟地址转换为实际的物理地址
  • • 内存保护:防止程序访问不属于它的内存区域
  • • 内存共享:多个程序可以共享同一段物理内存

形象比喻

  • • MCU:就像你直接住在房子里,门牌号就是真实地址
  • • Linux:就像你住在酒店,房间号(虚拟地址)和实际楼层(物理地址)是分开的,前台(MMU)负责转换

为什么需要虚拟内存?

  1. 1. 安全性:程序无法直接访问其他程序的内存或硬件
  2. 2. 多任务:每个程序都认为自己在使用完整的地址空间
  3. 3. 内存管理:操作系统可以灵活分配和回收内存

对开发的影响

  • • 不能直接访问硬件寄存器,必须通过驱动
  • • 地址0x40020000在你的程序中可能指向完全不同的位置
  • • 需要理解用户空间和内核空间的地址映射关系

进程与线程:从"单任务"到"多任务"

MCU的思维(前后台系统或RTOS)

在MCU上,通常是:

// 前后台系统voidmain() {while(1) {        task1();  // 任务1        task2();  // 任务2        task3();  // 任务3    }}// 或者RTOSvoidtask1(void *pvParameters) {while(1) {// 任务代码        vTaskDelay(100);    }}

特点

  • • 所有任务共享同一个地址空间
  • • 任务间可以直接访问全局变量
  • • 任务切换由RTOS调度器管理

Linux的思维(进程和线程)

在Linux中,有进程和线程的概念:

进程(Process)

  • • 独立的地址空间
  • • 拥有独立的资源(文件描述符、内存等)
  • • 进程间通信需要特殊机制(管道、共享内存、消息队列等)

线程(Thread)

  • • 共享进程的地址空间
  • • 共享进程的资源
  • • 线程间可以直接访问共享变量

形象比喻

  • • MCU任务:就像同一间办公室里的不同员工,共享所有资源
  • • Linux进程:就像不同的公司,各自有独立的办公室和资源
  • • Linux线程:就像同一公司里的不同部门,共享公司资源但各自工作

对开发的影响

  • • 需要理解进程间通信(IPC)机制
  • • 多线程编程需要注意同步和互斥
  • • 程序崩溃不会影响其他进程(这是好事!)

内核空间与用户空间:权限的分离

MCU的思维(统一空间)

在MCU上:

// 所有代码都在同一权限级别voidgpio_init() {// 直接操作寄存器    GPIOA->MODER |= 0x01;}voiduser_function() {    gpio_init();  // 用户代码可以直接调用}

特点

  • • 所有代码都有相同的权限
  • • 可以直接访问硬件
  • • 没有权限保护

Linux的思维(空间分离)

在Linux中,系统分为两个空间:

用户空间(User Space)

  • • 运行应用程序
  • • 不能直接访问硬件
  • • 不能直接访问内核内存
  • • 通过系统调用与内核交互

内核空间(Kernel Space)

  • • 运行操作系统内核
  • • 可以访问所有硬件
  • • 可以访问所有内存
  • • 拥有最高权限
┌─────────────────────────────────────┐│  用户空间 (User Space)               ││  ┌─────────┐  ┌─────────┐          ││  │ 应用1   │  │ 应用2   │          ││  └────┬────┘  └────┬────┘          ││       │            │                ││       └──────┬─────┘                ││              │ 系统调用              │├──────────────┼──────────────────────┤│  内核空间 (Kernel Space)             ││  ┌──────────────────────────────┐  ││  │  设备驱动、文件系统、网络栈   │  ││  └──────────────────────────────┘  ││              │                      ││              │ 直接访问              │├──────────────┼──────────────────────┤│  硬件层 (Hardware)                  ││  GPIO、UART、I2C等                  │└─────────────────────────────────────┘

形象比喻

  • • MCU:就像所有人都在同一个房间里,可以随意操作任何设备
  • • Linux:就像有普通员工(用户空间)和管理员(内核空间),普通员工需要通过管理员才能操作设备

对开发的影响

  • • 应用程序不能直接操作硬件,必须通过驱动
  • • 驱动运行在内核空间,需要特殊权限
  • • 用户程序和内核程序使用不同的API

为什么需要这种分离?

  1. 1. 安全性:防止应用程序破坏系统
  2. 2. 稳定性:应用程序崩溃不会影响内核
  3. 3. 可移植性:应用程序不需要关心硬件细节

开发流程的转变

交叉编译:为什么不能在目标板上编译?

MCU的思维(本地编译)

在MCU开发中:

PC (开发环境)  ↓ 编译.hex / .bin 文件  ↓ 烧录MCU (目标板)

特点

  • • 编译器和目标平台架构相同(都是ARM Cortex-M)
  • • 可以直接在PC上编译,生成目标代码
  • • 编译速度快,工具链简单

Linux的思维(交叉编译)

在Linux嵌入式开发中:

PC (x86_64架构)  ↓ 交叉编译工具链ARM架构的可执行文件  ↓ 传输到目标板MPU (ARM架构,运行Linux)

为什么需要交叉编译?

  1. 1. 性能差异:PC性能强大,编译速度快;目标板资源有限,编译慢
  2. 2. 工具链:目标板上可能没有完整的开发工具
  3. 3. 开发效率:在PC上开发调试更方便

交叉编译工具链组成

  • • gcc:交叉编译器(如arm-linux-gnueabihf-gcc
  • • binutils:二进制工具(如objdumpobjcopy
  • • glibc:C标准库(针对目标架构)
  • • 内核头文件:编译驱动时需要

常用交叉编译工具链

  • • ARMarm-linux-gnueabihf-gcc(硬浮点)
  • • ARM64aarch64-linux-gnu-gcc
  • • 树莓派:可以使用官方提供的工具链

实际使用示例

# 在PC上编译ARM程序arm-linux-gnueabihf-gcc hello.c -o hello# 将编译好的程序传输到目标板scp hello root@192.168.1.100:/home/root/# 在目标板上运行./hello

根文件系统:Linux的"文件组织方式"

MCU的思维(简单存储)

在MCU上:

Flash存储├── Bootloader (启动代码)├── Application (应用程序)└── Data (数据区,可选)

特点

  • • 存储结构简单
  • • 通常没有文件系统
  • • 数据以二进制形式存储

Linux的思维(文件系统)

在Linux中,一切皆文件:

根文件系统 (/)├── bin/      (基本命令)├── sbin/     (系统命令)├── etc/      (配置文件)├── dev/      (设备文件)├── proc/     (进程信息)├── sys/      (系统信息)├── usr/      (用户程序)├── var/      (可变数据)└── home/     (用户目录)

根文件系统的作用

  1. 1. 提供系统命令lscdcat
  2. 2. 设备管理:通过/dev目录访问硬件
  3. 3. 配置管理:通过/etc目录管理配置
  4. 4. 程序运行:提供动态库和运行时环境

常见的根文件系统类型

  • • BusyBox:轻量级,适合资源受限的系统
  • • Buildroot:自动化构建工具,可以定制根文件系统
  • • Yocto:更强大的构建系统,适合复杂项目
  • • Debian/Ubuntu:完整的Linux发行版,功能丰富

构建根文件系统的步骤

  1. 1. 选择基础系统(如BusyBox)
  2. 2. 添加必要的命令和工具
  3. 3. 配置系统服务
  4. 4. 添加应用程序
  5. 5. 打包成镜像文件

对开发的影响

  • • 需要理解Linux文件系统结构
  • • 应用程序通常放在/usr/bin/home目录
  • • 配置文件放在/etc目录
  • • 设备通过/dev目录访问

内核裁剪与编译:定制你的Linux内核

MCU的思维(固定固件)

在MCU上:

选择芯片型号  ↓使用官方固件库  ↓编译生成固件

特点

  • • 固件功能相对固定
  • • 主要关注应用层开发
  • • 很少需要修改底层代码

Linux的思维(可定制内核)

在Linux中,内核是可以裁剪和定制的:

内核配置选项

  • • 驱动支持:选择需要的设备驱动
  • • 文件系统:选择支持的文件系统类型
  • • 网络协议:选择网络功能
  • • 调试功能:选择调试工具

内核编译流程

# 1. 获取内核源码git clone https://github.com/raspberrypi/linux.git# 2. 配置内核make menuconfig  # 图形化配置界面# 或make defconfig   # 使用默认配置# 3. 编译内核make -j4  # 使用4个线程并行编译# 4. 安装内核模块make modules_install# 5. 安装内核make install

内核裁剪的原则

  1. 1. 只包含需要的功能:减少内核体积和启动时间
  2. 2. 驱动可以编译成模块:需要时加载,不需要时卸载
  3. 3. 保留调试功能:开发阶段保留,发布时可以移除

常用配置工具

  • • menuconfig:基于ncurses的文本界面
  • • xconfig:基于Qt的图形界面
  • • gconfig:基于GTK的图形界面

对开发的影响

  • • 需要了解内核配置选项
  • • 驱动开发需要重新编译内核或模块
  • • 内核版本影响驱动兼容性

驱动开发:从寄存器操作到file_operations

MCU驱动开发思维

在MCU上,驱动通常是这样的:

// STM32 GPIO驱动示例voidgpio_init(GPIO_TypeDef* GPIOx, uint16_t pin) {// 直接操作寄存器    GPIOx->MODER |= (1 << (pin * 2));  // 设置为输出模式}voidgpio_set(GPIO_TypeDef* GPIOx, uint16_t pin) {    GPIOx->BSRR = (1 << pin);  // 设置引脚为高}voidgpio_clear(GPIO_TypeDef* GPIOx, uint16_t pin) {    GPIOx->BSRR = (1 << (pin + 16));  // 设置引脚为低}// 使用gpio_init(GPIOA, 5);gpio_set(GPIOA, 5);

特点

  • • 直接操作寄存器
  • • 函数调用简单直接
  • • 代码量少,逻辑清晰

Linux驱动开发思维

在Linux中,驱动必须遵循操作系统的框架:

字符设备驱动基本框架

Linux字符设备驱动的核心是file_operations结构体:

#include<linux/module.h>#include<linux/fs.h>#include<linux/cdev.h>// 设备结构体structmy_device {structcdevcdev;// 其他设备特定数据};// 打开设备staticintmy_open(struct inode *inode, struct file *file) {// 初始化设备return0;}// 关闭设备staticintmy_release(struct inode *inode, struct file *file) {// 清理资源return0;}// 读取数据staticssize_tmy_read(struct file *file, char __user *buf, size_t count, loff_t *pos) {// 从设备读取数据到用户空间return count;}// 写入数据staticssize_tmy_write(struct file *file, constchar __user *buf,size_t count, loff_t *pos) {// 从用户空间写入数据到设备return count;}// 控制操作(ioctl)staticlongmy_ioctl(struct file *file, unsignedint cmd, unsignedlong arg) {// 设备特定的控制操作return0;}// file_operations结构体:定义驱动支持的操作staticstructfile_operationsmy_fops = {    .owner = THIS_MODULE,    .open = my_open,    .release = my_release,    .read = my_read,    .write = my_write,    .unlocked_ioctl = my_ioctl,};// 模块初始化staticint __init my_init(void) {// 注册字符设备// 创建设备节点return0;}// 模块退出staticvoid __exit my_exit(void) {// 注销设备// 删除设备节点}module_init(my_init);module_exit(my_exit);MODULE_LICENSE("GPL");

关键概念理解

1. file_operations结构体

  • • 这是驱动和应用程序之间的"接口契约"
  • • 应用程序通过系统调用(如openreadwrite)访问设备
  • • 内核将这些系统调用路由到对应的file_operations函数

2. 用户空间和内核空间的数据交换

// 从内核空间复制数据到用户空间copy_to_user(user_buf, kernel_buf, size);// 从用户空间复制数据到内核空间copy_from_user(kernel_buf, user_buf, size);

为什么需要copy_to_user/copy_from_user?

  • • 用户空间和内核空间使用不同的地址映射
  • • 不能直接使用指针访问
  • • 需要内核提供的安全复制函数

3. 设备节点(/dev/xxx)

  • • 驱动注册后,会在/dev目录下创建设备节点
  • • 应用程序通过打开这个设备文件来访问驱动
  • • 例如:/dev/gpio/dev/led

应用程序如何使用驱动

// 应用程序代码int fd = open("/dev/mydevice", O_RDWR);  // 打开设备read(fd, buffer, size);                   // 读取数据write(fd, data, size);                    // 写入数据ioctl(fd, CMD, arg);                      // 控制操作close(fd);                                // 关闭设备

驱动开发的关键差异

方面
MCU驱动
Linux驱动
代码位置
应用层
内核层
访问方式
直接函数调用
通过文件系统
权限
无限制
需要内核权限
错误处理
简单返回
返回错误码
并发控制
通常不需要
需要互斥锁等
代码量
几十行
几百到几千行

驱动开发的实际流程

步骤1:编写驱动代码

  • • 实现file_operations中的必要函数
  • • 处理硬件初始化
  • • 实现数据读写逻辑

步骤2:编译驱动

# 编写Makefileobj-m += mydriver.o# 编译make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

步骤3:加载驱动

# 加载模块insmod mydriver.ko# 查看加载的模块lsmod# 卸载模块rmmod mydriver

步骤4:创建设备节点

# 驱动加载后,可能需要手动创建设备节点mknod /dev/mydevice c 250 0# 或使用udev自动创建设备节点

步骤5:测试驱动

// 编写测试程序intmain() {int fd = open("/dev/mydevice", O_RDWR);// 测试读写操作    close(fd);return0;}

总结

从MCU转向Linux嵌入式开发,不仅仅是学习新的技术,更是一次思维方式的转变。MCU开发强调直接控制和实时响应,而Linux开发强调系统抽象和资源管理。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

关注我的微信公众号,回复“星球”加入知识星球,有问必答。


点击“阅读原文”查看知识星球详情,欢迎点分享、收藏、点赞、在看。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 20:51:30 HTTP/2.0 GET : https://f.mffb.com.cn/a/463935.html
  2. 运行时间 : 0.113674s [ 吞吐率:8.80req/s ] 内存消耗:4,587.58kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=28b9a9842b5eaeef7aa1abf271738ae5
  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.000490s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000846s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.007080s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000356s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000594s ]
  6. SELECT * FROM `set` [ RunTime:0.009525s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000677s ]
  8. SELECT * FROM `article` WHERE `id` = 463935 LIMIT 1 [ RunTime:0.001828s ]
  9. UPDATE `article` SET `lasttime` = 1770555090 WHERE `id` = 463935 [ RunTime:0.004999s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000774s ]
  11. SELECT * FROM `article` WHERE `id` < 463935 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004035s ]
  12. SELECT * FROM `article` WHERE `id` > 463935 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002895s ]
  13. SELECT * FROM `article` WHERE `id` < 463935 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011104s ]
  14. SELECT * FROM `article` WHERE `id` < 463935 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001388s ]
  15. SELECT * FROM `article` WHERE `id` < 463935 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001840s ]
0.115248s