内核是操作系统的核心,学习掌握OpenHarmony内核对于开发人员至关重要。笔者整理学习OpenHarmony标准系统内核笔记如下:
OpenHarmony标准系统内核
- OpenHarmony标准系统类设备(参考内存≥128MiB),OpenHarmony选择Linux内核作为标准系统内核。
- OpenHarmony标准系统从
Linux内核LTS版本 中选择合适的版本作为内核的基础版本,目前已完成对Linux-4.19及Linux-5.10的适配及支持。
Linux内核版本
- Linux内核版本分为稳定版本以及长期支持LTS(long term support)版本。
- 稳定版本大约每三个月发布一个新版本,包含最新硬件支持、性能改进以及bug修复等。其缺点是整体维护生命周期较短,产品软件不能得到长期稳定的支持。
- LTS为长期支持版本,“长期支持”体现在对该版本内核的长期维护(对bug和安全方面的修复),一般维护周期达到6年之久。相较于维护周期从6个月到2年不等非LTS内核版本,对一款商用产品来说并不能覆盖其产品完整的生命周期,很有可能会使产品暴露于安全的风险之中。且LTS版本更新不会包含新的特性升级,保证了版本的稳定。
-
OpenHarmony的Linux内核基于开源Linux内核LTS 4.19.y / 5.10.y 分支演进,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。
- Linux社区LTS 4.19.y分支信息请查看kernel官网;
- Linux社区LTS 5.10.y分支信息请查看kernel官网。
- 内核的Patch组成模块,在编译构建流程中,针对具体芯片平台,合入对应的架构驱动代码,进行编译对应的内核镜像。所有补丁来源均遵守GPL-2.0协议。
-
目前OpenHarmony Beta3使用的内核版本为5.10.93,Beta4使用的内核版本为5.10.97
OpenHarmony标准系统内核源码目录
单独编译OpenHarmony标准系统内核(以rk3568为例)
- 笔者编译环境:
wsl2 +Ubuntu18.04 +OpenHarmony Beta3源码
- 首先在out/kernel/src_tmp/linux-5.10目录下打开终端执行如下语句:
export PRODUCT_COMPANY=hihope
export DEVICE_COMPANY=rockchip
export DEVICE_NAME=rk3568
export KBUILD_OUTPUT=…/…/OBJ/linux-5.10/
./make-ohos.sh TB-RK3568X0
单独编译结果
结果是在如下目录下生成resource.img内核镜像和boot_linux.img
- /home/jiajiahao/ohos3.2beta3/sources/out/kernel/OBJ/linux-5.10/resource.img
- home\jiajiahao\ohos3.2beta3\sources\out\kernel\src_tmp\linux-5.10\boot_linux.img
重新编译OpenHarmony标准系统内核
rm -rf out
知识附送
- 编译rk64位:
用DevEco Device Tool工具可以编译64位的镜像
- 安装最新依赖包:
for one_tools in curl -s -k https://gitee.com/landwind/openharmony_oneclick_env_init/raw/master/apt_install.list;do sudo bash -c "apt-get install -y ${one_tools}"; done
安装依赖包: unix_time=`date '+%s'`;for one_tools in `curl -s -k https://gitee.com/landwind/openharmony_oneclick_env_init/raw/master/apt_install.list`;do echo "apt-get install -y ${one_tools}">>/tmp/openharmony_deps_${unix_time}.sh; done;sudo apt-get update;sudo bash -x /tmp/openharmony_deps_${unix_time}.sh
删除out: rm -rf out
重置工作区,删除所有修改(记得备份你的代码): repo forall -c "pwd;git reset --hard; git clean -fd"
更新最新代码: repo sync -c -j8; repo forall -c "pwd;git lfs install;git lfs pull"
执行prebuilts下载脚本: bash build/prebuilts_download.sh
|