我们在开发openharmony的时候经常修改内核代码,而在openharmony内内核的编译目录在out临时目录下,所以我们应该遵循openharmony的规范提交内核,如下是具体情况
根据openharmony的仓库目录,我们可以知道,如果我们修改一个设备的配置,通常其目录在device/board/xxx下,例如hihope的设备,那么配置仓库为device_board_hihope
仓库下面的build_kernel.sh是编译内核的脚本,我们需要重点关注
根据分析build_kernel.sh脚本,我们可以知道如下:
对于openharmony内核而言,原始代码地址在
KERNEL_SOURCE=${ROOT_DIR}/kernel/linux/linux-5.10
对于厂商的补丁而言,其patch位置在
KERNEL_PATCH=${ROOT_DIR}/kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch
这是openharmony团队适配rk3568平台的补丁
对于内核,配置是多个config组合的,如下:
KERNEL_CONFIG_FILE=${ROOT_DIR}/device/board/hihope/rk3568/kernel/kernel_config/linux-5.10/rk3568_standard_defconfig
这里可以知道,openharmony的内核配置是rockchip的配置defconfig
根据二中的分析,我们可以知道,2.1不建议修改,因为是华为的内核源码,2.2也不建议修改,因为是openharmony适配rk3568的通用修改,2.3 是默认配置,不建议修改。我们如果需要修改,需要另加patch,如下方式
# rk628 驱动 KERNEL_RK628_PATCH=${ROOT_DIR}/device/board/hihope/rk3568/kernel/kernel_patch/linux-5.10/allgo_patch/rk628.patch # allgo 设备树 KERNEL_DTS_MBRC3568A=${ROOT_DIR}/device/board/hihope/rk3568/kernel/kernel_patch/linux-5.10/allgo_patch/allgo-mbrc3568a-dts.patch # make-ohos patch BUILD_MBRC3568_PATCH=${ROOT_DIR}/device/board/hihope/rk3568/kernel/kernel_patch/linux-5.10/allgo_patch/build-mbrc3568a.patch # bugfix patch KERNEL_BUGFIX_ON_MBRC3568_PATH=${ROOT_DIR}/device/board/hihope/rk3568/kernel/kernel_patch/linux-5.10/allgo_patch/mbrc3568a-bugfix.patch
根据这些定义,在后面需要合入补丁
# patching rk628 patch -p1 < ${KERNEL_RK628_PATCH} # patching dts patch -p1 < ${KERNEL_DTS_MBRC3568A} # patching build script patch -p1 < ${BUILD_MBRC3568_PATCH} # patching bugfix patch patch -p1 < ${KERNEL_BUGFIX_ON_MBRC3568_PATH}
这里KERNEL_RK628_PATCH是适配rk628驱动的单独补丁,KERNEL_DTS_MBRC3568A是适配众达机器的设备树,BUILD_MBRC3568_PATCH是合入openharmony编译的改动,KERNEL_BUGFIX_ON_MBRC3568_PATH是根据上述改动后,针对bugfix的改动补丁。
所以后续如果我们针对众达3568机器的补丁修复,可以持续更新补丁文件mbrc3568a-bugfix.patch即可。
根据上面提到的,我们需要更新补丁,这里提供补丁的更新方法如下:
假设我们基于声卡做了定制修改,我们需要进入声卡的驱动目录做如下工作:
cd sound/soc/codecs git init . git add . git commit -m 'initail code'
此时我们初始化了一个空的仓库
如果我们修改代码,直接vim修改即可,如下
vim es8323.c
修改后我们可以看到改动情况如下:
git status . 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git restore <文件>..." 丢弃工作区的改动) 修改: es8323.c
根据上面的修改代码,可以直接用git diff生成,如下:
git diff > support-sound-card.patch
此时我们将产生一个基于es8323改造的补丁,但是需要留意的是如下:
patch -p1 < ${KERNEL_BUGFIX_ON_MBRC3568_PATH}
这里合入补丁的方式是p1,所以我们需要整改一下这个patch,如下
%s/a\//a\/sound\/soc\/codecs\//g %s/b\//b\/sound\/soc\/codecs\//g
此时pathc的变化如下,先显示未修改之前的
diff --git a/es8323.c b/es8323.c index 6365108..5241703 100755 --- a/es8323.c +++ b/es8323.c
再通过替换符合p1路径的,也就是修改之后的,如下:
diff --git a/sound/soc/codecs/es8323.c b/sound/soc/codecs/es8323.c index 6365108..5241703 100755 --- a/sound/soc/codecs/es8323.c +++ b/sound/soc/codecs/es8323.c
此时这个补丁基本可用了。我们需要将其合入mbrc3568a-bugfix.patch。
合入补丁的方式也很简单,通过追加的方式即可,如下:
cat support-sound-card.patch >> device/board/hihope/rk3568/kernel/kernel_patch/linux-5.10/allgo_patch/mbrc3568a-bugfix.patch
此时我们在仓库device_board_hihope上做提交即可。
git add rk3568/kernel/kernel_patch/linux-5.10/allgo_patch/mbrc3568a-bugfix.patch git commit git push