当前位置:首页>Linux>手搓微型 Linux 发行版:从零开始打造你的专属系统

手搓微型 Linux 发行版:从零开始打造你的专属系统

  • 2026-06-28 03:44:57
手搓微型 Linux 发行版:从零开始打造你的专属系统

>

原文:Making a micro Linux distro

━━━ ━━━ ━━━

写在前面

"从零开始构建 Linux 发行版"——听起来像是个疯狂的想法,对吧?毕竟现在有 Ubuntu、Debian、Arch 等上百个发行版,为什么还要自己造轮子?

答案是:理解内核、用户空间和操作系统之间那条看不见的分界线。这篇文章不走寻常路,它不是教你用 Yocto 或 Buildroot 去"配菜",而是真正从内核编译开始,手写 init 进程,看着屏幕上一个简单到几乎无用的系统启动起来,然后理解它为什么能启动。

更酷的是——作者选了 RISC-V 架构(QEMU riscv64 virt 模拟器),这意味着你完全可以在 x86 电脑上交叉编译一个 RISC-V 的微型系统跑着玩。

━━━ ━━━ ━━━

一、内核是什么?一个不太严谨但足够用的比喻

作者用一个很朴素的问题开场:在一台单核机器上,多个程序怎么"同时"运行?

答案是——内核干的。但内核干的不止这一件事:

  1. 硬件抽象:把那些晦涩的 I/O 地址和寄存器值,包装成简单的系统调用接口(比如 printf,背后是 write 系统调用)
  2. 文件系统:你以为文件就是硬盘上的数据?不一定。文件也可以是个管道、一个 socket、一个设备节点——文件系统其实是和内核对话的一种方式
  3. 编程模型:你的 Python Web 服务器不需要知道那个聊天 App 的存在——内核给了你"进程隔离"。反过来,你也可以让它们共享内存,只要你想。

一句话总结:内核是运行用户程序的底层基础设施。但它不会帮你打开 Chrome、播放 YouTube——这些事得交给上层。

━━━ ━━━ ━━━

二、什么叫 "Linux 发行版"?

光有内核,你连个 ls 命令都跑不了。作者给出了他的理解:

Linux 发行版 = Linux 内核 + 运行在内核之上的用户空间基础设施

这个"基础设施"包括:

  • init 进程(用户空间第一个程序,PID 1)
  • 各种 systemd 服务 / 守护进程
  • 你日常用的工具集(ls, cat, ps, grep...)
  • 包管理器
  • 桌面环境(如果有的话)

内核只管最低层——驱动网卡发信号出去。至于连哪个 Wi-Fi、用不用 VPN、IP 是静态还是 DHCP……这些通通发生在用户空间

━━━ ━━━ ━━━

三、init:所有进程的"祖宗"

内核启动完成后,会在文件系统上找一个叫 /init 的二进制文件(没找到的话再试其他几个位置),把它拉起来,分配 PID 1。

这个 init 进程是内核主动启动的唯一用户进程。之后所有进程都是 init 的"子孙"——init 启动 shell,shell 启动 ls,ls 执行完退出,shell 继续等着你的下一个命令。

一个重要的感悟:即使偶尔启动的临时工具(比如 cron 里每隔五分钟跑一次的脚本),在进程树上也是 init 的后代。

所以,一个 Linux 发行版的本质就是:内核 + 启动后拉起的那一堆进程 + 你能调用的所有工具命令

━━━ ━━━ ━━━

四、手搓一个"几乎没用"的微型发行版

好,来真的了。

4.1 编译内核
# 下载 Linux 6.5.2
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.2.tar.xz
tar -xf linux-6.5.2.tar.xz
cd linux-6.5.2

# 配置(RISC-V 交叉编译)
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig

# 如果你有强迫症,可以 menuconfig 微调
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- menuconfig

# 编译(-j 并发加速)
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j$(nproc)

输出文件:arch/riscv/boot/Image——这就是我们的内核镜像。

4.2 写一个最简 init(C 语言版)
#include <stdio.h>

int main() {
    printf("Hello world\n");
    return 0;
}

编译成静态链接:

riscv64-linux-gnu-gcc -static -o init init.c
4.3 打包 initramfs

Linux 内核启动后,需要一个初始文件系统(initramfs)来加载 init 和其他必要工具。最小化方案:

echo init | cpio -o -H newc > initramfs.cpio

这里的关键是 -H newc——Linux 内核要求 initramfs 使用 newc 格式

4.4 启动!
qemu-system-riscv64 -machine virt \
  -kernel arch/riscv/boot/Image \
  -initrd /path/to/initramfs.cpio

你会看到:

[    0.351894] Run /init as init process
Hello world
[    0.379006] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000

Kernel panic!

不过别慌—— init 打印了 "Hello world",然后 return 0 退出了。内核的规则是:PID 1 不能退出。init 挂了,系统就崩了。

解决方案:让 init 一直运行,别停

4.5 修复版 init:加上循环
#include <stdio.h>
#include <unistd.h>

int main() {
    int count = 1;
    while (1) {
        printf("Hello from init! %d\n", count);
        count++;
        sleep(10);
    }
    return 0;
}

重新编译打包启动,这次不会 panic 了——但你也只能看着 "Hello from init! N" 每 10 秒刷新一次。没 shell、没命令,毫无用处,但确实是一个活着的微型 Linux 系统

━━━ ━━━ ━━━

五、让它"有用"起来:加上一个小 shell
5.1 改造 init:fork + exec

Linux 启动子进程的标准姿势是 fork + exec

pid_t pid = fork();
if (pid == 0) {
    // 子进程,执行 shell
    execl("/little_shell", "irrelevant", NULL);
}
// 父进程继续每 10 秒打印一次

fork() 克隆当前进程,返回 0 表示你在子进程里。然后 execl() 告诉内核:"把我现在跑的代码替换成这个二进制的代码"。

5.2 用 Go 写 shell——老古董玩新花样

作者决定不用 C,而是用 Go 来写这个简单 shell:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    fmt.Println("Hello world from Go!")
    reader := bufio.NewReader(os.Stdin)
    for {
        fmt.Print("Enter your command: ")
        line, _ := reader.ReadString('\n')
        fmt.Printf("Your command is: %s", line)
    }
}

交叉编译:

GOOS=linux GOARCH=riscv64 go build little_shell.go
注意:Go 编译出来的二进制差不多 1.9MB,而 C 版的 init 只有 454KB。这是 Go 的优势(开箱即用的静态链接 + 丰富的标准库)和代价(更大的体积)。在动辄几百 GB 存储的电脑上这不是问题,但在嵌入式场景就值得权衡。

另外,Go 程序对内核特性有依赖(比如 futex),默认的 RISC-V 内核配置够用——但如果遇到 Go panic,仔细读 panic 信息就能定位缺少的内核配置。

5.3 启动,见证奇迹
Hello from the original init! 1
Hello world from Go!
Enter your command: mkdir hello
Your command is: mkdir hello
Enter your command: ls
Your command is: ls
Hello from the original init! 2
Enter your command: exit
Your command is: exit
Hello from the original init! 3

能交互了!虽然 shell 只会"回声",不懂 mkdirls 的真正含义——但进程隔离、文件系统、标准输入输出流……一代微型 Linux 发行版诞生了

━━━ ━━━ ━━━

六、回顾:内核兑现了哪些承诺?

作者在实现这个玩具后,回头检验内核的核心价值:

承诺兑现情况
硬件抽象✅ init 和 shell 完全不知道 UART 的存在,只管向文件描述符写数据
高级编程范式(文件系统)✅ init 通过文件路径 /little_shell 定位并加载 shell 二进制
进程隔离✅ fork 后 init 和 shell 各自独立运行,内存隔离
文件描述符继承(有待理解)⚠️ shell 继承了 init 的标准输出,所以两者输出混在一起——这是 fork 的行为,不是 bug
内核给了你一个扎实、可移植的基础设施,你可以在上面开发高层软件,同时很大程度忽略底层硬件的复杂性。

━━━ ━━━ ━━━

七、Bonus:用 u-root 让系统真正可用

自己写工具链太累?作者推荐了 u-root 项目——一个用 Go 写的全能型用户空间工具集。

一步到位:

git clone https://github.com/u-root/u-root.git
cd u-root
GOOS=linux GOARCH=riscv64 u-root
# 输出:/tmp/initramfs.linux_riscv64.cpio (约 14MB)

直接用这个 initramfs 启动:

qemu-system-riscv64 -machine virt \
  -kernel arch/riscv/boot/Image \
  -initrd /tmp/initramfs.linux_riscv64.cpio

你会看到一个完整的 shell,支持 Tab 补全!ls、pwd、echo 全都正常。

更刺激的:从虚拟机里访问 google.com

加几个 QEMU 设备参数:

-device virtio-net-device,netdev=usernet \
-netdev user,id=usernet,hostfwd=tcp::10000-:22 \
-device virtio-rng-pci

启动进入 shell 后:

# DHCP 获取 IP
dhclient -ipv6=false
# 访问 Google
wget http://google.com
cat index.html

一堆混淆过的 JavaScript 跳出来——你成功地从自己手搓的微型发行版里访问了 Google!

━━━ ━━━ ━━━

八、延伸思考
包管理器

你现在理解了,自制发行版其实是"整体镜像"模式——想更新一个工具?重新编译整个 initramfs,重新烧录。这不适合桌面和手机场景。包管理器就是用来打破这个模式的——增量安装、卸载、更新,按需取用。

init 系统不是儿戏

玩具归玩具,实际上 init 是现代 Linux 系统里最举足轻重的组件之一。它不只是一个"启动 shell 然后循环打印"的程序——它要挂载文件系统、创建设备节点、配置网络、拉起各种守护进程。这也是为什么 systemd、OpenRC、runit 等 init 系统之间的争论可以打上十年。

小练习:当你的 u-root 系统启动后,ls /dev 看看有多少设备节点——大部分都是 init 帮你设置的。

━━━ ━━━ ━━━

写在最后

从下载内核源码,到亲手写 init,到用 Go 写一个只会"回声"的 shell,再到用 u-root 启动一个能上网的微型系统——这篇文章带着我们走了一遍 Linux 最底层也最浪漫的旅程。

作者说:"内核给了你一个扎实可移植的基础设施。" 而我更愿意说:从按下电源到看见 shell 提示符,这之间发生的一切,你都可以理解,也可以亲手构建。

这就是开源和 Linux 精神最动人的地方。

━━━ ━━━ ━━━

资源
  • GitHub 代码仓库

━━━ ━━━ ━━━

*🤖 本文翻译解读自 Uros Popovic 的技术文章 + LeisureLinux 视角重写。关注 LeisureLinux 公众号,获取更多底层技术深度解读。*

一个字符就能提权到 root?Linux 内核 CVE-2026-23111 深度剖析

Linux SLUB 分配器深度拆解:malloc 背后内核在干什么?

Arm 推进 Linux 内核适配 128 位页表条目扩展 'FEAT_D128'

内核纪元新篇章:Linux 7.0 深度技术解析与架构演进

【内核前沿】Linux 7.0 手动内联优化:UDP 吞吐量暴力提升 12%

剑指核心:uutils coreutils 0.9.0,Linux 底层江湖的又一波澜

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-02 23:32:11 HTTP/2.0 GET : https://f.mffb.com.cn/a/499943.html
  2. 运行时间 : 0.565243s [ 吞吐率:1.77req/s ] 内存消耗:5,511.77kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=bd394e392b1d82e7ac57f8473529d876
  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.000567s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000794s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000338s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000715s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001636s ]
  6. SELECT * FROM `set` [ RunTime:0.008620s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.002290s ]
  8. SELECT * FROM `article` WHERE `id` = 499943 LIMIT 1 [ RunTime:0.007892s ]
  9. UPDATE `article` SET `lasttime` = 1783006331 WHERE `id` = 499943 [ RunTime:0.008478s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000697s ]
  11. SELECT * FROM `article` WHERE `id` < 499943 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004749s ]
  12. SELECT * FROM `article` WHERE `id` > 499943 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.014973s ]
  13. SELECT * FROM `article` WHERE `id` < 499943 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.051228s ]
  14. SELECT * FROM `article` WHERE `id` < 499943 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.046898s ]
  15. SELECT * FROM `article` WHERE `id` < 499943 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.327118s ]
0.567892s