当前位置:首页>Linux>04-Linux内核镜像的加载和启动

04-Linux内核镜像的加载和启动

  • 2026-08-18 23:10:38
04-Linux内核镜像的加载和启动

QEMU上的OP-TEE:普通世界的就绪之旅

本文是「QEMU上的OP-TEE——一次完整的启动之旅」系列第4篇,带你深入分析Linux内核镜像的加载和启动过程。


前言

在前面的文章中,我们分析了BL1、BL2、BL31和OP-TEE OS的启动过程。现在,安全世界已经准备就绪,接下来轮到普通世界登场了。

普通世界的核心是Linux内核,它运行在S-EL1(Secure Exception Level 1)级别,负责管理普通应用程序、文件系统、网络等资源。Linux内核的启动过程是整个系统启动链的最后一环,也是最复杂的一环。

本文将深入分析Linux内核镜像的加载和启动过程,带你了解普通世界是如何准备就绪的。


一、U-Boot:普通世界的引导者

1.1 U-Boot的启动

在OP-TEE QEMU环境中,U-Boot作为BL33运行在S-EL1级别。它是普通世界的引导程序,负责:

    1.2 U-Boot的启动流程

    U-Boot的启动过程分为多个阶段:

    U-Boot启动流程:┌─────────────────────────────────────────────────────────────┐│ SPL (Secondary Program Loader) ││ ││ 1. 初始化CPU ││ 2. 初始化DRAM ││ 3. 加载U-Boot主体 │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ U-Boot主体 ││ ││ 1. 初始化控制台 ││ 2. 初始化网络、存储等 ││ 3. 加载Linux内核 ││ 4. 启动Linux内核 │└─────────────────────────────────────────────────────────────┘

    二、加载Linux内核镜像

    2.1 bootz命令

    在U-Boot中,使用bootz命令来启动Linux zImage:

    # U-Boot命令行=> bootz 0x40008000 - 0x41000000

    参数说明:

    • 0x40008000:zImage在内存中的地址
    • -:没有initrd(初始内存盘)
    • 0x41000000:设备树(DTB)的地址

    2.2 bootz命令的实现

    bootz命令的实现在u-boot/cmd/bootz.c中:

    static int bootz_start(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[], bootm_headers_t *images){ int ret; ulong zi_start, zi_end; /* 设置内核入口点 */ if (!argc) { images->ep = image_load_addr; } else { images->ep = simple_strtoul(argv[0], NULL, 16); } /* 验证zImage格式 */ ret = bootz_setup(images->ep, &zi_start, &zi_end); if (ret != 0) return 1; /* 查找其他镜像(initrd、DTB) */ if (bootm_find_images(flag, argc, argv, images->ep, zi_end - zi_start)) return 1; return 0;}int do_bootz(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]){ int ret; /* 调用bootz_start */ if (bootz_start(cmdtp, flag, argc, argv, &images)) return 1; /* 禁用中断 */ bootm_disable_interrupts(); /* 设置操作系统类型 */ images.os.os = IH_OS_LINUX; /* 执行启动状态机 */ ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_RAMDISK | BOOTM_STATE_OS_PREP | BOOTM_STATE_OS_FAKE_GO | BOOTM_STATE_OS_GO, &images, 1); return ret;}

    2.3 zImage格式

    zImage是Linux内核的压缩格式,它包含:

    zImage结构:┌─────────────────────────────┐│ 自举代码 │ ← 解压内核├─────────────────────────────┤│ 压缩的内核 │ ← gzip压缩├─────────────────────────────┤│ 内核信息 │ ← 头部信息└─────────────────────────────┘

    zImage的自举代码会:


      三、Linux内核的启动过程

      3.1 入口点:stext

      Linux内核的入口点定义在linux/arch/arm/kernel/head.S中:

      ENTRY(stext) @ 确保在ARM模式下 ARM_BE8(setend be) @ 确保在SVC模式下,禁用所有中断 safe_svcmode_maskall r9 @ 获取处理器ID mrc p15, 0, r9, c0, c0 bl __lookup_processor_type @ 计算物理地址偏移 adr_l r8, _text sub r8, r8, #TEXT_OFFSET @ 验证ATAGS/DTB bl __vet_atags @ 创建页表 bl __create_page_tables @ 处理器初始化 bl __cpu_flush @ 启用MMU bl __turn_mmu_on @ 跳转到C语言入口点 b __mmap_switchedENDPROC(stext)

      3.2 关键初始化步骤

      safe_svcmode_maskall r9

      这行代码确保CPU在SVC模式下运行,并禁用所有中断。

      bl __lookup_processor_type

      这个函数会根据处理器ID查找对应的处理器信息结构。

      bl __create_page_tables

      这个函数会创建初始页表,为启用MMU做准备。

      bl __turn_mmu_on

      这个函数会启用MMU,开始使用虚拟内存。

      b __mmap_switched

      跳转到arch/arm/kernel/head-common.S中的__mmap_switched函数。


      四、C语言入口点:start_kernel

      4.1 __mmap_switched函数

      ENTRY(__mmap_switched) str r9, [r2] @ 存储机器号 str r3, [r4] @ 存储DTB指针 @ 清零BSS段 adr r3, __bss_start mov r4, #01: cmp r3, r4 strcc r4, [r3], #4 bcc 1b @ 跳转到C语言入口点 ldr r2, =__mmap_switched_data ldmia r2, {r3, r4, sp} ldr r1, =__switch_data bx r1ENDPROC(__mmap_switched)

      4.2 start_kernel函数

      start_kernel是Linux内核的C语言入口点,定义在linux/init/main.c中:

      asmlinkage __visible void __init __no_sanitize_address start_kernel(void){ set_task_stack_end_magic(&init_task); smp_setup_processor_id(); debug_objects_early_init(); /* 设置本地IRQ禁用 */ local_irq_disable(); /* 设置早期控制台 */ setup_arch(&command_line); setup_command_line(command_line); setup_nr_cpu_ids(); setup_per_cpu_areas(); /* 建立内存管理 */ build_all_zonelists(NULL); page_address_init(); /* 打印内核版本 */ pr_notice(”%s”, linux_banner); /* 初始化各种子系统 */ setup_arch(&command_line); trap_init(); mm_init(); /* 初始化调度器 */ sched_init(); /* 初始化中断 */ init_IRQ(); time_init(); /* 初始化控制台 */ console_init(); /* 初始化进程管理 */ pid_init(); files_init(); /* 挂载根文件系统 */ vfs_caches_init(); /* 启动init进程 */ rest_init();}

      4.3 关键初始化步骤

      setup_arch(&command_line);

      这个函数会:

      • 解析设备树(DTB)
      • 初始化内存管理
      • 设置中断控制器
      • 初始化平台特定的硬件
      mm_init();

      这个函数会:

      • 初始化物理内存管理器
      • 初始化虚拟内存管理器
      • 设置内存分配器
      sched_init();

      这个函数会:

      • 初始化进程调度器
      • 设置调度策略
      • 初始化运行队列
      console_init();

      这个函数会:

      • 初始化串口驱动
      • 注册控制台设备
      • 启用控制台输出
      rest_init();

      这个函数会:

      • 创建内核线程kernel_init
      • 创建内核线程kthreadd
      • 启动调度器

      五、设备树(DTB)

      5.1 设备树的作用

      设备树(Device Tree Blob)是一个描述硬件的数据结构,它告诉Linux内核:

      • 系统中有哪些硬件设备
      • 这些设备的寄存器地址
      • 这些设备的中断号
      • 这些设备的时钟配置

      5.2 QEMU的设备树

      在QEMU环境中,设备树由QEMU自动生成,描述了模拟的硬件:

      设备树结构:├── /│ ├── chosen/│ │ └── bootargs = ”console=ttyAMA0 root=/dev/ram0”│ ├── cpus/│ │ └── cpu@0/│ │ └── compatible = ”arm,cortex-a15”│ ├── memory@│ │ └── reg = <0x40000000 0x40000000>│ ├── gic@...│ │ └── interrupt-controller│ ├── serial@...│ │ └── ARM AMBA PL011 UART│ └── virtio@...│ └── VirtIO MMIO

      5.3 设备树的传递

      U-Boot会将设备树地址传递给Linux内核:

      /* 在U-Boot中 */images->ft_addr = (void *)simple_strtoul(argv[2], NULL, 16);/* 传递给内核 */r2 = images->ft_addr; /* DTB地址 */

      六、根文件系统挂载

      6.1 内核命令行参数

      Linux内核通过命令行参数来配置根文件系统:

      # 内核命令行console=ttyAMA0 root=/dev/ram0 rdinit=/linuxrc

      参数说明:

      • console=ttyAMA0:使用串口作为控制台
      • root=/dev/ram0:使用RAM磁盘作为根文件系统
      • rdinit=/linuxrc:指定init程序

      6.2 initramfs/initrd

      在OP-TEE QEMU环境中,使用initramfs(初始内存盘)作为根文件系统:

      initramfs结构:├── bin/│ ├── sh│ ├── ls│ └── ...├── etc/│ ├── passwd│ ├── init.d/│ └── ...├── lib/│ ├── *.so│ └── ...├── sbin/│ ├── init│ └── ...└── usr/ ├── bin/ └── lib/

      6.3 根文件系统的挂载

      /* 在内核中 */void __init vfs_caches_init(void){ /* 挂载rootfs */ rootfs_init(); /* 挂载devtmpfs */ devtmpfs_init(); /* 挂载sysfs */ sysfs_init(); /* 挂载proc */ proc_init();}

      七、OP-TEE驱动加载

      7.1 OP-TEE驱动的作用

      Linux内核需要通过OP-TEE驱动与OP-TEE OS通信:

      Linux内核 ←→ OP-TEE驱动 ←→ SMC调用 ←→ OP-TEE OS

      OP-TEE驱动负责:

      • 发送SMC调用到OP-TEE OS
      • 接收OP-TEE OS的响应
      • 管理共享内存
      • 处理中断

      7.2 OP-TEE驱动的加载

      OP-TEE驱动在内核启动时自动加载:

      /* 在设备树中 */optee@0 { compatible = ”linaro,optee-tz”; method = ”smc”; reg = <0x0 0x0 0x0 0x2000000>;};/* 在内核中 */static int __init optee_driver_init(void){ /* 注册平台驱动 */ return platform_driver_register(&optee_driver);}subsys_initcall(optee_driver_init);

      7.3 SMC调用流程

      SMC调用流程:┌─────────────────────────────────────────────────────────────┐│ Linux内核 ││ ││ 1. 调用optee_smc_call() ││ 2. 设置SMC参数 ││ 3. 执行SMC指令 │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ BL31安全监控器 ││ ││ 1. 接收SMC调用 ││ 2. 切换到安全世界 ││ 3. 调用OP-TEE OS │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ OP-TEE OS ││ ││ 1. 处理SMC请求 ││ 2. 执行安全操作 ││ 3. 返回结果 │└─────────────────────────────────────────────────────────────┘

      八、启动流程总结

      让我们用一张图来总结Linux内核的启动流程:

      ┌─────────────────────────────────────────────────────────────┐│ U-Boot启动 ││ ││ 1. 初始化硬件 ││ 2. 加载Linux内核(zImage) ││ 3. 加载设备树(DTB) ││ 4. 跳转到内核入口点 │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ Linux内核启动 ││ ││ 1. stext: 入口点 ││ - CPU模式设置 ││ - 处理器类型查找 ││ - 页表创建 ││ - MMU启用 ││ ││ 2. start_kernel: C语言入口 ││ - 架构初始化 ││ - 内存管理初始化 ││ - 调度器初始化 ││ - 中断初始化 ││ - 控制台初始化 ││ ││ 3. rest_init: 启动init进程 ││ - 创建内核线程 ││ - 启动调度器 │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ 根文件系统挂载 ││ ││ 1. 挂载rootfs ││ 2. 挂载devtmpfs ││ 3. 挂载sysfs ││ 4. 挂载proc │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ OP-TEE驱动加载 ││ ││ 1. 注册平台驱动 ││ 2. 初始化共享内存 ││ 3. 配置SMC调用 │└─────────────────────────────────────────────────────────────┘

      九、调试技巧

      9.1 启用Linux内核调试

      # 在内核配置中启用调试CONFIG_DEBUG_INFO=yCONFIG_GDB_SCRIPTS=yCONFIG_KGDB=y

      9.2 使用GDB调试Linux内核

      # 启动QEMU(会等待GDB连接)make run-only QEMU_EXTRA_ARGS=”-S -s”# 在另一个终端启动GDBarm-linux-gnueabihf-gdb# 加载内核符号文件file vmlinux# 连接到QEMUtarget remote localhost:1234# 在入口点设置断点break stext# 在start_kernel设置断点break start_kernel

      9.3 查看内核日志

      # 在Linux系统中查看内核日志dmesg# 实时查看日志tail -f /var/log/kern.log

      9.4 内核命令行参数调试

      # 添加调试参数# 在U-Boot中设置setenv bootargs ”console=ttyAMA0 root=/dev/ram0 rdinit=/linuxrc debug”# 或者在设备树中修改chosen { bootargs = ”console=ttyAMA0 root=/dev/ram0 rdinit=/linuxrc debug”;};

      十、常见问题

      Q1:为什么Linux内核要运行在S-EL1?

      A:在OP-TEE环境中,Linux内核运行在S-EL1级别,而不是普通的EL1级别。这是因为:

      • OP-TEE OS运行在S-EL1
      • Linux内核需要通过SMC调用与OP-TEE OS通信
      • 安全世界和普通世界共享同一个EL1级别,但有不同的安全状态

      Q2:设备树(DTB)有什么作用?

      A:设备树描述了系统的硬件配置,包括:

      • CPU架构和核心数
      • 内存大小和地址
      • 外设的寄存器地址和中断号
      • 时钟和电源管理配置

      Q3:如何修改内核命令行参数?

      A:可以通过以下方式修改:

        Q4:为什么需要initramfs?

        A:initramfs(初始内存盘)的作用是:

        • 提供一个最小的根文件系统
        • 加载必要的驱动程序
        • 挂载真正的根文件系统
        • 启动init程序

        Q5:OP-TEE驱动是如何工作的?

        A:OP-TEE驱动通过SMC调用与OP-TEE OS通信:


          总结

          本文深入分析了Linux内核镜像的加载和启动过程,我们了解了:

            Linux内核的启动是整个系统启动链的最后一步,也是最复杂的一步。在下一篇文章中,我们将继续分析rootfs挂载与OP-TEE驱动加载的细节。


            下一篇预告:我们将分析rootfs挂载与OP-TEE驱动加载的详细过程,看看系统是如何完全就绪的。


            💡 小贴士:Linux内核的启动过程虽然复杂,但核心逻辑是:解压内核 → 初始化硬件 → 挂载文件系统 → 启动用户空间程序。理解了这个流程,就掌握了普通世界的核心。

            最新文章

            随机文章

            基本 文件 流程 错误 SQL 调试
            1. 请求信息 : 2026-08-22 00:03:26 HTTP/2.0 GET : https://f.mffb.com.cn/a/505189.html
            2. 运行时间 : 0.348304s [ 吞吐率:2.87req/s ] 内存消耗:4,830.49kb 文件加载:140
            3. 缓存信息 : 0 reads,0 writes
            4. 会话信息 : SESSION_ID=49fff103877c8c59c7e7118e0605674b
            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.000809s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
            2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001458s ]
            3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.005622s ]
            4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.009445s ]
            5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001424s ]
            6. SELECT * FROM `set` [ RunTime:0.006771s ]
            7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001472s ]
            8. SELECT * FROM `article` WHERE `id` = 505189 LIMIT 1 [ RunTime:0.013923s ]
            9. UPDATE `article` SET `lasttime` = 1787328207 WHERE `id` = 505189 [ RunTime:0.006434s ]
            10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000616s ]
            11. SELECT * FROM `article` WHERE `id` < 505189 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001315s ]
            12. SELECT * FROM `article` WHERE `id` > 505189 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002100s ]
            13. SELECT * FROM `article` WHERE `id` < 505189 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.049306s ]
            14. SELECT * FROM `article` WHERE `id` < 505189 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.045795s ]
            15. SELECT * FROM `article` WHERE `id` < 505189 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.035273s ]
            0.351751s