news 2026/9/16 23:53:35

龙蜥Anolis OS内核升级全攻略:从环境查询到GRUB启动配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
龙蜥Anolis OS内核升级全攻略:从环境查询到GRUB启动配置

1. 为什么需要升级龙蜥内核,以及这篇指南能解决什么问题

做服务器运维的朋友都知道,Linux系统的稳定性和性能上限,很大程度上取决于内核版本。Anolis OS(龙蜥操作系统)作为国内主流的开源服务器操作系统,默认自带的内核通常已经很稳定,但遇到新硬件支持不足、需要用到更高版本的网络协议栈、或者要启用某些容器相关的特性时,光靠默认内核是撑不住的。这时候就需要把内核升级到更新的版本。

不过内核升级在服务器上是个敏感操作,搞不好就是起不来机器、网卡驱动丢失、文件系统识别不了,严重的时候只能去机房或者带外管理口抢救。所以我一直强调一个观点:内核升级不是“装个新包重启一下”这么简单,从查询当前环境到配置好启动项,每一步都要心里有数。

这篇指南就围绕“查询”和“配置”两个关键词展开,把Anolis龙蜥内核升级的全流程拆开讲清楚。内容包括:怎么查当前内核版本和硬件兼容性、升级前要做哪些准备、用yum/dnf源安装新内核、升级之后如何配置默认启动项、以及常见问题的排查方法。适合三类人看:刚接手龙蜥服务器想了解内核升级流程的运维新手、准备在生产环境做内核变更但心里没底的系统管理员、以及出于学习目的想在虚拟机里折腾内核的实验党。

我在实际操作中用的是Anolis OS 8.8,默认内核版本是5.10,这套流程在龙蜥8和龙蜥7上都适用,只是包管理器命令略有差异,后面会单独说明。

2. 升级前的环境查询:不知道现状,就别谈升级

2.1 内核版本与系统发行版信息查询

很多人在升级前第一反应就是直接装新内核,这是最容易出事的地方。正确做法是先摸清楚当前系统的底细,至少得知道三件事:当前内核版本、操作系统大版本、系统架构。

查询当前内核版本,核心命令就一条:

uname -r

输出类似这样:

5.10.134-16.1.an8.x86_64

这一行信息量很大。5.10是内核主版本,an8表示这是龙蜥针对Anolis OS 8编译的内核,x86_64是架构。如果你看到的是4.18或者3.10,说明系统内核偏老,有升级空间。

查询操作系统发行版信息,用这个:

cat /etc/os-release

输出内容会包含NAME="Anolis OS"VERSION="8.8"这样的字段。这一步很重要,因为龙蜥的内核仓库是按系统版本来区分的,8系和7系的镜像源不一样,用错源会导致依赖解析失败。

架构信息用这个命令确认:

arch

服务器基本上都是x86_64,但如果是ARM架构的服务器(比如倚天710或者其他ARM平台),后面装内核包的时候要选择对应的aarch64版本,千万不能混用。

2.2 查询已安装内核包与当前启动项

除了系统信息,还要查一下系统里已经装了哪些内核包。这能帮你确认两件事:当前用的内核是哪个rpm包提供的、系统里是否留存了旧内核以便回滚。

查询已安装内核包:

rpm -qa | grep kernel

输出会列出kernelkernel-corekernel-develkernel-modules等一系列包。注意看kernel-core的版本号,和uname -r输出的版本应该一一对应。如果看不到对应关系,说明当前启动的内核可能不是通过rpm包安装的(比如手动编译的内核),这种情况下升级策略要调整。

同时还要查看当前默认启动项和GRUB菜单里的所有内核条目:

grubby --default-kernel

这个命令直接输出默认内核的完整路径,比如/boot/vmlinuz-5.10.134-16.1.an8.x86_64

查看GRUB菜单里有多少内核可选:

grubby --info=ALL | grep -E '^kernel|^index'

输出会列出每个内核的索引号和对应的内核文件。这一步可以帮你判断系统里有多少个可用的内核版本,方便升级后对照。

2.3 硬件兼容性预检:升级前最容易被忽略的一步

内核升级最大的风险不是内核本身,而是硬件兼容性。新内核仓库里包含的驱动模块和当前硬件配合不好,轻则某些功能异常,重则直接启动失败。所以升级之前花几分钟做一次硬件兼容性预检,很有必要。

查看当前CPU信息:

lscpu

重点看Model nameFlags。如果CPU比较新,比如Intel 12代之后的大小核架构,或者AMD Zen 3/4架构,老内核(3.10、4.18)可能缺少对应的调频和调度优化。这种情况下升级内核的收益最大。

查看网卡型号和驱动:

lspci | grep -i ethernet

再看当前网卡用的是哪个内核模块:

lsmod | grep -E 'ixgbe|i40e|mlx|e1000|igb'

这里有个实操经验:升级内核之后,网卡驱动模块名可能变化,比如从ixgbe变成iavf。如果你用的是操作系统自带驱动,新内核大概率能自动加载;但如果你是手动安装过厂商提供的网卡驱动,升级内核后驱动模块很可能加载失败,因为DKMS模块需要针对新内核重新编译。

查看存储设备信息:

lsblk

另外还要查一下root文件系统的类型:

df -T /

比如输出显示ext4或者xfs,这个信息用于判断升级后是否需要处理文件系统兼容性问题。xfs在较新内核上有日志格式升级的机制,跨大版本升级时偶尔会遇到。

提示:如果服务器上有硬件RAID卡,建议提前到阵列卡厂商官网确认其驱动是否适配目标内核版本。RAID卡驱动出问题,系统直接找不到启动盘,这是生产环境升级时最常见的翻车场景之一。

3. 升级方案的选型与仓库配置

3.1 三种升级路径对比:选对方案,省一半的事

查询完现状之后,接下来要决定用哪种方式升级内核。我总结下来基本有三条路:

第一条路:使用龙蜥官方软件仓库的增量更新。这条路径最简单,就是通过dnf update把内核小版本往上升。比如从5.10.134-16升级到5.10.134-17,或者跨小版本升级到5.10的更高patch版本。这种方式风险最小,因为所有驱动和依赖都是龙蜥官方验证过的,适合只想修bug和补安全漏洞的场景。

第二条路:启用龙蜥的内核plus仓库或备用内核仓库,装新版本内核。龙蜥官方除了默认的基础仓库,还有一个名为plus的扩展仓库,里面提供更新版本的内核(比如从5.10升级到5.15或者6.x)。这种方式可以拿到更新的内核特性,同时仍然通过rpm包管理,方便卸载和回滚。缺点是这些内核经过的测试周期比默认内核短,生产环境需要谨慎评估。

第三条路:手动编译内核。这条路只推荐给有特殊需求的场景,比如需要启用特定的调度器、需要自定义内核参数、或者需要打特定补丁。手动编译的好处是灵活,但缺点也明显:维护成本高、升级麻烦、出了问题官方不背锅。在服务器场景下,能用包管理解决的尽量别自己编译。

说句实话,90%的龙蜥用户升级内核,走第二条路就够了。既能用上较新的内核,又能用rpm包管理保持可控性,回滚也只是一个命令的事。

3.2 配置龙蜥内核仓库:手把手教你加源

既然推荐走第二条路,那就要先把龙蜥的扩展仓库配置好。Anolis OS 8的仓库配置文件在/etc/yum.repos.d/目录下,我们需要确认或者新建一个.repo文件。

先看看现有的仓库配置:

ls -l /etc/yum.repos.d/

通常会看到类似AnolisOS-BaseOS.repoAnolisOS-AppStream.repo这样的文件。如果没有看到plus仓库,就需要手动添加。

vim或者nano编辑仓库配置:

vim /etc/yum.repos.d/AnolisOS-Plus.repo

写入以下内容:

[Plus] name=AnolisOS-$releasever - Plus baseurl=https://mirrors.openanolis.cn/anolis/$releasever/Plus/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ANOLIS

这里有几个参数需要解释一下:

  • $releasever是系统版本号变量,dnf会自动解析成8或7,不用手写死。
  • $basearch是架构变量,会自动解析成x86_64aarch64
  • gpgcheck=1表示开启GPG签名验证,防止装到被篡改的包。
  • gpgkey指向龙蜥官方的GPG公钥。如果文件路径不存在,可以先导入:
rpm --import https://mirrors.openanolis.cn/anolis/RPM-GPG-KEY-ANOLIS

仓库文件写好后,验证一下源是否可用:

dnf repolist

输出里应能看到Plus仓库出现在列表中。如果提示找不到镜像或者元数据获取失败,先检查网络连通性,再检查baseurl里的路径是否能通过浏览器访问。

提示:如果你所在网络访问mirrors.openanolis.cn速度较慢,可以替换成阿里云镜像源等龙蜥官方认可的镜像站点。方法就是把baseurl里的域名改掉,比如改成https://mirrors.aliyun.com/anolis/$releasever/Plus/$basearch/os/。实测国内云服务器用阿里云镜像速度明显快不少。

3.3 源配好了先别急着装:先做这步依赖检查

配置好仓库之后,先别急着执行dnf install kernel,建议先刷新一下元数据,同时查看一下仓库里有哪些内核版本可选:

dnf clean all dnf makecache

然后搜索可用的内核包:

dnf list --available kernel

这个命令会列出Plus仓库里提供的内核版本。可能会看到类似kernel-5.15.x.x.an8或者kernel-6.1.x.x.an8这样的版本号。看到多个版本不要贪心,选一个稳定的即可。我的建议是优先选择5.15或者6.1这类LTS(长期支持)版本,不要追最新的大版本。

在真正安装之前,还可以检查一下将安装的内核包需要哪些依赖:

dnf deplist kernel-6.1.60-1.an8.x86_64

或者直接模拟安装,看看会不会有依赖冲突:

dnf install --assumeno kernel-6.1.60-1.an8.x86_64

注意最后的--assumeno参数,意思是“假设回答no”,也就是只做依赖解析和下载准备,不真正执行安装。如果这一步直接报错,说明有依赖问题需要先解决,不要跳过这个检查。

4. 内核升级实操:从下载安装到重启验证

4.1 安装新内核:安装哪些包、什么顺序最稳

确认仓库和依赖都没问题之后,就可以正式安装内核了。这里要特别注意:不建议只装一个kernel包就完事,建议把配套的kernel-corekernel-moduleskernel-devel一起装上。

为什么?我给你解释一下:

  • kernel-core包含了内核启动需要的最小文件集,不装的话系统可能无法启动。
  • kernel-modules包含了常用的驱动模块,不装的话很多硬件设备会无法识别。
  • kernel-devel是内核头文件和开发库,虽然运行时不依赖,但如果之后要编译第三方驱动模块(比如某些网卡驱动、GPU驱动),就必须要这个包。

安装命令如下:

dnf install kernel kernel-core kernel-modules kernel-devel

如果你已经明确知道具体版本号,也可以直接指定版本安装:

dnf install kernel-6.1.60-1.an8.x86_64 kernel-core-6.1.60-1.an8.x86_64 kernel-modules-6.1.60-1.an8.x86_64 kernel-devel-6.1.60-1.an8.x86_64

安装过程中,dnf会自动生成initramfs(初始内存文件系统),配置文件位于/boot/grub2/grub.cfg,并且把新内核追加到GRUB菜单里。这个过程通常不需要手动干预,但装完之后最好确认一下新内核是否已经出现在GRUB菜单中:

grubby --info=ALL | grep -E '^kernel|^index'

输出应该能看到新版本的vmlinuz文件路径。

注意:如果你用的是Anolis OS 7系列,包管理器是yum而不是dnf,命令改成yum install即可,其他逻辑一致。Anolis OS 8和9系列使用dnf

4.2 配置默认启动内核:不配置就重启,等于给自己挖坑

新内核装好之后,系统默认的启动内核其实还是旧版本。有些朋友装完内核直接重启,发现机器起来之后uname -r显示的版本没变,还以为是安装失败了。其实不是,只是默认启动项没切过去。

查看当前默认启动内核:

grubby --default-kernel

要把默认启动内核切换到新版本,用grubby命令指定:

grubby --set-default=/boot/vmlinuz-6.1.60-1.an8.x86_64

注意这里的vmlinuz路径要替换成你系统里实际存在的文件。如果不确定文件名,可以先列出:

ls -l /boot/vmlinuz-*

设置完成后再验证一下:

grubby --default-kernel

输出应该显示你刚才设置的新内核路径。

这里还有一个细节值得说一下:grubby命令会同时修改/etc/default/grub中的GRUB_DEFAULT配置。以后再执行grub2-mkconfig -o /boot/grub2/grub.cfg重新生成引导配置时,默认启动项依然保留为新内核,不会出现“刷新配置后又变回旧内核”的问题。

4.3 调整内核启动参数:按需配置,别照抄网上的

新内核装好、默认启动项也切好之后,还有一个关键步骤就是内核启动参数的配置。很多人的做法是直接沿用旧内核的参数,但不同内核版本对某些参数的默认值有变化,直接用不一定合适。

查看当前GRUB启动参数:

grubby --info=ALL | grep -E '^kernel|^args'

或者只查看默认内核的参数:

grubby --info=$(grubby --default-kernel) | grep args

如果你需要追加启动参数,比如配置console串口输出、关闭NUMA、或者调整crashkernel内存预留,可以用--update-kernel参数来追加:

grubby --update-kernel=/boot/vmlinuz-6.1.60-1.an8.x86_64 --args="console=ttyS0,115200n8"

如果需要删除某个参数(比如删除一个不再需要的旧参数),用--remove-args

grubby --update-kernel=/boot/vmlinuz-6.1.60-1.an8.x86_64 --remove-args="quiet"

这里我要特别提醒一点:不要盲目照搬网上的内核参数优化教程。很多参数在不同内核版本、不同硬件平台下的行为差异很大。比如transparent_hugepage=never这种参数,在旧内核上可能有效,但在新内核上可能已经被换成了别的控制方式。配置修改之前,建议先通过man手册或者官方文档确认参数的语义和取值。

4.4 重启与验证:新内核有没有生效,看这几个地方

配置完成之后,就到了最紧张的重启环节。如果不方便立即重启,可以先执行一次内核模块依赖检查和initramfs重建,确保万无一失:

dracut --force

这个命令会重新生成当前默认内核的initramfs文件。正常情况下,安装内核时已经自动生成过了,但如果你在安装之后手动修改了/etc/fstab、添加了新的磁盘或者修改了某些硬件配置,手动强制重建一次会更稳妥。

确认无误后重启:

reboot

重启过程如果一切正常,系统会进入新内核。登录后第一时间执行:

uname -r

确认输出的是新内核版本号。然后再查看系统启动是否正常:

systemctl is-system-running

这个命令会显示当前系统状态。如果输出是runningdegraded,都算正常——degraded表示有部分服务异常,但不影响核心功能。如果输出failed,就需要进一步排查具体是哪个服务挂了。

另外还要确认关键服务是否正常运行,特别是网络服务和SSH服务:

systemctl status sshd systemctl status NetworkManager

还有存储服务,比如systemctl status multi-user.target可以看整体运行级别。

这些验证动作做完之后,新内核就算正式跑起来了。但别高兴太早,生产环境的内核升级还有一个重要环节——回滚方案。下一节详细说。

5. 常见问题与回滚方案:翻车也不怕,关键是有后手

5.1 启动失败怎么办:两种快速回滚到旧内核的方法

内核升级之后最怕的情况就是重启起不来。如果新内核存在严重问题,比如文件系统模块加载失败、根分区无法挂载、或者显卡/网卡驱动导致系统卡死,这时候需要快速回到旧内核。

方法一:在GRUB菜单中选择旧内核启动。

这是最直接的方法。重启时,在GRUB菜单界面(通常是黑底白字的列表),用上下方向键选择带有旧版本号的内核条目,按回车启动。如果你的机器GRUB菜单默认隐藏了,在开机时按Esc或者Shift键可以调出菜单(具体按键取决于你的引导方式,UEFI和BIOS略有差异)。

这个方法的优点是不需要任何命令操作,缺点是需要手速和现场操作。如果服务器在机房而且没有远程控制台,这个方法就派不上用场了。

方法二:设置旧内核为默认启动项后重启。

如果你的系统能进入命令行,或者能通过SSH连接上(非常幸运的情况),可以直接用grubby把默认内核切回旧版本,然后重启:

grubby --set-default=/boot/vmlinuz-旧版本号.an8.x86_64 reboot

注意旧版本号要替换成你之前记录的旧内核版本号。如果你没有记录,可以通过以下命令查看GRUB菜单里所有可用的内核:

grubby --info=ALL | grep -E '^kernel|^index'

选择旧版本的内核路径,执行--set-default即可。

5.2 升级后网卡驱动异常:一查、二看、三回滚

新内核起来之后,网卡驱动问题是出现频率最高的故障。典型表现是ping不通、SSH断开、ip addr看不到网卡。

遇到这种情况,建议按以下顺序排查:

第一步,查看网卡是否被识别:

lspci | grep -i ethernet

如果能看到网卡设备,说明硬件层面没有问题。接下来查看驱动模块是否加载:

lsmod | grep -E 'ixgbe|i40e|e1000|igb|mlx'

如果输出为空,说明驱动模块没有加载。尝试手动加载:

modprobe ixgbe

如果提示Module ixgbe not found,说明这个内核版本里根本没有对应的驱动模块。这时候有两条路:一是换回旧内核,二是找网卡厂商提供适配新内核的驱动包手动安装。

如果模块能加载,但网卡依然不通,检查一下网络管理服务状态:

systemctl status NetworkManager

有时候只是NetworkManager服务没起来,导致网卡没有自动获取IP或者没有启用连接配置:

systemctl restart NetworkManager

我遇到过一种情况:新内核下网卡驱动自动切换到了iavf等新驱动,但系统的网络连接配置文件中写的是旧驱动接口名(比如eth0),而新驱动下接口名变成了ens3f0,导致连接配置对不上。这种情况下需要修改/etc/sysconfig/network-scripts/ifcfg-*或者NetworkManager的连接配置,把接口名改成实际名称。

5.3 第三方内核模块编译失败:DKMS的正确使用方法

升级内核之后,如果你系统里安装了需要通过DKMS编译的第三方模块(比如某些厂商的驱动、ZFS文件系统、或者特定虚拟化模块),经常会遇到编译失败的问题。

检查系统中是否有DKMS模块:

dkms status

如果有模块状态显示installed但版本对应的是旧内核,需要在新内核下重新构建:

dkms autoinstall -k 6.1.60-1.an8.x86_64

如果没有安装kernel-devel,DKMS编译会直接失败,提示缺少/lib/modules/$(uname -r)/build目录。解决方法是先安装内核开发包:

dnf install kernel-devel kernel-headers

然后再执行dkms autoinstall

这里有个小坑:有些第三方模块只适配特定内核版本,新内核下即使强行编译也过不了。比如某些老的GPU驱动,对内核API变更非常敏感,只能等待厂商更新适配。这类场景没有捷径,建议先保留旧内核作为生产使用,新内核在小范围验证通过后再全面切换。

5.4 常见问题速查表

问题现象可能原因排查命令/方法解决思路
重启后系统版本没变默认启动内核未切换grubby --default-kernel重新执行--set-default指定新内核
网卡无法识别新内核缺少对应驱动模块lspcilsmod手动编译安装厂商驱动,或暂时回滚
启动过程卡在挂载根文件系统initramfs缺少对应文件系统驱动在initramfs阶段检查dracut --force重建initramfs
安装了第三方模块但内核加载失败DKMS模块未适配新内核dkms status执行dkms autoinstall重新编译
新内核下性能反而变差CPU调频策略或NUMA设置变化cpupower frequency-info检查启动参数和tuned配置
内核安装报依赖冲突软件源之间有包冲突dnf deplist检查是否有第三方源混用,锁定源优先级

5.5 删除旧内核:什么时候该清、什么时候该留

升级稳定运行一段时间之后,很多人会想着把旧内核包卸载掉,释放一点/boot空间。这个操作可以做,但一定要讲时机。

我建议至少满足这两个条件再清理:新内核稳定运行超过两周、期间没有出现需要回滚的问题。如果新内核验证期间遇到反复,先留着旧内核保命。

查看系统中所有已安装的内核包版本:

rpm -qa | grep '^kernel'

卸载旧内核包时,使用dnf remove,同时把对应的模块包一起删掉(但不要删除当前正在运行的内核包)。比如你想删除旧的5.10内核:

dnf remove kernel-5.10.134-16.1.an8.x86_64 kernel-core-5.10.134-16.1.an8.x86_64 kernel-modules-5.10.134-16.1.an8.x86_64

执行之后grubby会自动更新GRUB菜单,删除对应条目。确认一下:

grubby --info=ALL

如果还有残留的旧内核启动条目,手动执行:

grub2-mkconfig -o /boot/grub2/grub.cfg

重新生成引导配置即可。

6. 需要长期关注的几个点

内核升级完成、系统稳定运行只是第一步。长期运维中还有几个事项值得持续关注。

第一是安全补丁的定期更新。内核是安全漏洞的重灾区,龙蜥官方会持续为维护版本发布安全补丁。建议通过dnf update --security定期检查安全更新,或者使用龙蜥的CVE监控公告页面主动关注漏洞信息。

第二是内核参数调优的“温习”。新内核版本对默认参数设置有调整,比如网络缓冲大小、文件系统缓存策略等。升级到新内核之后,建议重新审查一下/etc/sysctl.conf里的参数设置,看看有没有基于旧内核版本调整过的参数需要同步更新。我在实践中就遇到过:旧内核下设置的net.core.rmem_max在新内核下默认值已经变大,配置文件里的显式设置反而限制了性能。

第三是定期关注龙蜥社区发布的发版说明。内核升级过程中遇到的问题,很多都能在发版说明里找到已知问题和对应的规避方法。社区活跃度高的项目,遇到问题时也更容易搜到相关资料。

还有一个运维习惯上的建议:每次内核变更之后,把关键信息记录下来,包括升级前后的内核版本、变更的内核参数、升级过程中遇到的问题和解决办法。这样下次再升级时,就有了自己的一手参考资料。

我个人在实际操作中的体会是:内核升级这件事,最忌讳的就是“快”。把查询做细、把方案选对、把回滚准备好,剩下的安装和配置只需要按部就班执行即可。这套流程我走过很多遍,也替生产环境踩过不少坑,希望这篇指南能让你少走一些弯路,尤其是把“查询”和“配置”这两个核心环节吃透。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 23:53:28

MonkeyCode 连上 TaoToken 后,GitHub Copilot 的按人订阅可以退了

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 23:52:34

RabbitMQ与Spring-AMQP消息可靠性保障实战

1. 项目概述RabbitMQ作为企业级消息中间件的标杆产品,其可靠性设计直接影响着分布式系统的稳定性。在实际生产环境中,消息丢失、重复消费、服务宕机等问题时刻威胁着系统运行。本文将深入剖析RabbitMQ与Spring-AMQP整合时保障消息可靠性的完整技术方案&a…

作者头像 李华
网站建设 2026/9/16 23:51:22

CMSIS-4静态工程:Cortex-M裸机开发的确定性基石

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 23:50:40

机器人路径规划优化:从A*到DWA的ROS2 Nav2实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 23:48:31

储能BMS充电电流限值的动态计算逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 23:47:33

液晶屏选型与定制全攻略:从需求拆解到样品验证

作为常年折腾嵌入式项目的人,我几乎每次做带显示功能的产品,都要在液晶屏选型这个环节上卡上几天。特别是接触到驰宇微这类国产主流模组厂商之后,我踩过的坑、试错总结出来的经验,其实完全可以沉淀成一套可以复用的选型与定制方法…

作者头像 李华