如何将已手动升级至5.10.162内核的OpenWrt正确升级到5.10.165版本
嗨,我懂你碰到的麻烦了——你手动给OpenWrt打了内核升级到5.10.162的补丁,结果官方master分支直接从5.10.161跳到了5.10.165,导致本地的修改和官方更新冲突,没法顺利升级对吧?别慌,跟着下面的步骤一步步来就能解决:
第一步:撤销本地的5.10.162补丁修改
你之前打的补丁改动了两个文件:include/kernel-5.10和target/linux/ath79/patches-5.10/910-unaligned_access_hacks.patch。如果你的OpenWrt源码是用Git管理的,直接运行这条命令就能把这两个文件恢复到官方5.10.161的状态:git checkout HEAD -- include/kernel-5.10 target/linux/ath79/patches-5.10/910-unaligned_access_hacks.patch要是你没使用Git,就手动恢复这两个文件:
- 编辑
include/kernel-5.10,把内容改回补丁前的样子:LINUX_VERSION-5.10 = .161 LINUX_KERNEL_HASH-5.10.161 = 7aaaf6d0bcd8a2cfa14ad75f02ca62bb2de08aad3bee3eff198de49ea5254079 - 编辑
910-unaligned_access_hacks.patch,把其中的行号部分改回原来的@@ -1470,8 +1470,8 @@(也就是补丁里带减号的那一行内容)。
- 编辑
第二步:拉取官方最新代码
现在本地的冲突文件已经恢复好了,直接拉取master分支的最新更新:git pull origin master这一步应该不会再出现冲突了,因为你已经把本地手动修改的部分撤掉,官方的5.10.165更新能顺利合并进来。
第三步:确认内核版本已更新至5.10.165
拉完代码后,打开include/kernel-5.10文件检查一下,你会看到官方已经把版本号和哈希值换成了5.10.165对应的内容,而且官方也已经处理好了所有需要重新适配的补丁(包括你之前修改的那个ath79补丁),不用你再手动调整。第四步:重新构建OpenWrt
最后就是常规的编译流程了,先确认你的配置没问题:make menuconfig然后开始编译(把命令里的
N换成你CPU的核心数,能加快编译速度):make -jN
简单说下冲突的原因:官方直接跳过了5.10.162到5.10.164的版本,直接升级到165,而你本地手动修改的162版本相关文件,和官方165的更新内容重叠了,所以才会出现冲突。只要先撤销本地的手动修改,再拉取官方更新,就能完美解决问题。
备注:内容来源于stack exchange,提问作者James78

