2026年6月20日星期六

内核剪裁翻车了,记录下解决方法

 这是一个非常典型的内核裁剪“翻车”现场。

出现这个情况的原因是:在你之前执行 menuconfig 尝试“瘦身”(取消其他平台)的时候,不小心把 Zynq 平台的支持也给取消了,或者取消了它的父级依赖(比如 ARM multi-platform)。

当你执行 savedefconfig 时,系统发现“哦,这个用户显式地把默认开启的 Zynq 给关掉了”,所以它把这个“关闭动作”悄悄记录了下来。这就导致你现在不管怎么加载,CONFIG_ARCH_ZYNQ 都是 not set

别担心,你的网络和代理配置心血并没有白费,我们可以用最直接、最暴力的方式把它强行救回来,不需要重新去迷宫一样的菜单里找。

请严格按照以下三步操作:

第一步:直接修改 .config 文件(暴力修复)

打开你当前目录下的 .config 文件(用 nanovim 或者你喜欢的文本编辑器都可以):

Bash
nano .config

在文件中搜索(Ctrl+W 在 nano 中搜索) CONFIG_ARCH_ZYNQ。 你会看到这样一行: # CONFIG_ARCH_ZYNQ is not set

直接把它修改为:

Ini, TOML
CONFIG_ARCH_ZYNQ=y

保存并退出(在 nano 中按 Ctrl+O 回车保存,Ctrl+X 退出)。

第二步:让内核自动补全 Zynq 的底层驱动

这是 Linux 内核编译系统非常强大的一个功能。你刚才只开启了总开关(CONFIG_ARCH_ZYNQ=y),但 Zynq 相关的网卡(MACB)、串口、时钟等驱动还是缺失的。

执行下面这条“自动修复”命令:

Bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- olddefconfig

(olddefconfig 的作用是:读取当前的 .config,并根据各种依赖关系,自动把必需的默认驱动全部选上 y,并且不会弹窗烦你。)

执行完后,你可以再次验证:

Bash
cat .config | grep ZYNQ

这次你应该能看到一大排激动人心的输出,比如 CONFIG_ARCH_ZYNQ=yCONFIG_SPI_ZYNQ_QSPI=y 等等,说明底层硬件支持已经完全回来了!同时,你之前配置好的代理、TUN、NTP 等软件网络层选项也都完好无损地保留着。

第三步:覆盖保存那个错误的备份文件

现在你的 .config 已经是完美的了(既有你手动配的高级网络功能,又有完整的 Zynq 硬件底层)。

趁热打铁,重新生成一次正确的精简配置,把 arch/arm/configs/ 里面那个错误的覆盖掉:

Bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- savedefconfig
cp defconfig arch/arm/configs/mys7z020_router_defconfig

现在,你可以放心地直接执行编译了:

Bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)

经验总结:在 menuconfig 里做大面积“瘦身”时,很容易误伤友军。以后如果遇到某个重要选项神秘消失,直接去 .config 里用文本编辑器把它改成 =y,然后跑一次 make olddefconfig,是排错的最快捷径。

没有评论:

发表评论

内核剪裁翻车了,记录下解决方法

 这是一个非常典型的内核裁剪“翻车”现场。 出现这个情况的原因是:在你之前执行 menuconfig 尝试“瘦身”(取消其他平台)的时候, 不小心把 Zynq 平台的支持也给取消了,或者取消了它的父级依赖 (比如 ARM multi-platform )。 当你执行 saved...