cix p1芯片适配OpenHarmony社区内核6.6.89并升级6.6.101思路分享
本文将分享如何将cix p1芯片适配oh社区内核6.6.89并升级6.6.101。本文可为其他芯片适配OpenHarmony社区6.6内核做参考。
本文将分享如何将cix p1芯片适配oh社区内核6.6.89并升级6.6.101。本文可为其他芯片适配OpenHarmony社区6.6内核做参考。
文章写作环境
- 瑞莎星睿O6开发板
- OpenHarmony 5.0.3
- 笔者开源地址:https://gitee.com/cix_oh/cix_p1_oh
往期文档回顾:
1.此芯p1开发板使用OpenHarmony时llama.cpp不同优化速度对比(GPU vs CPU)
2.以此芯p1芯片为例研究OpenHarmony上GPU (Vulkan) 加速在深度学习推理中的价值
3.开源!移植此芯p1芯片驱动到OpenHarmony社区内核上
4.cix p1芯片OpenHarmony社区内核版本从6.6.89升级到6.6.101
OpenHarmony 内核6.6移植基础知识
请参考社区A佬的课程https://laval.csdn.net/edu/77f1958533261c5acb5e4acd33327ae3


思路
1.学习A佬的课程后可以知道,芯片oh内核移植的方式有三种。笔者维护cix p1的就是方式一,将cix p1芯片soc架构驱动和板级驱动移植到OpenHarmony社区6.6内核。
这样可以获得收益就是不需要再进行OpenHarmony内核增强和基础特性、cve补丁的移植。只需要关心cix p1芯片相关的soc和板级驱动,工作量相对较小。 而且可以随着oh社区内核进行维护,升级内核小版本。社区rk3568就是这样的维护策略(读者可以查看oh源码kernel/linux/patches/linux-6.6/rk3568_patch/kernel.patch,这里就是3568芯片和板级的驱动代码)
2.首先需要获得cix p1内核6.6.89,然后对比 linux原生6.6.89内核。得到cix的芯片补丁。打入OpenHarmony社区6.6.89内核中,然后解决补丁冲突、补充缺少的oh驱动和头文件。具体流程如下图

具体步骤
1.获取cix linux-6.6.89芯片原厂内核代码,以下仓库二选一
# 从笔者自己fork的仓库获取
git clone -b ee8f6/48bff/cix_p1_K6.6_2025Q3_dev_patch https://gitcode.com/OpenHarmony_lbkg/cix_p1_linux.git
# 从cix开源的官方仓库获取
git clone -b ee8f6/48bff/cix_p1_K6.6_2025Q3_dev_patch https://gitlab.com/cix-linux/cix_opensource/linux.git
注意:cix 6.6.89里面有部分oh内核特性,不知道为什么有合入部分oh的代码
2.获取cix p1适配芯片前使用的纯净linux-6.6.89 代码
# 从笔者自己fork的仓库获取
git clone https://gitcode.com/OpenHarmony_lbkg/cix_p1_linux.git
cd cix_p1_linux
git checkout 71e4ec9b2abccce5adecb3b354d0d5003f6f88f2
# 从cix开源的官方仓库获取
git clone https://gitlab.com/cix-linux/cix_opensource/linux.git
cd linux
git checkout 71e4ec9b2abccce5adecb3b354d0d5003f6f88f2

3.获取openharmony linux-6.6.89 代码
git clone https://gitcode.com/openharmony/kernel_linux_6.6.git
cd kernel_linux_6.6
git checkout da39fb8045a66558cd49cb8a989e009630c52de3
4.开始制作补丁
在下面的文档中约定。
- cix适配了linux-6.6.89 内核代码 命名为
cix_p1_linux- 获取cix使用的纯净的 linux-6.6.89 代码 命名为
linux_6.6.89- openharmony linux-6.6.89 代码 命名为
oh_linux_6.6.89
5.删除cix_p1_linux、linux_6.6.89、oh_linux_6.6.89所有的git相关文件
# 删除git相关文件
find ./ -name ".git*" -exec rm -rf {} \;
- 首先
cix_p1_linux和linux_6.6.89对比,获得cixp1芯片相关的补丁cix_1.patch
diff -Naur linux_6.6.89 cix_p1_linux > cix_1.patch
7.然后将 cix_1.patch发送到window上的notepad++上面。把补丁中的路径改为a和b ,得到cix_2.patch

8.然后将cix_2.patch打入oh_linux_6.6.89 ,检查是否有冲突,发现以下目录有冲突
drivers/staging/hievent
drivers/staging/hisysevent
drivers/staging/hungtask
drivers/staging/Kconfig
include/dfx
kernel/hung_task.c
# 不知道为什么cix内核里面有oh的一些特性代码,直接删除drivers/staging、include/dfx、kernel/hung_task.c重新生成补丁
kernel/sched/core.c
kernel/sched/Makefile
kernel/sched/rt.c
kernel/sched/sched.h
# cix_p1_linux下面的kernel/sched里面添加了cix加的一些东西,这个部分直接不管
scripts/dtc/include-prefixes
# 这里是一些符号连接,直接不管
不知道为什么cix内核里面有oh的一些特性代码,直接删除drivers/staging、include/dfx、kernel/hung_task.c重新生成补丁cix_3.patch
scripts/dtc/include-prefixes下面都是一些符号链接,所以无法对比。所以需要将oh_linux_6.6.89打上cix_3.patch, 然后oh_linux_6.6.89的scripts目录和cix_p1_linux的scripts目录生成scripts目录的补丁cix_scripts.patch
9.然后解决一下打补丁的冲突,最后得到cix p1 芯片补丁cix.patch和cix_scripts.patch
10.下一步就是修复cix p1 芯片补丁打入oh社区6.6.89内核的编译问题了
- 启动oh必须使用ashmem驱动,这部分驱动在社区源码kernel/linux/patches/linux-6.6/rk3568_patch/kernel.patch中
- 还要修复hungtask_base驱动接口报错,这部分也在kernel/linux/patches/linux-6.6/rk3568_patch/kernel.patch中
- 还要补充缺少的xpm、zswapd等头文件,这部分也在kernel/linux/patches/linux-6.6/rk3568_patch/kernel.patch中

11.最后编译cix p1芯片 oh社区公版内核编译通过,烧录验证oh。
12.cix p1芯片OpenHarmony社区内核版本从6.6.89升级到6.6.101,请参考 https://ost.51cto.com/posts/38003
更多推荐

所有评论(0)