本文简要说明如何在3568平台上修改内核代码,并制作补丁,或者提交提交到社区。整理的思路为:

    1 out/kernel/src_tmp/linux-5.10导出仅修改内核补丁

    2 在kernel/linux/linux-5.10目录合并新修改的补丁和kernel.patch为新的补丁。

    3 回合到kernel.patch中。

        

1 创建补丁

      在验证内核自己添加补丁建议参照之前的 快速编译内核验证 进行,只不过在第一次编译通过之后直接在out/kernel/src_tmp/linux-5.10目录创建git并提交,以方便创建自己修改内核代码的补丁。

    

cd out/kernel/src_tmp/linux-5.10/
git init 
git add .
#临时目录初始化提交
git commit -am 'init commit'

     在修改完代码之后验证通过之后将自己修改提交。然后使用git format-patch -1将修改导出为补丁。保存这个补丁文件,比如补丁名0001-add-demo-driver.patch。

2 创建合并补丁

​     需要在kernel/linux/linux-5.10目录将原始的kernel.patch补丁和修改代码补丁0001-add-demo-driver.patch合入到一个补丁文件。

    cd kernel/linux/linux-5.10
    #使用原始补丁
	patch -p1 < ../../linux/patches/linux-5.10/rk3568_patch/kernel.patch
	#删除补丁残留文件
	rm $(find -iname *.orig)
	#使用自己的修改代码补丁,如果有冲突可以手动合入冲突
	patch -p1 < ../../../out/kernel/src_tmp/linux-5.10/0001-add-demo-driver.patch
	#重新制作补丁
	git add .
	git commit  -am 'update patchs'
	#创建新的补丁
	git format-patch -1
	#本地0001-update-patchs.patch这个补丁已经包含了修改的内容
	#还原修改
	git reset --hard HEAD~1

​这样得到的0001-update-patchs.patch就是最新补丁,虽然可以用这个补丁直接覆盖kernel.patch,但是由于是工具产生的补丁,可能会出现大量没有意义的修改。最好手动合入到原始的kernel.patch。

 

​ 3 回合到kernel.patch

      由于内核代码大多以补丁方式修改,需要把自己的补丁合并到kernel.patch上。而master和release的补丁使用了两种补丁方式,针对不同的版本需要参照不同的补丁合并方式。

   master diff

    master分支使用的只有diff的patch文件。

目前我们已经有kernel.patch  0001-add-demo-driver.patch 0001-update-patchs.patch 这三个文件,要做的就是参照0001-add-demo-driver.patch的修改文件列表把0001-update-patchs.patch补丁文件中对应的diff部分,复制到kernel.patch中,完整补丁文件的修改。如果是修改文件则需要直接替换kernel.patch文件中的这个文件对应的diff部分。

 drivers/Kconfig            |  2 +
 drivers/Makefile           |  1 +
 drivers/demo/Kconfig       |  5 ++
 drivers/demo/Makefile      |  1 +
 drivers/demo/demo_driver.c | 96 ++++++++++++++++++++++++++++++++++++++

注意不要从0001-add-demo-driver.patch补丁复制,而只是参照这个git补丁的文件列表。

修改的之后补丁文件就包含了最新的修改内容。

Release git补丁

对于git管理的分支由于多出了git头信息,这部分信息也需要修改才能使用补丁。首先参照上一节的操作将difff导出。然后需要修改kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch 补丁的git头部信息。

头部修改如下,头部修改主要是从新0001-update-patchs.patch补丁中复制出来,修改内容如下,注意不包含diff部分。

 

主要是文件修改的信息,包括文件名,修改的行号信息,以及更新补丁的代码行号等信息,以便维护补丁完整性。

编辑器选择方面由于补丁文件较大,推荐使用vim修改,某些工具会更改补丁的换行符导致补丁出问题,请务必注意此类问题。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐