openharmony内核开发以及补丁制作
本文简要说明如何在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修改,某些工具会更改补丁的换行符导致补丁出问题,请务必注意此类问题。
更多推荐
所有评论(0)