【鸿蒙南向开发】如何一键优雅的更新内核patch

238 篇文章 2 订阅
237 篇文章 0 订阅

一、进入内核,修改内核代码

cd kernel/linux/linux-5.10
vim drivers/Kconfig
# 在倒数第二行加入:source "drivers/tracepoint/Kconfig"

source "drivers/most/Kconfig"

source "drivers/accesstokenid/Kconfig"

source "drivers/tracepoint/Kconfig"
endmenu

二、打 patch

patch -p1 < ../patches/linux-5.10/rk3568_patch/kernel.patch

如果想撤回 patch 方法

patch -Rp1 < ../patches/linux-5.10/rk3568_patch/kernel.patch

三、解决冲突(如果存在)

$ git status | grep rej
Refresh index: 100% (70816/70816), done.
        drivers/Kconfig.rej

上面表示 drivers/Kconfig 文件的打 patch 时候有冲突被拒绝了,需要手动进行修改

  • 打开 drivers/Kconfig.rej 文件

    --- drivers/Kconfig
    +++ drivers/Kconfig
    @@ -239,4 +239,8 @@ source "drivers/counter/Kconfig"
     source "drivers/most/Kconfig"
    
     source "drivers/accesstokenid/Kconfig"
    +
    +source "drivers/rkflash/Kconfig"
    +
    +source "drivers/rk_nand/Kconfig"
     endmenu
    
    

    这个文件的意思是需要在 source "drivers/accesstokenid/Kconfig"的下面添加四行内容

  • 打开 drivers/Kconfig 文件,手动解决 patch 添加

    # 修改前
    source "drivers/most/Kconfig"
    
    source "drivers/accesstokenid/Kconfig"
    
    source "drivers/tracepoint/Kconfig"
    endmenu
    
    # 修改后
    source "drivers/most/Kconfig"
    
    source "drivers/accesstokenid/Kconfig"
    
    source "drivers/tracepoint/Kconfig"
    
    source "drivers/rkflash/Kconfig"
    
    source "drivers/rk_nand/Kconfig"
    endmenu
    
    
  • 删除冲突生成的临时 orig 和 rej 文件

    rm -rf drivers/Kconfig.orig drivers/Kconfig.rej
    
    
  • 至此冲突解决完

四、生成新的 patch

git 生成 patch 和打 patch

git add .
git commit . -m"add tracepoint"
# 如果只有一次提交使用format-patch方便
git format-patch HEAD^
# 如果想打commit1和commit2之间的patch
# 其中commit1是起始的commit; commit2是结束的commit
git diff commit1 commit2 > demo.patch

此时会生成一个 patch 文件 0001-add-tracepoint.patch

五、原 patch 修改

我们比对0001-add-tracepoint.patch 和 ../patches/linux-5.10/rk3568_patch/kernel.patch文件发现差异特别大,那是因为每次生成的patch时候对应的文件顺序是不一样的,所以差异比较大,我们要做的是将我们修改的文件patch内容替换即可。

# 比较文件的方法
diff 0001-add-tracepoint.patch ../patches/linux-5.10/rk3568_patch/kernel.patch

打开 0001-add-tracepoint.patch 文件搜索 drivers/Kconfig,将如下内容替换掉…/patches/linux-5.10/rk3568_patch/kernel.patch 中的相同位置内容,至此,patch 修改完成

# 0001-add-tracepoint.patch中的内容
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 826b2b19d..5720a24fb 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -239,4 +239,10 @@ source "drivers/counter/Kconfig"
 source "drivers/most/Kconfig"

 source "drivers/accesstokenid/Kconfig"
+
+source "drivers/tracepoint/Kconfig"
+
+source "drivers/rkflash/Kconfig"
+
+source "drivers/rk_nand/Kconfig"
 endmenu

# 原../patches/linux-5.10/rk3568_patch/kernel.patch中的内容
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 826b2b19d..d7f2fc98b 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -239,4 +239,8 @@ source "drivers/counter/Kconfig"
 source "drivers/most/Kconfig"

 source "drivers/accesstokenid/Kconfig"
+
+source "drivers/rkflash/Kconfig"
+
+source "drivers/rk_nand/Kconfig"
 endmenu

# 替换后../patches/linux-5.10/rk3568_patch/kernel.patch中的内容
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 826b2b19d..5720a24fb 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -239,4 +239,10 @@ source "drivers/counter/Kconfig"
 source "drivers/most/Kconfig"

 source "drivers/accesstokenid/Kconfig"
+
+source "drivers/tracepoint/Kconfig"
+
+source "drivers/rkflash/Kconfig"
+
+source "drivers/rk_nand/Kconfig"
 endmenu

六、内核版本回退

rm 0001-add-tracepoint.patch
git reset --hard HEAD^

七、至此 kernel.patch 修改完成

写在最后

●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
●更多鸿蒙最新技术知识点,请移步前往小编:https://gitee.com/

在这里插入图片描述

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值