当前位置:首页>Linux>Linux内核从QEMU启动到start_kernel-番外篇-1

Linux内核从QEMU启动到start_kernel-番外篇-1

  • 2026-08-20 22:30:02
Linux内核从QEMU启动到start_kernel-番外篇-1

Linux内核从QEMU启动到start_kernel-番外篇-1.md

[toc]

文档摘要: 本文为 x86_64 架构下 Linux 内核启动流程分析的番外篇,旨在从底层硬件规范计算机发展历史历史遗留与**内核引导协议(Linux Boot Protocol)**三大维度,深度剖析系统从 CPU 上电复位(Reset Vector)、固件初始化、QEMU 直引(Direct Boot)到内核 _start0x90200)入口点的全过程,并提供可操作的 GDB 动态验证手段。


一、 规范界限:Intel 芯片手册 vs. 系统固件与 Boot Protocol

在分析 x86_64 内核启动时,首先需要厘清不同层次规范的权责边界:

+-----------------------------------------------------------------------+
|  Intel 芯片手册 (硬件规范)                                              |
|  - 仅定义 CPU 上电/复位第一条指令物理地址:Reset Vector (0xFFFFFFF0)       |
+-----------------------------------------------------------------------+
                                   | (硬件逻辑接力)
                                   v
+-----------------------------------------------------------------------+
|  固件与 Bootloader 规范 (BIOS / UEFI / BBS / Multiboot)                |
|  - 定义 BIOS 加载 MBR 物理地址:0x7C00                                  |
|  - 定义 UEFI 动态加载 PE/COFF 文件与 Entry Point                        |
+-----------------------------------------------------------------------+
                                   | (固件逻辑接力)
                                   v
+-----------------------------------------------------------------------+
|  Linux x86 引导协议 (Linux Boot Protocol)                             |
|  - 定义 Bootloader 切分加载 bzImage 的内存布局                          |
|  - 定义 16位 实模式入口点:0x90200 (基址 0x90000 + 偏移 0x0200)          |
|  - 定义 32位 保护模式入口点:0x100000 (1MB 物理内存处)                  |
+-----------------------------------------------------------------------+

1.1 Intel 芯片手册真正定义的是什么?(Reset Vector)

Intel 芯片手册(《Intel 64 and IA-32 Architectures Software Developer's Manual》, Vol 3A, §9.1.4)并未定义任何 BIOS 跳转到 OS 内核的代码地址。硬件手册唯一强制规定的是:CPU 上电或复位(Reset)后执行的第一条指令的物理地址,即 Reset Vector,固定为 0xFFFFFFF0(即 4GB 物理地址空间顶端往下 16 字节处)。

【硬件机制:段描述符高速缓存(Shadow Register)与 Far Jump】

在 CPU 上电的瞬间,CPU 处于 16 位实模式。按照实模式的标准寻址公式,。若 ,计算出的物理地址仅为 (1MB 顶端),而非 (4GB 顶端)。

Intel 通过段描述符高速缓存(隐藏段基址 / Shadow Register)解决了这一矛盾:

  1. 1. CS 可见选择子(Selector):被硬件重置为 0xF000
  2. 2. EIP 寄存器:被硬件重置为 0x0000FFF0
  3. 3. CS 隐藏基址(Shadow Base):被硬件强制拉高并硬编码为 0xFFFF0000

因此,硬件实际计算的物理地址为:

Intel 规范手册原文(Vol 3A §9.1.4):
"The CS register has two parts: a visible segment selector part and a hidden base address part... Upon reset, the visible part of the CS register is initialized to F000H and the hidden base address is initialized to FFFF0000H. The IP is initialized to FFF0H. ... This results in the physical address FFFFFFF0H."

在物理地址 0xFFFFFFF0 处,主板 ROM 固化了一条 5 字节的段间远跳转指令(Far Jump)

jmp far 0xF000:0xE05B    # 机器码: EA 5B E0 00 F0 (目标偏移依 BIOS 厂商而异)

跳转与回落过程:

  1. 1. 更新 EIP:写入偏移量 0xE05B
  2. 2. 更新 CS 选择子:写入 0xF000
  3. 3. 刷新隐藏段基址:CPU 重新加载 CS 选择子时,MMU 按照实模式标准规则重新计算并覆写隐藏段基址:

物理寻址切换为:,CPU 成功“掉回”传统的 1MB 内存天花板区域(0xF0000 ~ 0xFFFFF)。

为什么必须掉回 1MB 区域?

  • • 历史兼容:IBM PC 规范将 0xF0000 ~ 0xFFFFF(64KB)定为系统 BIOS 区域,0xFFFF0 对应 8086 时代的标准 Reset 入口。
  • • 硬件双重映射:主板芯片组将物理 BIOS ROM 同时映射到了高位(0xFFFE0000 ~ 0xFFFFFFFF)和低位(0xF0000 ~ 0xFFFFF)。
  • • 实模式初始化:BIOS 需要在低端内存建立中断向量表(IVT,0x0000)与 BIOS 数据区(BDA,0x0400),必须使用标准的 16 位段寻址能力。

1.2 验证步骤

## qemu启动内核模拟从磁盘启动。-d in_asm(日志直接打印汇编)
qemu-system-x86_64 \
-drive file=disk.img,format=raw,index=0,media=disk \
-nographic \
-s -S \
-d in_asm

#
# gdb调试远程debug并查看寄存器的值
CS Shadow Base(隐藏基址) = 0xFFFF0000 第二列表示隐藏基地址
EIP=0x0000fff0
物理地址:CS Shadow Base + EIP = 0xFFFFFFF0。 证明开机后的cpu执行的第一条指令的物理地址
zjy@DESKTOP-NHUJSDK:~/kernel-lab/linux/linux-2.6.39$ gdb-multiarch vmlinux
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
(gdb) monitor info registers
CPU#
0
EIP=0000fff0
CS =f000 ffff0000 0000ffff 00009b00



执行以下命名可以查看反汇编指令。ljmp 代表 Long Jump(远跳转) CS 选择子 被更新为 0xF000  IP / EIP 被更新为 0xE05B
CPU 正式离开 4GB 物理地址顶端,回落到了常规 1MB 内存区域内(0xFE05B)继续执行 BIOS 的后续初始化流程。
(gdb) monitor xp /5bx 0xFFFFFFF0
00000000fffffff0: 0xea 0x5b 0xe0 0x00 0xf0
zjy@DESKTOP-NHUJSDK:/mnt/c/Users/Administrator$ echo "ea 5b e0 00 f0" | xxd -r -p > /tmp/code.bin && objdump -m i8086 -b binary -D /tmp/code.bin
/tmp/code.bin:     file format binary
Disassembly of section .data:
00000000 <.data>:
   0:   ea 5b e0 00 f0          ljmp   $0xf000,$0xe05b

1.2 历史工程抉择:为什么 MBR 偏偏加载到 0x7C00

MBR(Master Boot Record,主引导记录) 是传统 BIOS 启动方式下,硬盘的第一个扇区(第 0 扇区)中的特殊数据结构

1981 年 IBM 发布第一代 IBM PC (5150) 时,由 David Bradley 主导的设计团队在面对标配仅 32 KB0x0000 ~ 0x7FFF)物理内存的极其严苛条件下,做出了精密的算术倒推:

0x0000 +--------------------------------------------------+
       | 中断向量表 (IVT) & BIOS 数据区 (BDA)              |
0x0500 +--------------------------------------------------+
       | 可供 OS 使用的大片连续低端内存                    |
       | (从 0x0500 延伸至 0x7BFF,约 29.75 KB)            |
0x7C00 +--------------------------------------------------+ <-- MBR 最佳加载点
       | MBR 扇区代码 (512 字节,物理磁盘 1 扇区最小单位)     |
0x7E00 +--------------------------------------------------+
       | MBR 运行时的栈空间 (512 字节,向下增长)           |
0x7FFF +--------------------------------------------------+ <-- 32 KB 物理内存顶端
  1. 1. 磁盘物理特性:早期软盘/硬盘的物理最小读写单位是 512 字节(CHS 寻址 0 柱面、0 磁头、1 扇区)。因此 MBR 大小必须为 512 字节(0x0200)。
  2. 2. 顶端算术倒推
  • • 32 KB 内存的最大物理地址为 0x7FFF
  • • 留出 MBR 扇区代码空间(512 字节):0x8000 - 0x0200 = 0x7E00
  • • x86 栈向下增长。为防止 MBR 运行时压栈(PUSH)覆盖自身代码,预留 512 字节栈空间:0x7E00 - 0x0200 = 0x7C00

结论0x7C00 是在 32 KB 物理内存限制下,**既能把 MBR 塞入内存最顶端、不发生溢出,又能为后续操作系统留出最大连续低端内存(0x0500 ~ 0x7BFF)**的算术解,后续写入 IBM PC 规范并沿用至今。


二、 QEMU 启动模式与 Direct Kernel Boot 机制

在 QEMU 模拟环境中执行 Linux 内核时,存在三种不同的启动模式:

启动模式
QEMU 命令行特征
固件与 Bootloader 执行逻辑
Direct Kernel Boot-kernel bzImage
QEMU 充当 Bootloader。跳过 MBR/GRUB,由 QEMU 直接把内核装载到物理内存,并通过微型 Option ROM 直接跳转至 0x90200
Legacy BIOS Boot-hda disk.img
QEMU 依靠内置的 SeaBIOS 读取磁盘 1 扇区 MBR 到 0x7C00,由 GRUB 等接管引导。
UEFI Boot-drive if=pflash... OVMF_CODE.fd
QEMU 加载 OVMF 固件,解析 GPT 分区的 ESP,定位并执行 .efi 可执行文件。

2.1  Legacy BIOS Boot 模式的核心完整流程

[阶段 1] CPU Reset Vector (0xFFFFFFF0)
    │
    ▼
[阶段 2] SeaBIOS 主体初始化 (0xFE05B)
    │
    ▼
[阶段 3] MBR 读取与加载 (磁盘0号扇区 -> 内存 0x7C00)
    │
    ▼
[阶段 4] GRUB2 接管 (Stage 1 -> Stage 2,解析文件系统并装载 bzImage/initrd)
    │
    ▼
[阶段 5] 16位实模式内核入口 (header.S -> 32位保护模式 startup_32)
    │
    ▼
[阶段 6] 64位长模式内核入口 (startup_64 -> C语言总入口 start_kernel)

2.2 验证步骤

书接上文CPU 执行跳转后落回 1MB 内存顶端的 BIOS 初始化代码区
BIOS 入口。到这里后要delete 否则会原地打转
(gdb) hb *0xfe05b
Hardware assisted breakpoint 1 at 0xfe05b
(gdb) continue
Continuing.
Program received signal SIGTRAP, Trace/breakpoint trap.
0x000000000000e05b in global_cwq ()
(gdb) delete
Delete all breakpoints, watchpoints, tracepoints, and catchpoints? (y or n) y

MBR 引导入口
(gdb) hb *0x7c00
Hardware assisted breakpoint 2 at 0x7c00
(gdb) continue
Continuing.
Breakpoint 3, 0x0000000000007c00 in exception_stacks ()
0x55 0xaa 是 IBM PC 兼容机规范中硬性约定的 “MBR 有效引导魔数(Boot Signature / End-of-Sector Marker)”。
(gdb) monitor xp /2bx 0x7dfe
0000000000007dfe: 0x55 0xaa
(gdb) delete
Delete all breakpoints, watchpoints, tracepoints, and catchpoints? (y or n) y

三、 拆解 0x90200:Linux 引导入口点的终极算术来源

物理地址 0x90200 是 Linux 内核 16 位实模式初始化代码(arch/x86/boot/header.S 中的 _start)的真实起点。

物理内存空间布局 (1MB 限制内):

0x00000 +--------------------------------------+
        | IVT / BDA (中断向量表 / BIOS数据区)   |
        +--------------------------------------+
        | 腾出的大片连续低端内存                 |
        | (用来加载真正的内核压缩镜像 vmlinux)    |
0x90000 +--------------------------------------+ <-- SETUPSEG (基地址 0x90000)
        | Kernel Boot Sector (512 字节 / 0x200) |
0x90200 +--------------------------------------+ <-- _start 入口点 (0x90200)
        | Setup Code (16位 Real-mode Setup)    |
        | Stack / Heap                         |
0x9FFFF +--------------------------------------+ <-- 640 KB 常规内存天花板 (0xA0000)
0xA0000 | 显存 / 硬件 I/O 映射区 / BIOS 固件    |

3.1 为什么基地址是 0x90000?(Linus Torvalds 的 1991 搬家策略)

在 16 位实模式下,寻址上限为 1MB。其中 0x00000 ~ 0x9FFFF 为 640 KB 常规内存(Conventional Memory)0xA0000 以上为 VGA 显存与 BIOS 固件区。

1991 年 Linus Torvalds 开发 Linux 0.11 时,为了给后续不断膨胀的内核压缩镜像腾出完整连续的低端内存,制定了“搬家策略”:

  • • 将引导与 Setup 代码统一搬运到常规内存天花板(0xA0000)正下方的安全区 —— 0x90000(576 KB 处)
  • • 从 0x90000 到 0x9FFFF 拥有 64 KB 空间,足以容纳 16 位 Setup 代码以及运行时所需 Stack 和 Heap,且绝对不会挤压 0xA0000 处的 VGA 显存映射区

Linux Kernel 文档 Documentation/x86/boot.txt 规范定义:
"The boot sector and setup code are loaded at 0x90000... To execute the kernel, the boot loader must jump to the real-mode code at X + 0x200 (where X = 0x90000)."


3.2 为什么偏移量是 0x0200(512 字节)?(bzImage 文件结构)

编译出的 bzImage 是按照 Linux Boot Protocol 拼接的二进制包。其最前方的 512 字节用于保留历史 Boot Sector 以及 Setup Header 结构体(setup_header):

/* 源码出处:arch/x86/boot/header.S (Linux 2.6.39) */

    .section ".bstext", "ax"
    # 前 512 字节 (0x0000 ~ 0x01FF) 用于 MBR 伪装头与头信息数据

    .org 497
setup_sects:    .byte 0

    .org 510
boot_flag:      .word 0xAA55    # MBR 魔数标记

    # -------------------------------------------------------------
    # 强制对齐至第 512 字节 (文件偏移 0x0200 处)
    .section ".header", "a"
    .globl _start
_start:
    .byte   0xeb                # 机器码 0xeb (jmp short)
    .byte   start_of_setup-1f
1:
    .ascii  "HdrS"              # Linux Boot Protocol 魔数 (0x53726448)

当 QEMU 或 Bootloader 将 bzImage 文件开头装载至 0x90000 时,文件的 0x0200 偏移处(即第 512 字节)正好对应内存 0x90200,也就是真正的 16 位汇编代码入口 _start


3.3 验证步骤

对内核 16 位 Setup 的入口 0x90200 下硬件断点
(gdb) hb *0x90200
Hardware assisted breakpoint 4 at 0x90200
(gdb) continue
Continuing.
Program received signal SIGTRAP, Trace/breakpoint trap.
0x0000000000000000 in irq_stack_union ()
查看 GRUB2 动态分配的 Zero Page 物理地址 验证该地址处的 "HdrS" 魔数
(gdb) monitor xp /1wx 0x90202
0000000000090202: 0x53726448

四、 从 16位 实模式到 32位 保护模式:内核自身的突破 (0x90200 -> 0x100000)

在 0x90200 处接管控制权后,控制权正式移交给 Linux 内核自身的 16 位 Real-Mode 代码(arch/x86/boot/main.c 与 pmjump.S)。内核将自行完成从 16 位实模式到 32 位保护模式的硬件跨越。

[0x90200] 16位实模式入口 (main.c)
    │
    ├── 1. 调用 BIOS INT 0x15 (AX=0xE820) 探测物理内存图 (E820 Table)
    ├── 2. 开启 A20 地址线 (摆脱 1MB 寻址回卷限制)
    ├── 3. 加载临时 GDT (全局描述符表) 
    └── 4. 执行 pmjump.S:将 CR0.PE 位置 1,长跳转至 0x100000
            │
            ▼
[0x100000] 32位保护模式入口 (compressed/head_64.S)

4.1 核心硬件机制:CR0.PE 置 1 与远跳转

位于 arch/x86/boot/pmjump.S 中的汇编逻辑是模式切换的关键点:

代码段

/* 将 CR0 的 Bit 0 (PE - Protected Mode Enable) 位置 1 */
movl    %cr0, %eax
orb     $X86_CR0_PE, %al
movl    %eax, %cr0

/* 切换到保护模式:通过远跳转刷新流水线与 CS 段选择子 */
jmpl    $__BOOT_CS, $0x100000

4.2 验证步骤

在 0x90200 处拦截后,可打断点至 32 位保护模式入口物理地址 0x100000(1MB 处),验证 CR0 寄存器的翻转。

核心验证指标:EIP 停在 00100000,CR0 末位变为 1(CR0.PE = 1),证明 CPU 寻址模式已成功升维至 32 位保护模式,且此过程由 Linux 内核汇编代码完全自主驱动。
(gdb) hb *0x100000
Hardware assisted breakpoint 2 at 0x100000
(gdb) continue
Continuing.

Breakpoint 2, 0x0000000000100000 in ?? ()
(gdb) monitor info registers

CPU#
0
EIP=00100000 
CR0=00000011

五、 32位 解压器与 64位 长模式(Long Mode)跨越 (0x100000 -> startup_64)

物理地址 0x100000 运行的是 32 位内核解压器(arch/x86/boot/compressed/head_64.S)。由于现代 x86_64 内核镜像(vmlinux)经过了压缩,解压器需先将内核解压至高位内存,随后建立 64 位分页机制并激活长模式。

[0x100000] 32位解压入口
    │
    ├── 1. 执行 extract_kernel() 解压大内核 (vmlinux)
    ├── 2. 建立初始 4 级页表 (PML4)
    ├── 3. 依次开启长模式三大硬件锁:
    │       a. CR4.PAE = 1 (开启物理地址扩展)
    │       b. MSR 0xC0000080 (EFER.LME = 1, 激活 Long Mode Enable)
    │       c. CR0.PG = 1  (开启分页机制 -> 触发硬件 EFER.LMA = 1)
    └── 4. ljmp 跳转至 64 位长模式入口
            │
            ▼
[startup_64] 64位长模式入口

5.1 验证步骤

(gdb) hb startup_64
Hardware assisted breakpoint 2 at 0xffffffff81000000: file arch/x86/kernel/head_64.S, line 69.
(gdb) hb start_kernel
Hardware assisted breakpoint 3 at 0xffffffff818e8779: file init/main.c, line 457.
(gdb) c
Continuing.

Breakpoint 1, 0x0000000000100000 in ?? ()

(gdb) info registers
cr0            0x11                [ ET PE ]
rip            0x100000            0x100000
rsi            0x93e60             605792
efer           0x0                 [ ]

(gdb) c
Continuing.

内核c函数start_kernel入口
Breakpoint 3, start_kernel () at init/main.c:457
457     {

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 14:35:18 HTTP/2.0 GET : https://f.mffb.com.cn/a/509462.html
  2. 运行时间 : 0.217137s [ 吞吐率:4.61req/s ] 内存消耗:5,063.38kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1be625fcb4aeaab4cb14bc10888827c9
  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.001004s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001404s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000734s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000624s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001487s ]
  6. SELECT * FROM `set` [ RunTime:0.002777s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001620s ]
  8. SELECT * FROM `article` WHERE `id` = 509462 LIMIT 1 [ RunTime:0.017311s ]
  9. UPDATE `article` SET `lasttime` = 1787294118 WHERE `id` = 509462 [ RunTime:0.002072s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000625s ]
  11. SELECT * FROM `article` WHERE `id` < 509462 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001319s ]
  12. SELECT * FROM `article` WHERE `id` > 509462 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.012185s ]
  13. SELECT * FROM `article` WHERE `id` < 509462 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016663s ]
  14. SELECT * FROM `article` WHERE `id` < 509462 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.016347s ]
  15. SELECT * FROM `article` WHERE `id` < 509462 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009121s ]
0.218786s