编辑
2025-01-22
工作知识
0
请注意,本文编写于 135 天前,最后修改于 135 天前,其中某些信息可能已经过时。

目录

一、定制仓库
二、openharmony的内核编译配置
2.1 kernel source
2.2 kernel patch
2.3 defconfig
三、如何添加配置
四、更新方法
4.1 未修改前的初始仓库
4.2 修改代码
4.3 生成补丁
4.4 合入mbrc3568a-bugfix.patch

我们在开发openharmony的时候经常修改内核代码,而在openharmony内内核的编译目录在out临时目录下,所以我们应该遵循openharmony的规范提交内核,如下是具体情况

一、定制仓库

根据openharmony的仓库目录,我们可以知道,如果我们修改一个设备的配置,通常其目录在device/board/xxx下,例如hihope的设备,那么配置仓库为device_board_hihope

仓库下面的build_kernel.sh是编译内核的脚本,我们需要重点关注

二、openharmony的内核编译配置

根据分析build_kernel.sh脚本,我们可以知道如下:

2.1 kernel source

对于openharmony内核而言,原始代码地址在

KERNEL_SOURCE=${ROOT_DIR}/kernel/linux/linux-5.10

2.2 kernel patch

对于厂商的补丁而言,其patch位置在

KERNEL_PATCH=${ROOT_DIR}/kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch

这是openharmony团队适配rk3568平台的补丁

2.3 defconfig

对于内核,配置是多个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即可。

四、更新方法

根据上面提到的,我们需要更新补丁,这里提供补丁的更新方法如下:

4.1 未修改前的初始仓库

假设我们基于声卡做了定制修改,我们需要进入声卡的驱动目录做如下工作:

cd sound/soc/codecs git init . git add . git commit -m 'initail code'

此时我们初始化了一个空的仓库

4.2 修改代码

如果我们修改代码,直接vim修改即可,如下

vim es8323.c

修改后我们可以看到改动情况如下:

git status . 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git restore <文件>..." 丢弃工作区的改动) 修改: es8323.c

4.3 生成补丁

根据上面的修改代码,可以直接用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。

4.4 合入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