当前位置:首页>Linux>从零构建 Linux|09 进一步定制系统

从零构建 Linux|09 进一步定制系统

  • 2026-08-21 06:34:07
从零构建 Linux|09 进一步定制系统
系列第 9 篇|在 hello 之外:默认镜像、启动画面、内核版本、Bootloader Logo、时区语言、裁剪与包管理改完配置后,下一篇再开长构建;虚机 / 真机两套 build 共用这些定制

第 8 篇已经讲清:内核经 MACHINE 进镜像、apt 默认不在 core-image-base 里,以及「改 conf / 自己的 layer,不改 poky 原文件」。本篇按该原则动手,每项定制都先对照「改原文件」和「改 conf」两种方案,实际步骤走后者。回答七个常见问题:

  1. 默认构建的系统里有什么?哪些必需、哪些可裁?
  2. 如何改用户空间启动闪屏(psplash)?
  3. 如何自定义 Bootloader 启动 Logo(GRUB 背景)?
  4. 如何指定 / 切换 Linux 内核版本?
  5. 如何定制时区与语言?
  6. 如何裁剪预置服务和应用?
  7. 如何配置预装的包管理器?

这些改动对 qemux86-64 与 genericx86-64 同样适用(Bootloader Logo 以真机 GRUB 路径为主)。两套 build 都要生效时:优先改 meta-demo/conf/templates/*/local.conf.sample(便于第 12 篇用 Git 托管),并同步到已有的 build-qemux86-64/conf/local.conf 与 build-genericx86-64/conf/local.conf。改完后统一进第 10 篇 bitbake

仍先对齐启动链——本篇会改到链上的多环:

bootloader(可改 Logo)→ linux kernel(可改版本)→ rootfs→ init → services → application         ↑ 还可改 psplash / 时区 / 裁剪 / 包管理

1. 默认镜像里有什么:必需与可裁剪

本系列镜像目标是 core-image-base。可以把它理解成:

在「能登录的最小系统」之上,再带上一组常见硬件相关支持,方便在 PC / 虚机上当「基础控制台系统」用。

从下往上三层

层级
内容
裁剪建议
第一层:能启动、能进 shell
内核(及启动所需模块)、C 库、init、基础文件系统与账号、udev、shell / 基础命令集
几乎都要保留;少了很难完成「上电 → 能敲命令」
第二层:中等硬件与网络能力
core-image-base
 相对 core-image-minimal 多出的无线、蓝牙、声卡等相关 packagegroup
可按产品裁;真机暂时用不到可在「裁剪」一节收紧
第三层:你自己加的
如 hello、splash、GRUB Logo、指定内核版本、时区数据、包管理器等
完全可控,由 IMAGE_INSTALL / IMAGE_FEATURES / PREFERRED_* / bbappend 决定

一张「心里账」

类别
内容
说明
建议视为必需
内核、init、shell、基础库、启动所需模块与 udev(或等价物)
没有它们,demo 验证也做不成
建议视为可裁剪
文档包、调试符号、多余网络服务、用不到的硬件 packagegroup、示例程序、本篇尚未需要的桌面组件
可按产品需求收紧
不要一上来就「削到骨」
先保证虚机 / 真机能进系统并跑 hello,再按需裁。裁错了只是多编一次,但排查成本更高

想确认「当前配方到底装了啥」,构建前可用:

bitbake -e core-image-base | grep "^IMAGE_INSTALL="

构建后也可到 rootfs 目录或用目标机上的包管理命令核对(若已启用包管理,见第 7 节)。

2. 如何修改用户空间启动闪屏(psplash)

这里的「启动闪屏」指:内核起来之后、进登录界面之前的 framebuffer 画面,不是桌面壁纸,也不是下一节的 GRUB Logo。

Yocto 里最常见的是 psplash。第 8 篇读过 core-image-base.bb:它已有 IMAGE_FEATURES += "splash",默认就会装 psplash。本节能改的是画面内容

两种方案

方案
做法
评价
A. 改原文件
直接替换 poky 里 meta/recipes-core/psplash/ 下的默认 PNG(文件名以本机 SRC_URI / SPLASH_IMAGES 为准)
改完立刻生效,但升级 poky 会丢图、也进不了 Git 里的 meta-demo
B. 改 conf / 自己的 layer
启用与否用 conf(本镜像已启用 splash);换图在 meta-demo 写 .bbappend,用 FILESEXTRAPATHS 覆盖同名 PNG
上游只读;图和 append 可随 layer 托管

换图没有「一行 local.conf 变量」可换路径,bbappend 就是配置层做法,不要去 poky 里覆盖原文件。

部分发行版也会用 SPLASH 指向别的闪屏实现;入门保持默认 psplash 即可。若你用的不是 core-image-base、确认没有 splash,再在 local.conf 追加:

IMAGE_FEATURES:append = " splash"# 或:IMAGE_INSTALL:append = " psplash"

换成自己的 Logo(方案 B)

  1. 在 meta-demo 里为 psplash 写一个 .bbappend
  2. 用自己的 PNG 替换默认图(尺寸 / 格式见下);
  3. 再 bitbake core-image-base

图片尺寸与格式(psplash)

psplash 画的是「居中 Logo + 进度条」,不是全屏壁纸(全屏背景见下一节 GRUB)。现代 Poky 菜谱接受 PNG,构建时由 make-image-header.sh(内部用 gdk-pixbuf-csource)转成 C 头文件再编进 psplash 可执行文件。

建议
格式
PNG
;RGB 或 RGBA 均可(支持透明通道)
色深
常用 8 bit/通道;避免奇异色板、CMYK、带 ICC 的特殊导出
尺寸
无固定分辨率要求
;须小于目标 framebuffer(屏幕)宽高,否则会被裁切或显示异常
常用起点
默认 Poky Logo 大约几百像素级(历史上常见约 220×137427×214 等);入门可用 约 200~500 px 宽 的 Logo
布局
Logo 水平居中,竖直大致偏上;下方留给进度条,勿做成铺满整屏的图
文件名
与上游默认同名以便覆盖,常见为 psplash-poky.png / psplash-poky-img.png(以本机 psplash 菜谱 SRC_URI / SPLASH_IMAGES 为准)

实践建议:先用一张小而清晰的 Logo(例如 320×180)在 qemux86-64 上验证流程,确认能显示后再换成最终品牌图。

示意目录:

meta-demo/recipes-core/psplash/  psplash_%.bbappend  files/psplash-poky.png

psplash_%.bbappend 示意:

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"# 用同名文件覆盖上游默认图;具体文件名以本机 psplash 菜谱为准SRC_URI:append = " file://psplash-poky.png"

改完后务必先在 qemux86-64 上验证。

和 Bootloader Logo 的区别

类型
阶段
说明
GRUB 背景 / Logo
Bootloader 阶段(内核尚未跑)
真机 UEFI 菜单长什么样;见下一节
psplash
内核已启动后的用户空间闪屏
本节;品牌化「进系统前」的画面

两条可以同时做:先看到 GRUB Logo,再看到 psplash,最后进登录。

3. 如何自定义 Bootloader 启动 Logo(GRUB)

本系列真机路径是 UEFI → GRUB → 内核(见第 2 篇)。「Bootloader 启动 Logo」在这里就是:给 GRUB 菜单换一张背景图。

qemux86-64 的 QEMU 启动路径往往不经过完整 GRUB 菜单体验;Logo 验证以 genericx86-64(U 盘 / 双系统)为主。配置仍建议写进共用的 meta-demo,两套 build 都能编进产物。

两种方案

方案
做法
评价
A. 改原文件
在 poky 的 meta/recipes-bsp/grub/(或本机实际的 grub-bootconf / grub-efi 菜谱)里直接换 PNG、改 grub.cfg 片段
路径直观,但 grub 菜谱一升级,Logo 和 cfg 都没了
B. 改 conf / 自己的 layer
在 meta-demo 写 bbappend:把 PNG 打进 boot 分区,并追加 background_image 等 cfg 片段
不碰上游;和 hello、psplash 一样进 Git

GRUB 背景同样没有现成的 GRUB_LOGO = "..." 变量可写在 local.conf 里,方案 B 用 bbappend 完成「装图 + 改 cfg」。下面按方案 B 做。

准备图片

  1. 准备一张 PNG(常见可用 1024×768 或 800×600;避免过于花哨的索引色)。
  2. 放到自定义 layer,例如:
meta-demo/recipes-bsp/grub/  files/boot-logo.png  grub-bootconf_%.bbappend

(菜谱名因 Yocto 版本略有差异:可能是 grub-bootconfgrub-efi 相关 append,或镜像后处理。先在 poky 里 find . -name '*grub*bootconf*' / bitbake -e | grep -i grub 确认本机实际菜谱名,再命名 bbappend。)

两件事:装图 + 改 grub.cfg

目标效果等价于在 GRUB 配置里增加类似片段:

insmod all_videoinsmod gfxterminsmod pngset gfxmode=autoterminal_output gfxtermbackground_image -m stretch /boot-logo.png

示意 bbappend(按本机菜谱字段微调):

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"SRC_URI:append = " file://boot-logo.png"do_install:append() {    install -m 0644 ${WORKDIR}/boot-logo.png ${D}/boot-logo.png}# 若菜谱用 cfg 片段组装 grub.cfg,可追加自己的片段文件;# 或用 ROOTFS_POSTPROCESS / wic 钩子把 background_image 写进最终 grub.cfg。
步骤
作用
把 PNG 打进 EFI / boot 分区可访问路径
GRUB 运行时能 background_image 读到文件
在 grub.cfg 里启用 gfxterm + 加载 png 模块
纯文本终端看不到背景图
timeout
 略大于 0
菜单一闪而过时,Logo 几乎看不到

验证建议

  1. 先编 genericx86-64,写 U 盘或装双系统(第 11 篇)。
  2. 开机停在 GRUB 菜单时,应看到背景图。
  3. 若只有黑底白字:多半是未启用图形终端、图片路径不对,或 PNG 格式不被 GRUB 接受——先缩小分辨率、换成标准 RGB PNG 再试。
嵌入式板上若走 U-Boot,Logo 定制方式完全不同(splash 环境变量 / 厂商工具)。本系列 PC demo 只覆盖 GRUB。

4. 如何自定义 Linux 内核版本

启动链上的下一环是内核。Yocto 不会「随便下一个最新 mainline」;它用 virtual/kernel 指向具体菜谱(本系列 x86 机型默认多为 linux-yocto),版本由该菜谱的 PV / PREFERRED_VERSION 决定。

先看清:当前会编哪个版本

在已 source 的 build 环境中:

# 当前 virtual/kernel 由谁提供、版本是多少bitbake -e virtual/kernel | grep -E '^(PREFERRED_PROVIDER_virtual/kernel|PN|PV)='# 本层可见的 linux-yocto 版本列表bitbake -s | grep '^linux-yocto '

也可以到源码树里直接看菜谱文件名,例如:

meta/recipes-kernel/linux/linux-yocto_6.6.bb

文件名里的版本号,就是你「可以选」的候选之一——只能选本套 poky / layer 里已经存在的菜谱,不能凭空写一个上游还没提供的版本号。

用 PREFERRED_VERSION 钉住版本

在 local.conf(及对应 TEMPLATECONF)中追加,例如:

# 提供内核的菜谱(x86 默认一般已是 linux-yocto,可显式写出)PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"# 钉住大版本;% 表示匹配该前缀下的具体修订号PREFERRED_VERSION_linux-yocto = "6.6%"
写法
含义
PREFERRED_PROVIDER_virtual/kernel
用哪套内核菜谱(默认 linux-yocto;换厂商内核时才改)
PREFERRED_VERSION_linux-yocto = "6.6%"
在多个 linux-yocto_*.bb 并存时,优先选 6.6.x

改完后立刻校验:

bitbake -e virtual/kernel | grep '^PV='

应看到你钉住的版本前缀。再 bitbake virtual/kernel 或整编镜像时,内核会按新版本重编(耗时明显,属正常)。

进阶:bbappend 打补丁 / 改配置(可选)

只换版本用上面两行即可。若还要加驱动补丁或改 .config,在 meta-demo 里追加:

meta-demo/recipes-kernel/linux/  linux-yocto_%.bbappend  files/demo.cfg          # 可选:配置片段  files/0001-demo.patch   # 可选:补丁

linux-yocto_%.bbappend 示意:

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"SRC_URI:append = " \    file://demo.cfg \    file://0001-demo.patch \"

配置片段里写 CONFIG_XXX=y 这类一行一项即可;具体是否被 linux-yocto 的 kernel-meta 机制吸收,以你所用 Yocto 版本文档为准。入门阶段:先会钉版本,再按需加补丁

注意

  1. 版本号必须在当前 layer 集合里真实存在;写错会出现 preferred version ... not available
  2. 换内核几乎总会触发内核与模块重编,磁盘与时间成本高——先在虚机 build 验证。
  3. 跑起来后用 uname -r 确认,应与你钉的版本一致。

5. 如何定制系统的时区和语言

目标:进系统后时间对、中文环境可用(至少 locale 数据齐全)。

两种方案

想改什么
方案 A:改原文件
方案 B:改 conf
时区
改 tzdata 菜谱里的默认 DEFAULT_TIMEZONE(常见默认是 Universal / UTC)
local.conf
(及模板)写 DEFAULT_TIMEZONE = "Asia/Shanghai"
语言
改 distro 的 meta-poky/conf/distro/poky.conf 里的 IMAGE_LINGUAS 等
local.conf
 写 IMAGE_LINGUASGLIBC_GENERATE_LOCALES

时区和语言正好是为 conf 准备的旋钮:方案 B 两行就能钉住,不必 fork 上游 distro。好处见第 8 篇:升级 poky 不丢设置,两套 MACHINE 的模板各写一份(或共用同一段)即可复现。

下面只写方案 B。在 conf/local.conf 中追加:

# 时区:中国常用 Asia/ShanghaiDEFAULT_TIMEZONE = "Asia/Shanghai"# 镜像携带的语言包(按需增减)IMAGE_LINGUAS = "en-us zh-cn"# glibc 生成哪些 locale(与上面呼应)GLIBC_GENERATE_LOCALES = "\  en_US.UTF-8 \  zh_CN.UTF-8"

白话说明

变量
作用
DEFAULT_TIMEZONE
决定默认 /etc/localtime 指向哪个时区。不做这一步,很多镜像默认是 UTC,你会感觉「时间差八小时」
IMAGE_LINGUAS
控制镜像里带哪些语言相关支持包,名字用 Yocto 习惯写法(如 zh-cn
GLIBC_GENERATE_LOCALES
告诉 glibc 构建阶段生成哪些 locale。只改 LANG 却没生成对应 locale,运行时容易出现警告或回退到 C locale

进系统后快速自检

datetimedatectl status   # 若有 systemdlocaleecho$LANG

若时区不对,先查镜像是否安装了 tzdata,以及 DEFAULT_TIMEZONE 是否写进了本次构建。

控制台字体能否完美显示中文,还取决于终端 / 字体包,不只是 locale。本篇目标是「时区与语言数据正确」;完美中文 TUI/GUI 可后续再加字体与终端配置。

6. 如何裁剪预置服务和应用

裁剪的原则很简单:

能不装的包,就不要装进 rootfs;必须装但默认不该开机自启的服务,就关掉自动启用。

从镜像里拿掉软件包

在 local.conf

# 示例:不要装某个包(名字换成你要去掉的)IMAGE_INSTALL:remove = "\  packagegroup-base-wifi \  packagegroup-base-bluetooth"# 更强硬:构建时直接排除(注意依赖可能被连带)PACKAGE_EXCLUDE += "\  bluez5"
写法
作用
注意
IMAGE_INSTALL:remove
从镜像安装列表里去掉
适合「配方里默认带了,我明确不要」
PACKAGE_EXCLUDE
更强硬的排除
可能牵动依赖;排除后若有包硬依赖它,构建会报错——这是好事,能逼你看清依赖关系

去掉镜像特性

# 示例:去掉不需要的 IMAGE_FEATURESEXTRA_IMAGE_FEATURES:remove = "\  tools-debug \  dbg-pkgs"

文档包、调试符号、开发头文件等,往往经 IMAGE_FEATURES / EXTRA_IMAGE_FEATURES 进来。产品镜像通常不需要它们。

裁掉「服务开机自启」(systemd 示例)

若 DISTRO 使用 systemd,可在自己的 recipe 或 image 的后处理里禁用单元,例如:

# 写在某个 bbappend / image 配方中的示意SYSTEMD_AUTO_ENABLE:${PN} = "disable"

或在 image 的 ROOTFS_POSTPROCESS_COMMAND 里对指定 unit 做 systemctl mask。入门阶段更推荐:

  1. 先用 IMAGE_INSTALL:remove 去掉整包;
  2. 包必须保留、只要不自启时,再对单个服务做 disable。

裁剪时的安全顺序

  1. 虚机镜像上先裁、先验证;
  2. 每次少改几项,避免一次删光后无法登录;
  3. 保留串口 / 控制台登录相关组件,直到你确认另有可靠入口。

7. 如何配置预装的包管理

第 5 篇讲过:Ubuntu 用 apt,Fedora 用 dnf。第 8 篇也强调过:core-image-base默认不带 apt——PACKAGE_CLASSES 只管构建时打哪种包,目标机要带包管理器还得打开 package-management

若你希望目标系统也能像发行版一样「以后再装包」,需要两件事:

  1. 选定包格式(rpm / ipk / deb);
  2. 打开 package-management 镜像特性。

两种方案

方案
做法
评价
A. 改原文件
在 core-image-base.bb 里加 IMAGE_FEATURES += "package-management",并改 meta-poky 模板里的 PACKAGE_CLASSES
所有用这份上游镜像的人都会带上包管理;升级 poky 时这两处很容易冲突
B. 改 conf
只在自己的 local.conf / TEMPLATECONF 里设 PACKAGE_CLASSES 和 EXTRA_IMAGE_FEATURES
镜像配方保持原样;虚机 / 真机模板可共用,也可按产品关掉

要 apt 就选 package_deb;保持 Poky 默认 rpm 则目标机是 rpm / dnf 一族。不要为了装 apt 去改 core-image-base.bb

在 local.conf 中配置(方案 B)

# 三选一(与工具链习惯有关,选一种坚持用)PACKAGE_CLASSES ?= "package_rpm"# PACKAGE_CLASSES ?= "package_ipk"# PACKAGE_CLASSES ?= "package_deb"# 把包管理器与在线/离线装包能力打进镜像EXTRA_IMAGE_FEATURES += "package-management"

选定后,目标机上大致对应

PACKAGE_CLASSES
目标机侧常见工具
package_rpmrpm
 / dnf(视具体配方而定)
package_ipkopkg
(嵌入式里很常见)
package_debdpkg
 / apt 一族

本系列读者若更熟 Ubuntu,可尝试 package_deb;若更偏嵌入式资料,package_ipk 也很常见。关键是:构建时的 PACKAGE_CLASSES 与目标机工具要一致

和「构建时 IMAGE_INSTALL」的关系

机制
时机
适合
IMAGE_INSTALL
构建阶段就把包装进 rootfs
必须预装的组件(hello、时区数据、psplash)
package-management
系统跑起来之后仍能安装 / 升级 / 卸载包
「现场再装工具」或做演示

两者可以同时存在:预装保底功能,包管理负责后续扩展。

体积与安全提醒

打开包管理会增大镜像,并引入「运行时改系统」的能力。产品固件若强调只读、可复现,可能故意不装包管理器,只在构建时用 IMAGE_INSTALL 固化内容。按你的场景选择即可。

建议的 local.conf 追加块(可整段参考)

把本篇常用项收成一块,按需删减后追加到第 8 篇已有配置之后(两套 MACHINE 的模板 / local.conf 都建议加上):

# --- 09 进一步定制(按需启用)---# 启动闪屏(用户空间)IMAGE_INSTALL:append = " psplash"# 内核版本(版本号须是本套 poky 里真实存在的;先 bitbake -s | grep linux-yocto)PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"# PREFERRED_VERSION_linux-yocto = "6.6%"# 时区与语言DEFAULT_TIMEZONE = "Asia/Shanghai"IMAGE_LINGUAS = "en-us zh-cn"GLIBC_GENERATE_LOCALES = "\  en_US.UTF-8 \  zh_CN.UTF-8"# 预装包管理(示例用 rpm;可改 ipk/deb)PACKAGE_CLASSES ?= "package_rpm"EXTRA_IMAGE_FEATURES += "package-management"# 裁剪示例(确认不需要再取消注释)# IMAGE_INSTALL:remove = "\#   packagegroup-base-bluetooth"# EXTRA_IMAGE_FEATURES:remove = "\#   tools-debug"
GRUB Logo / psplash 换图没有对应的 local.conf 变量,方案 B 靠 meta-demo 里的 bbappend 与资源文件,不要去 poky 里覆盖原图。钉内核版本用上面的 PREFERRED_*;换图后记得把 bbappend 一并纳入第 12 篇的 Git 托管。

改完后仍建议先做轻量校验,再进入长构建:

bitbake -e | grep "^MACHINE="bitbake -e | grep "^DEFAULT_TIMEZONE="bitbake -e virtual/kernel | grep -E '^(PN|PV)='bitbake -e core-image-base \  | grep "^IMAGE_FEATURES="

本篇小结

  1. 默认镜像:core-image-base = 最小可登录系统 + 一组可裁的中等能力 + 你追加的包。
  2. 定制一律走方案 B(conf / meta-demo),不改 poky 原文件:时区、语言、包管理用 local.conf 变量;psplash / GRUB Logo 换图用 bbappend。
  3. 用户空间闪屏:core-image-base 已启用 splash;换图用 bbappend。
  4. Bootloader Logo:真机路径改 GRUB 背景图(装 PNG + 改 grub.cfg);以 genericx86-64 验证为主。
  5. 内核版本:用 PREFERRED_PROVIDER / PREFERRED_VERSION 钉住本套 poky 已有的 linux-yocto;可选 bbappend 打补丁。
  6. 时区看 DEFAULT_TIMEZONE,语言看 IMAGE_LINGUAS 与 locale 生成。
  7. 裁剪优先 IMAGE_INSTALL:remove / IMAGE_FEATURES,服务自启再细调。
  8. 运行时装包:选 PACKAGE_CLASSES 并打开 package-management;要 apt 用 package_deb,不要改 core-image-base.bb

下一篇在 WSL2 里执行 bitbake core-image-base,分别产出虚机与真机镜像。

系列文章列表:

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

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 17:46:05 HTTP/2.0 GET : https://f.mffb.com.cn/a/511209.html
  2. 运行时间 : 0.196027s [ 吞吐率:5.10req/s ] 内存消耗:4,791.28kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c55c864ea4ce9bd9565a8d7b0453ec88
  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.000876s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001394s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000618s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000623s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001275s ]
  6. SELECT * FROM `set` [ RunTime:0.000501s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001384s ]
  8. SELECT * FROM `article` WHERE `id` = 511209 LIMIT 1 [ RunTime:0.001190s ]
  9. UPDATE `article` SET `lasttime` = 1787305565 WHERE `id` = 511209 [ RunTime:0.008377s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000671s ]
  11. SELECT * FROM `article` WHERE `id` < 511209 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001527s ]
  12. SELECT * FROM `article` WHERE `id` > 511209 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001035s ]
  13. SELECT * FROM `article` WHERE `id` < 511209 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002093s ]
  14. SELECT * FROM `article` WHERE `id` < 511209 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002263s ]
  15. SELECT * FROM `article` WHERE `id` < 511209 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002253s ]
0.199580s