当前位置:首页>Linux>从零构建 Linux|07 使用 Yocto

从零构建 Linux|07 使用 Yocto

  • 2026-08-20 23:00:40
从零构建 Linux|07 使用 Yocto
系列第 7 篇|通用工作流 + BitBake 流程 + 常见菜谱路径 + QEMU 说明 + 玄铁对照 + 双 MACHINE编译宿主:Windows 上的 WSL2 Ubuntu|动手目标:qemux86-64 与 genericx86-64

上一篇建立了「Yocto 是什么」的概念。本篇做五件事:

  1. 把通用使用流程用文字和命令串起来;
  2. 说明 BitBake 构建流程,弄清为何要改 layer / recipe / conf;
  3. 标出内核、sh / bash、BusyBox 等常见模块在 poky 里的菜谱路径;
  4. 简介 xuantie-yocto-project(只作对照,不作为烧写目标);
  5. 说清 QEMU 是什么、为何先用它,并锁定第 8~12 篇动手 demo(WSL2 虚机/真机对比 + Git 托管配置)。

编译宿主:就用你 Windows 里的 WSL2 Ubuntu

BitBake 需要在 Linux 环境中运行。本系列统一约定:

读者在自己的 Windows 电脑上启用 WSL2,安装 Ubuntu,之后所有依赖安装、配置、bitbake 都在这个 Ubuntu 里完成。

这样做的好处很直接:不另买 Linux 机器,也能用日常 PC 走完构建;真机验证时,往往还是同一台 Windows 电脑。

几条入门提醒:

  1. 在微软文档里启用 WSL2,并安装 Ubuntu(版本以 Yocto 官方 Quick Start 支持列表为准)。
  2. 工程目录放在 WSL2 自己的文件系统里,例如 ~/yocto/poky,尽量不要放在 /mnt/c/... 下长编译(跨文件系统会明显变慢)。
  3. 本系列不走「纯 Windows 原生直接跑 Yocto」的路线。
备注:官方 Quick Start(文档现称 Quick Build)见https://docs.yoctoproject.org/5.0/brief-yoctoprojectqs/(与本系列示例分支 scarthgap / YP 5.0 对应;若换版本请到 https://docs.yoctoproject.org 选对应发行版文档。)

通用流程:从零到镜像

第一次接触 Yocto 时,最容易迷失在目录和名词里。先把流程当成一条公交线路:

1. 获取 poky 以及你需要的 layer2. 在 WSL2 Ubuntu 上安装构建依赖3. source oe-init-build-env4. 编辑 local.conf、bblayers.conf5. bitbake <镜像名>6. 到 deploy 目录拿走镜像文件

对应的命令骨架如下(版本分支请以 Yocto 官方文档当前推荐为准;这里以 scarthgap 为例):

# 以下命令均在 WSL2 的 Ubuntu 终端中执行git clone https://git.yoctoproject.org/poky.git -b scarthgap --depth=1cd poky# 第 8 篇会用 TEMPLATECONF 分别创建:#   build-qemux86-64 / build-genericx86-64# 入门示意(单目录)也可:source oe-init-build-env build-bootstrap# 先改配置(第 8 篇详述),再构建:bitbake core-image-base

core-image-base 是什么?为何选它?

bitbake 后面跟的不是「随便起的名字」,而是一个 image 配方(镜像目标):它规定「这盒系统默认装哪些包、最终打成什么镜像」。Poky 自带若干参考镜像,常见对比如下:

镜像目标
大致定位
何时用
core-image-minimal
能启动、能进控制台的最小系统
追求体积极限、或先验证「能 boot」
core-image-base
在 minimal 之上,再带一组常见硬件相关支持(如无线 / 蓝牙 / 声卡等 packagegroup)
当「基础控制台系统」用,适合本系列入门
core-image-full-cmdline
更完整的命令行工具集
需要更多用户态命令、仍不要图形界面
core-image-sato
 / core-image-weston 等
带图形界面(Sato / Wayland 等)
做桌面或 GUI 演示;构建更重

本系列统一选 core-image-base,原因很具体:

  1. 比 minimal 好用:虚机 / 真机上更容易具备中等硬件与网络相关能力,少踩「能开机但缺驱动组」的坑;
  2. 比图形镜像轻:不引入桌面栈,构建时间和镜像体积都更可控,也更贴近嵌入式 / 产品裁剪的思路;
  3. 足够完成 demo:能登录、能跑 hello、能走完 QEMU 与 U 盘验证即可;更细的「默认装了啥、怎么裁」见第 9 篇。

记一句即可:core-image-base = 「能登录的控制台系统」+「一组可裁的中等硬件支持」;本系列用它当默认套餐,再往里加自己的包。

官方文档入口:

https://docs.yoctoproject.org
备注:宿主依赖、兼容发行版等以官方 Quick Start 为准:https://docs.yoctoproject.org/5.0/brief-yoctoprojectqs/

几个词再解释一遍

术语
含义
poky
Yocto 提供的参考组合,里面包含 BitBake、基础 layer、示例配置等,适合拿来入门与做 demo
oe-init-build-env
环境初始化脚本。它会设置环境变量,并创建(或进入)你指定的构建工作目录。本系列推荐两个目录:build-qemux86-64 与 build-genericx86-64
bitbake
你向构建系统下达任务的命令。后面跟的是「要构建的目标」,例如某个镜像名或某个软件包名
deploy 目录
构建成功后,存放最终可交付文件(镜像、内核等)的地方。路径里会带上 MACHINE 名

BitBake 构建流程:你改的东西各自进哪一步

上一节只列出「改 conf → bitbake」。要真正理解为什么要动 layer / recipe / bblayers.conf / local.conf,需要先看 BitBake 接到一条命令后大致怎么干活。

你执行:

bitbake core-image-base

BitBake 并不是「找到一个叫 core-image-base 的脚本就直接编译」,而是按下面这条链路推进(简化版):

读配置  → 扫描已启用 layer 里的 recipe  → 解析目标(image / 软件包)与依赖图  → 按任务依次:下载 → 解压 → 打补丁 → 配置 → 编译 → 安装 → 打包  → 把选中的包装进 rootfs  → 按 MACHINE 生成可启动镜像 → 放到 deploy

对应到你手里会改的对象:

你改什么
BitBake 在哪一步用到
不改会怎样
bblayers.conf读配置 / 扫描菜谱
 的第一步:决定去哪些目录找 .bb
你写的 meta-demo、厂商 BSP 层都「不存在」,recipe 找不到
local.conf读配置
 时注入本机构建策略:MACHINE、并行度、额外装包、镜像格式等
不知道为谁构建、镜像里缺你的包、产物格式不对
Layer(meta-*
提供一组 recipe、machine、配置模板的目录集合
没有地方放「自己的」定制,只能改上游,难维护
Recipe(.bb
解析依赖与执行任务
 时:某个软件如何下载、编译、安装进包
系统不知道 hello 是什么、怎么编;光写 IMAGE_INSTALL 也不够
Image 配方 / IMAGE_INSTALL
组 rootfs
 时:最终镜像默认带哪些包
包编出来了,但不会自动进镜像

用「做盒饭」再串一遍:

bblayers.conf  → 厨房里打开哪几抽屉(layer)local.conf     → 今天这锅为谁做、份量、加什么菜、装什么盒子recipe (.bb)   → 某一道菜的做法(源码从哪来、怎么炒)image 目标     → 这盒套餐叫什么、默认摆哪些菜bitbake        → 厨师按依赖顺序把菜做完、装箱、放到出餐口(deploy)

任务链再拆一层(够入门即可)

每一个软件包(recipe),BitBake 通常会跑类似这样的任务序列(名字里常见 do_ 前缀):

do_fetch → do_unpack → do_patch → do_configure → do_compile → do_install → do_package → …

镜像目标(如 core-image-base)则额外负责:收集包 → 组装 rootfs → 生成 wic / tar 等格式。你改 recipe,改的是「某一道菜」的任务怎么跑;你改 local.conf / image,改的是「整盒套餐」怎么选菜、怎么装箱。

和下一节的关系

所以后面强调改两个 conf、再建 meta-demo 写 .bb,不是习惯问题,而是对上了 BitBake 的输入口:

  1. 层列表bblayers.conf)→ BitBake 才看得见你的 meta;
  2. 本机策略local.conf)→ 决定 MACHINE 与镜像侧偏好;
  3. 菜谱(recipe)→ 决定自定义软件如何被构建进包。

第 8 篇起动手改这些文件时,可以随时回看本节这张「改什么 ↔ 进哪一步」对照表。

两个最关键的配置文件

初始化后,在对应 build-*/conf/ 下你会看到很多文件。结合上一节:它们是 BitBake 读配置阶段的入口。初学先抓住两个:

文件
管什么
类比
bblayers.conf
启用哪些层
告诉 BitBake「菜谱抽屉在哪些目录」
local.conf
这次构建的本地策略
告诉 BitBake「这锅饭为谁做、多放什么菜、打包成什么盒饭」

local.conf 里常见会改:

  1. MACHINE:为哪种机器构建;
  2. 下载目录、并行编译数量;
  3. 额外安装哪些包;
  4. 生成哪些镜像格式等。

本系列为两个 MACHINE 各建一个 build 目录,各自 local.conf 里写死对应值,而不是在同一文件里来回改:

# build-qemux86-64/conf/local.confMACHINE ??= "qemux86-64"# build-genericx86-64/conf/local.confMACHINE ??= "genericx86-64"

??= 的含义粗浅理解为:若前面没人指定过 MACHINE,就用这个默认值。初学阶段把它看成「给 MACHINE 赋值」即可。

镜像里最终有哪些软件,还取决于 image 配方里的 IMAGE_INSTALL 等变量——那是「组 rootfs」那一步。第 8 篇会用 TEMPLATECONF 模板实际改一版;第 12 篇说明如何用 Git 托管这些模板。

常见模块的菜谱路径(内核 / sh / bash / BusyBox)

知道「要改 recipe」还不够:读者常会问「内核在哪改?/bin/sh 又是谁提供的?」下面按 poky 源码树~/yocto/poky/)给出本系列最常碰到的几处路径。版本号随 scarthgap 等分支变化,以你克隆下来的实际文件名为准。

模块
典型菜谱位置(相对 poky)
管什么
入门怎么动
Linux 内核
meta/recipes-kernel/linux/linux-yocto_*.bb
编哪份内核、版本与默认配置从哪来
用 PREFERRED_PROVIDER_virtual/kernel / PREFERRED_VERSION_linux-yocto;细改用 meta-demo 里的 .bbappend(第 9 篇)
BusyBox
meta/recipes-core/busybox/busybox_*.bb
(及同目录 busybox.inc*.cfg
精简版多合一工具集:lscp、默认 ash 等
改功能开关多用 bbappend + 配置片段;不要直接改上游文件
bash
meta/recipes-extended/bash/bash_*.bb
完整 GNU Bash
镜像要装它时:IMAGE_INSTALL:append = " bash"(或写进 image 配方)
/bin/sh通常没有单独叫 sh 的菜谱
启动脚本、#! /bin/sh 依赖的默认 shell
由 alternatives 决定:默认多半是 BusyBox 的 ash;装上 bash 后也可能抢占 sh 链接

关系可以记成:

virtual/kernel  →  具体菜谱(本系列 x86 多为 linux-yocto)busybox         →  小工具 + 常见默认 /bin/sh(ash)bash            →  完整 shell;要进镜像需显式安装/bin/sh         →  符号链接,指向当前优先级最高的 shell 提供者

在已 source oe-init-build-env build 的终端里,可用下面命令「找路」(find 请在 poky 根目录执行):

# 某个包由哪份 .bb 提供(示例;需在 build 环境中)bitbake -e busybox | grep '^FILE='bitbake -e bash | grep '^FILE='bitbake -e virtual/kernel | grep -E '^(PREFERRED_PROVIDER_virtual/kernel|FILE|PN|PV)='# 源码树里快速定位菜谱文件名cd ~/yocto/poky   # 按你的实际克隆路径调整find . \( -name 'busybox_*.bb' -o -name 'bash_*.bb' -o -name 'linux-yocto_*.bb' \)

定制原则(后面第 8~9 篇会反复用到):

  1. 上游 meta/ 里的 .bb 只读、不手改——升级 poky 时会被覆盖。
  2. 改行为:在自己的 meta-demo 里写同名 **.bbappend**,或改 local.conf / image 的 IMAGE_INSTALL
  3. 内核版本与补丁的具体写法见第 9 篇;本节约路径地图,方便你对照源码树。

xuantie-yocto-project:看懂即可

平头哥玄铁的 Yocto 工程,典型形态是:

  1. 在上游 Yocto / OpenEmbedded 之上,叠加厂商 BSP layer;
  2. 提供玄铁相关 machine、内核 / 引导适配、参考 image;
  3. 用官方 README 说明如何获取、如何构建。

你去阅读它的价值在于:看清「真实芯片厂商如何组织 Yocto 工程」。但请反复记住本系列边界:

我们不在玄铁板卡上烧写,也不把玄铁 machine 当作第 8~12 篇的构建目标。动手目标是 x86_64:先 QEMU,再真机 PC。

检索关键词:

xuantie-yocto-project

QEMU 是什么?为什么先用它跑

动手 demo 会反复出现两个名字:qemux86-64 与 runqemu。先把 QEMU 说清楚,再进后面的约定表。

QEMU(Quick Emulator)是一套开源机器模拟器 / 虚拟化器:在你的 WSL2 Ubuntu 里,用软件「假装」出一块带 CPU、内存、磁盘、网卡的 x86_64 电脑,然后把你刚编好的内核和 rootfs 镜像交给这块「假电脑」去启动。

和真机的对应关系:

真机 PC:UEFI / 固件 → 引导器 → Linux 内核 → rootfs → init → …QEMU 里:runqemu 拉起 QEMU → 模拟硬件 → 同一套内核 / rootfs → init → …

qemux86-64 是 Yocto 里为「在 QEMU 上跑」准备的 MACHINE;runqemu 是 poky 自带的包装脚本,帮你选镜像、拼好 QEMU 命令(第 11 篇细讲)。

为什么本系列先编、先跑 QEMU(qemux86-64),再去做真机(genericx86-64)?

  1. 闭环快:不写 U 盘、不动分区,改完配置 → bitbake → runqemu,在同一台 Windows / WSL2 上就能看到登录提示和 hello。
  2. 风险低:失败最多是虚机起不来,不会误擦硬盘或搞坏 Windows 启动项。
  3. 问题更好定位:若 QEMU 里已经正常,再上真机出问题,多半是固件 / 引导 / 磁盘镜像格式,而不是「hello 配方写错了」。
  4. 和前面启动篇对得上:启动链(bootloader → kernel → rootfs → init)在虚机里同样完整可观察,只是硬件被模拟掉了。

一句话:QEMU 是廉价、可重复的「第一块板子」;真机 U 盘双系统是第二步,用来确认「通用 PC」路径也能走通。

Demo 约定(第 8~12 篇全部按此执行)

从现在起,动手部分统一使用下表,避免「文档里一会儿板子一会儿 PC」。

约定
编译宿主
Windows 上的 WSL2 + Ubuntu
MACHINE:qemux86-64(虚机)
给 QEMU 用的 64 位 x86 机型。优先构建,在 WSL2 里用 runqemu 验证,不动硬盘、风险低
MACHINE:genericx86-64(真机)
「通用 64 位 PC」机型。再构建一份,经 U 盘在 Windows PC 上双系统验证
工程基线
poky(含 meta-yocto-bsp)。两个机型通常都由此提供,本 demo 不必强上 meta-intel
镜像目标
core-image-base
。一个偏基础、带控制台能力的参考镜像,适合入门
镜像格式
虚机路径以满足 runqemu 为主;真机路径强调 wic、hddimg,并保留 tar.bz2(写 U 盘 / 铺硬盘)
自定义内容
加入 hello 程序。虚机与真机共用同一份 recipe;配置放在 meta-demo 的 TEMPLATECONF 模板中,两机型各用独立 build 目录
版本管理
用 Git 托管 meta-demo(含模板)到 GitHub;不提交 build 树与镜像(第 12 篇)
验证方式
先 runqemu(qemux86-64),再 U 盘 + 与 Windows 双系统(genericx86-64)
明确排除
玄铁板卡烧写 / 串口流程。避免硬件门槛打断学习主线

两机型怎么对比(先记住这张表)

对比项
qemux86-64
genericx86-64
用途
虚拟机快速验证
真机 U 盘 / 双系统
在哪里跑
WSL2 内的 QEMU
真实 PC 的 UEFI / 硬盘
风险
涉及写 U 盘与分区,需备份、认清设备名
学习价值
先闭环「配置 → 构建 → 看到 hello」
再走完整 PC 启动链:固件 → 引导器 → 内核 → rootfs
实话实说:genericx86-64 是「通用」机型,不能保证你笔记本上每块声卡、独显、特殊触控板都完美。本 demo 的成功标准是:虚机与真机都能进系统并运行 hello,而不是替代你的日常桌面发行版。

宿主依赖与磁盘:开始前的心理准备

Yocto 会下载大量源码、进行大量编译。请提前准备:

  1. 按官方 Quick Start 在 WSL2 Ubuntu 上安装宿主软件包(git、gcc、python3、chrpath、diffstat 等,具体列表随发行版变化);
  2. 预留 50GB 以上空闲磁盘,两机型都编时更多更稳妥;
  3. 保持网络畅通(公司代理环境需额外配置)。
备注:官方 Quick Start(宿主软件包安装命令)见https://docs.yoctoproject.org/5.0/brief-yoctoprojectqs/

第一次完整构建可能要数小时,这是正常现象,不是你操作错了。

本篇小结

  1. 编译宿主锁定为 Windows 上的 WSL2 Ubuntu。
  2. 通用路径:拿 poky → 按 MACHINE 初始化 build 目录 → 改 conf → bitbake → 取 deploy 产物。
  3. BitBake 流程:读配置 → 扫 layer/recipe → 跑任务链 → 组 rootfs → 出镜像;因此才需要改 bblayers.conf / local.conf / meta / recipe。
  4. bblayers.conf 管「用哪些层」,local.conf 管「这次怎么构建」;两机型建议两套 build。
  5. 常见菜谱:linux-yocto 在 meta/recipes-kernel/linux/,BusyBox 在 meta/recipes-core/busybox/,bash 在 meta/recipes-extended/bash//bin/sh 多半由 BusyBox 等通过 alternatives 提供,定制用 bbappend / IMAGE_INSTALL,勿直接改上游。
  6. QEMU 用软件模拟一台电脑;先 qemux86-64 + runqemu 闭环,再 genericx86-64 真机验证。玄铁工程只作对照。

下一篇开始真正改配置:用 bitbake-layers create-layer 建 meta-demo、导出 TEMPLATECONF,并把 hello 加进镜像。

系列文章列表:

从零构建 Linux 系统
从零构建 Linux|01 启动流程总览
从零构建 Linux|02 Bootloader
从零构建 Linux|03 内核启动
从零构建 Linux|04 Rootfs、init 与服务
从零构建 Linux|05 包管理
从零构建 Linux|06 Yocto 是什么

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:34:45 HTTP/2.0 GET : https://f.mffb.com.cn/a/510835.html
  2. 运行时间 : 0.256436s [ 吞吐率:3.90req/s ] 内存消耗:4,688.40kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7dc7b05d21fecbdb23914a02bd94d61b
  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.001013s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001430s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.011196s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.015693s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001413s ]
  6. SELECT * FROM `set` [ RunTime:0.002926s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001451s ]
  8. SELECT * FROM `article` WHERE `id` = 510835 LIMIT 1 [ RunTime:0.011710s ]
  9. UPDATE `article` SET `lasttime` = 1787290486 WHERE `id` = 510835 [ RunTime:0.012423s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000691s ]
  11. SELECT * FROM `article` WHERE `id` < 510835 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006565s ]
  12. SELECT * FROM `article` WHERE `id` > 510835 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001112s ]
  13. SELECT * FROM `article` WHERE `id` < 510835 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001995s ]
  14. SELECT * FROM `article` WHERE `id` < 510835 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.022565s ]
  15. SELECT * FROM `article` WHERE `id` < 510835 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005405s ]
0.260017s