当前位置:首页>Linux>【简单嵌入式】在 Linux 内核中增加一个驱动6 个核心阶段

【简单嵌入式】在 Linux 内核中增加一个驱动6 个核心阶段

  • 2026-03-29 13:43:18
【简单嵌入式】在 Linux 内核中增加一个驱动6 个核心阶段

【简单嵌入式】在 Linux 内核中增加一个驱动6 个核心阶段


一、前期准备:明确需求与调研

✅ 工作内容:

  1. 1. 确认硬件规格
    • • 芯片型号(如 MCP3208、ADS1115)
    • • 通信接口(SPI/I2C)
    • • 协议细节(命令格式、时序、数据位宽、参考电压)
    • • 是否支持中断(DRDY)、多通道、差分输入等
  2. 2. 检查内核是否已有驱动



    # 在内核源码中搜索
    git grep -l "mcp3208" drivers/iio/adc/
    ls drivers/iio/adc/*ads*  # 常见 TI/ADI 芯片通常已有驱动


    → 若已有,只需配置设备树,无需重写!

  3. 3. 确定使用子系统
    • • ADC/DAC → IIO(Industrial I/O)
    • • 温度传感器 → hwmon
    • • 简单 GPIO 设备 → gpiolib + sysfs
    • • 自定义协议 → 字符设备(miscdevice)

💡 原则:优先复用标准子系统,避免造轮子。


二、设备树(Device Tree)配置

✅ 工作内容:

  1. 1. 在板级 DTS 文件中添加设备节点



    &spi1 {
        status = "okay";
        pinctrl-0 = <&spi1_pins>;

        my_adc: adc@0 {
            compatible = "mycompany,mcp3208"; // ← 关键!必须唯一且匹配驱动
            reg = <0>;                        // CS 片选号
            spi-max-frequency = <2000000>;    // 最大 SPI 频率
            vref-supply = <&vcc_3v3>;         // 参考电压(可选)
        };
    };


  2. 2. 验证引脚复用(pinctrl)已正确配置
    • • 确保 SCLK/MOSI/MISO/CS 引脚被设为 SPI 功能,而非 GPIO

⚠️ 常见错误

  • • compatible 字符串与驱动不匹配 → 驱动无法 probe
  • • 忘记 status = "okay" → 总线未启用

三、编写内核驱动代码

✅ 核心任务(以 IIO ADC 为例):

1. 定义通道描述(iio_chan_spec



1
2
3
4
5

static conststruct iio_chan_spec mcp3208_channels[] = {
    IIO_CHANNEL_RAW(0),
    IIO_CHANNEL_RAW(1),
    // ... 支持 8 通道
};


→ 描述每个通道的类型(电压)、索引、支持的操作(raw/scale)

2. 实现 .read_raw 回调



1
2
3
4
5
6
7
8
9
10
11
12
13
14

static int mcp3208_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
                            int *val, int *val2, long mask)
{
    switch (mask) {
    case IIO_CHAN_INFO_RAW:
        *val = mcp3208_read_channel(chan->channel); // 内部调用 spi_sync
        return IIO_VAL_INT;
    case IIO_CHAN_INFO_SCALE:
        *val = 3300; *val2 = 12; // 3.3V / 2^12
        return IIO_VAL_FRACTIONAL_LOG2;
    }
    return -EINVAL;
}


3. 填充 iio_info 和 iio_dev



1
2
3
4
5
6
7
8
9
10
11
12
13

static conststruct iio_info mcp3208_info = {
    .read_raw = mcp3208_read_raw,
};

static int mcp3208_probe(struct spi_device *spi)
{
struct iio_dev *indio_dev = devm_iio_device_alloc(...);
    indio_dev->info = &mcp3208_info;
    indio_dev->channels = mcp3208_channels;
    indio_dev->num_channels = ARRAY_SIZE(mcp3208_channels);
    indio_dev->name = "mcp3208";
    return devm_iio_device_register(&spi->dev, indio_dev);
}


4. 注册 spi_driver 并匹配设备树



1
2
3
4
5
6
7
8
9
10
11
12
13

static conststruct of_device_id mcp3208_of_match[] = {
    { .compatible = "mycompany,mcp3208" },
    { }
};

staticstruct spi_driver mcp3208_driver = {
    .probe = mcp3208_probe,
    .driver = {
        .name = "mcp3208",
        .of_match_table = mcp3208_of_match,
    },
};
module_spi_driver(mcp3208_driver);


🔑 关键点

  • • 使用 devm_ 系列函数自动管理资源释放;
  • • 不要手动创建 /dev 节点 —— IIO Core 自动处理;
  • • 并发访问需加锁(mutex)。

四、内核配置与编译

✅ 工作内容:

  1. 1. 将驱动加入 Kconfig 和 Makefile



    # drivers/iio/adc/Kconfig
    config MCP3208
        tristate "Microchip MCP3208 ADC driver"
        depends on SPI
        help
          Say yes here to build support for ...

    # drivers/iio/adc/Makefile
    obj-$(CONFIG_MCP3208) += mcp3208.o


  2. 2. 配置内核选项


    1
    2

    make menuconfig
    # Device Drivers → Industrial I/O Support → ADC → [*] MCP3208


  3. 3. 编译



    # 编译进内核
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

    # 或编译为模块
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules



五、部署与测试

✅ 工作内容:

  1. 1. 更新目标板
    • • 复制新内核/模块/设备树到开发板
  2. 2. 验证驱动加载



    dmesg | grep mcp3208      # 应有 "probed" 日志
    ls /sys/bus/iio/devices/  # 应出现 iio:deviceX


  3. 3. 用户空间读取数据



    # 单次读取
    cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw

    # 计算电压
    RAW=$(cat .../in_voltage0_raw)
    SCALE=$(cat .../in_voltage_scale)
    echo "$RAW * $SCALE" | bc


  4. 4. 高级功能测试(如支持)
    • • 触发采样:echo hrtimer > .../trigger/current_trigger
    • • 缓冲区读取:dd if=/dev/iio:device0 ...

六、集成到构建系统(Buildroot/Yocto)

✅ 工作内容(以 Buildroot 为例):

  1. 1. 创建驱动包



    mkdir package/mcp3208-driver


  2. 2. 编写 mcp3208-driver.mk



    MCP3208_DRIVER_VERSION = 1.0
    MCP3208_DRIVER_SITE = $(TOPDIR)/package/mcp3208-driver
    MCP3208_DRIVER_SITE_METHOD = local
    MCP3208_DRIVER_MODULE_SUBDIRS = .
    $(eval $(kernel-module))
    $(eval $(generic-package))


  3. 3. 启用驱动



    make menuconfig
    # Target packages → Hardware handling → [*] mcp3208-driver


  4. 4. 构建完整系统



    make


    → 驱动自动打包进 rootfs,开机可自动加载。


七、关键原则总结

阶段
核心思想
设计
优先使用标准子系统(IIO/hwmon),避免自定义 ioctl
实现
利用内核提供的资源管理(devm_)、并发保护(mutex
接口
通过 sysfs/chrdev 暴露标准化属性,而非私有 API
测试
用标准工具(iio_info)验证,而非仅自测程序
维护
遵循内核编码规范,便于未来合入主线

八、分步详解:三者如何联动

步骤 1:DTS —— 告诉内核“硬件长什么样”



1
2
3
4
5
6
7
8
9

// myboard.dts
&spi1 {
    status = "okay";
    adc: mcp3008@0 {
        compatible = "microchip,mcp3008"; // ← 关键标识
        reg = <0>;                        // CS0
        spi-max-frequency = <1000000>;
    };
};


🔗 作用:

  • • &spi1:声明该设备挂载在 SoC 的 SPI1 总线上;
  • • compatible:提供唯一标识符,用于匹配驱动;
  • • reg:指定片选信号(CS0);
  • • spi-max-frequency:配置 SPI 时钟上限。

💡 DTS 本身不包含代码,它只是数据,由内核在启动时解析。


步骤 2:内核 —— 创建设备实例并匹配驱动

  1. 1. 内核解析 DTS
    • • 遇到 mcp3008@0 节点;
    • • 创建 



      struct spi_device


      实例,填充:




      spi->modalias = "spi:mcp3008";
      spi->of_node->compatible = "microchip,mcp3008";
      spi->chip_select = 0;
      spi->max_speed_hz = 1000000;


  2. 2. 总线匹配驱动
    • • 内核遍历所有已注册的 spi_driver
    • • 比较 driver.of_match_table 与 spi_device.of_node.compatible
    • • 匹配成功 → 调用 driver.probe(spi_device*)

🔑 此时 DTS 与驱动通过 compatible 字符串建立联系


步骤 3:驱动 —— 实现硬件操作并注册标准接口



1
2
3
4
5
6
7
8
9
10

// mcp3008.c
static int mcp3008_probe(struct spi_device *spi)
{
struct iio_dev *indio_dev = devm_iio_device_alloc(...);

    // 1. 封装 SPI 通信(使用 spi_device)
    // 2. 定义通道(IIO_CHAN_SPEC)
    // 3. 注册到 IIO 子系统
    return devm_iio_device_register(&spi->dev, indio_dev);
}


🔗 驱动做了什么?

  • • 利用 spi_device:调用 spi_sync() 与 SoC SPI 控制器通信;
  • • 注册 IIO 设备

    :IIO Core 自动创建:

    • • sysfs 目录:/sys/bus/iio/devices/iio:device0/
    • • 属性文件:in_voltage0_rawin_voltage_scale
    • • 字符设备:/dev/iio:device0(用于缓冲采样)

💡 驱动是桥梁
它把 DTS 描述的硬件 转化为 内核可管理的对象,并暴露标准化接口


步骤 4:POSIX —— 提供用户空间访问的通用方式

用户程序通过 标准 POSIX 文件 API 访问 ADC:



1
2
3
4
5
6
7
8
9
10
11
12

#include <stdio.h>
#include <fcntl.h>

// 方式1:sysfs(单次读取)
FILE *f = fopen("/sys/bus/iio/devices/iio:device0/in_voltage0_raw", "r");
int raw;
fscanf(f, "%d", &raw); // ← POSIX stdio

// 方式2:字符设备(高速采样)
int fd = open("/dev/iio:device0", O_RDONLY); // ← POSIX open()
char buf[1024];
read(fd, buf, sizeof(buf)); // ← POSIX read()


🔗 POSIX 的角色:

  • • 不关心底层是什么设备,只认“文件路径”;
  • • sysfs 和 /dev 是 Linux 对 POSIX “一切皆文件”的扩展实现
  • • 所有操作(open/read/write/ioctl)都映射到内核的 VFS(虚拟文件系统)层,最终调用驱动的 .read 或 .ioctl 回调。

✅ POSIX 是用户与内核之间的契约,而 驱动 + DTS 是内核与硬件之间的契约


九、关键连接点总结

连接点
机制
示例
DTS → 驱动compatible
 字符串匹配
"microchip,mcp3008"
驱动 → 硬件struct spi_device
 / i2c_client
spi_sync(spi, &msg)
驱动 → POSIX
注册 sysfs 属性或字符设备
iio_device_register()
 → /sys/.../raw
POSIX → 用户
标准文件 API
open()
read()fscanf()

十、一个完整数据流示例(读取 ADC)

  1. 1. 用户输入


    1

    cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw


  2. 2. POSIX 层
    • • Shell 调用 open() → read() → write(stdout)
  3. 3. VFS 层
    • • 根据路径 /sys/.../raw 找到对应的 sysfs attribute
  4. 4. IIO Core
    • • 调用驱动的 .read_raw(..., IIO_CHAN_INFO_RAW)
  5. 5. 驱动
    • • 构造 SPI 命令 → 调用 spi_sync()
  6. 6. SPI 子系统
    • • 路由到 SoC 的 SPI 控制器驱动(如 spi-rockchip.c
  7. 7. 硬件
    • • SoC 发出 SCLK/MOSI,ADC 返回 MISO 数据
  8. 8. 数据回传
    • • 驱动解析 raw 值 → 返回给 IIO Core → sysfs → Shell → 终端显示

🔁 全程无需用户知道

  • • SoC 是 RK3588 还是 i.MX6?
  • • ADC 是 SPI 还是 I2C?
  • • 内核版本是多少?

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-29 20:10:24 HTTP/2.0 GET : https://f.mffb.com.cn/a/483825.html
  2. 运行时间 : 0.177490s [ 吞吐率:5.63req/s ] 内存消耗:4,860.66kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e335966a57436a1f3b0b0f31920fe894
  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.001031s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001359s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000590s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000627s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001266s ]
  6. SELECT * FROM `set` [ RunTime:0.000505s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001344s ]
  8. SELECT * FROM `article` WHERE `id` = 483825 LIMIT 1 [ RunTime:0.001074s ]
  9. UPDATE `article` SET `lasttime` = 1774786225 WHERE `id` = 483825 [ RunTime:0.007830s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000595s ]
  11. SELECT * FROM `article` WHERE `id` < 483825 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000938s ]
  12. SELECT * FROM `article` WHERE `id` > 483825 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001202s ]
  13. SELECT * FROM `article` WHERE `id` < 483825 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002560s ]
  14. SELECT * FROM `article` WHERE `id` < 483825 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001767s ]
  15. SELECT * FROM `article` WHERE `id` < 483825 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003535s ]
0.180849s