From f54b73c969df4c205d2d04d8b15b704b9916d42d Mon Sep 17 00:00:00 2001 From: Zachery Wu Date: Wed, 22 Sep 2021 15:11:59 +0800 Subject: [PATCH] modify kernel README Signed-off-by: Zachery Wu Change-Id: Iba7c146b2c39d1bc131a5159d3f14150db6f0282 --- README_zh.md | 136 +++++++++++++++++++++++++++------------------------ 1 file changed, 71 insertions(+), 65 deletions(-) diff --git a/README_zh.md b/README_zh.md index 15e249d..0ddd6d4 100644 --- a/README_zh.md +++ b/README_zh.md @@ -1,101 +1,107 @@ # Patch组件 - [简介](#section11660541593) -- [特定芯片架构驱动补丁(比如Hi3516DV300)](#section1521510717399) - [目录](#section21571344112) -- [使用](#section1393789267) - - [使用说明](#section1352114469620) - -- [以hi3516dv300开源开发板+ubuntu x86主机开发环境为例](#section19369206113115) - - [场景1:版本级编译原生方式](#section1025111193220) - - [场景2:单独编译修改后的内核](#section17446652173211) - +- [使用说明](#section1393789267) +- [构建说明](#section19369206113115) - [相关仓](#section27639463106) ## 简介 -OpenHarmony的Linux内核基于开源Linux内核LTS 4.19.y分支演进,为满足不同的内核场景诉求,针对性地合入CVE补丁 + OpenHarmony特性 + vendor厂商具体的板级芯片驱动补丁从而构成完整的内核基线。 - -Linux社区LTS 4.19.y分支信息请查看[kernel官网](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/?h=linux-4.19.y)。 - -内核的Patch组成模块,在编译构建流程中,针对具体芯片平台,合入对应的架构驱动代码,进行编译对应的内核镜像。所有补丁来源均遵守GPL-2.0协议。 +OpenHarmony的Linux内核基于开源Linux内核LTS **4.19.y / 5.10.y** 分支演进,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。 -## 特定芯片架构驱动补丁(比如Hi3516DV300) +Linux社区LTS 4.19.y分支信息请查看[kernel官网](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/?h=linux-4.19.y); -vendor厂商提供的特定芯片架构驱动代码: +Linux社区LTS 5.10.y分支信息请查看[kernel官网](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/?h=linux-5.10.y)。 -hi3516dv300_small.patch: 在Hi3516DV300芯片上支持arm架构的内核启动(DTS等)及对应的drm/mmc等驱动的支持。 +内核的Patch组成模块,在编译构建流程中,针对具体芯片平台,合入对应的架构驱动代码,进行编译对应的内核镜像。所有补丁来源均遵守GPL-2.0协议。 ## 目录 ``` -├── kernel.mk # 支持Hi3516DV300等平台内核编译Makefile -├── kernel_module_build.sh # 支持Hi3516DV300等平台内核及KO模块编译脚本 -├── linux-4.19/hi3516dv300_small_patch # 4.19内核上Hi3516dv300开发板的补丁 - ├── hi3516dv300_small.patch # 厂商Hisilicon对应的开源开发板Hi3516dv300相关的芯片patch - ├── hdf.patch # Hi3516dv300开发板上支持HDF特性的patch +kernel/linux +├── build +│ ├── BUILD.gn # 编译框架GN文件 +│ ├── kernel.mk # 内核编译文件 +│ └── ohos.build # 内核编译组件文件 +├── patches +│ ├── linux-4.19 # linux-4.19 相关patch +│ │   └── hi3516dv300_patch +│ │   ├── hi3516dv300.patch # linux-4.19 hi3516dv300 SOC patch +│ │   └── hdf.patch # linux-4.19 hi3516dv300 hdf patch +│ └── linux-5.10 +│    └── hi3516dv300_patch +│    ├── hi3516dv300.patch # linux-5.10 hi3516dv300 SOC patch +│    └── hdf.patch # linux-5.10 hi3516dv300 hdf patch +└── config + ├── linux-4.19 + │   └── arch + │   └── arm + │   └── configs + │   ├── hi3516dv300_small_defconfig # 厂商Hisilicon对应的开源开发板Hi3516dv300小型系统的defconfig + │   ├── hi3516dv300_standard_defconfig # 厂商Hisilicon对应的开源开发板Hi3516dv300标准系统的defconfig + │   ├── small_common_defconfig # 小型系统的内核的common defconfig + │   └── standard_common_defconfig # 标准系统的内核的common defconfig + └── linux-5.10 + └── arch + └── arm + └── configs +    ├── hi3516dv300_small_defconfig # 厂商Hisilicon对应的开源开发板Hi3516dv300小型系统的defconfig +    ├── hi3516dv300_standard_defconfig # 厂商Hisilicon对应的开源开发板Hi3516dv300标准系统的defconfig +    ├── small_common_defconfig # 小型系统的内核的common defconfig +    └── standard_common_defconfig # 标准系统的内核的common defconfig ``` -## 使用 +## 使用说明 -### 使用说明 +1. 合入HDF补丁 -如需使用上述patch,需要在内核代码完成对应芯片平台驱动补丁进行合入。 + 在kernel/linux/build仓中,按照kernel.mk中HDF的补丁合入方法,合入不同内核版本对应的HDF内核补丁: + + ``` + $(OHOS_BUILD_HOME)/drivers/adapter/khdf/linux/patch_hdf.sh $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(HDF_PATCH_FILE) + ``` -1. 合入芯片平台驱动补丁(参考kernel.mk) +2. 合入芯片平台驱动补丁 - 针对不同芯片平台合入对应的patch,以上述Hi3516DV300为例: + 以Hi3516DV300为例: + + 在kernel/linux/build仓中,按照kernel.mk中的芯片组件所对应的patch路径规则及命名规则,将对应的芯片组件patch放到对应路径下: + + ``` + DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch + DEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch + ``` - ``` - patch -p1 < hdf.patch && patch -p1 < hi3516dv300_small.patch - ``` +3. 修改自己所需要编译的config - >![](public_sys-resources/icon-notice.gif) **须知:** - >* 由于OpenHarmony工程的编译构建流程中会拷贝kernel/linux-4.19的代码环境后进行打补丁动作,在使用如下场景1的OpenHarmony的版本级编译命令前,需要kernel/linux-4.19保持原代码环境。 - >* 对应拷贝后的目录位于: out/KERNEL_OBJ/kernel/src_tmp/linux-4.19,需要在该目录下进行如下场景2的单独编译等开发操作。 + 在kernel/linux/build仓中,按照kernel.mk中的芯片组件所对应的patch路径规则及命名规则,将对应的芯片组件config放到对应路径下: + + ``` + KERNEL_CONFIG_PATH := $(OHOS_BUILD_HOME)/kernel/linux/config/${KERNEL_VERSION} + DEFCONFIG_FILE := $(DEVICE_NAME)_$(BUILD_TYPE)_defconfig + ``` + + > **须知:** + > + >由于OpenHarmony工程的编译构建流程中会拷贝kernel/linux/linux-\*\.\*的代码环境后进行打补丁动作,在使用OpenHarmony的版本级编译命令前,需要kernel/linux/linux-\*\.\*原代码环境。 + > + >根据不同系统工程,编译完成后会在out目录下的kernel目录中生成对应实际编译的内核,基于此目录的内核,进行对应的config修改,将最后生成的\.config文件cp到config仓对应的路径文件里,即可生效。 -## 以hi3516dv300开源开发板+ubuntu x86主机开发环境为例 +## 构建说明 -### 场景1:版本级编译原生方式 +以hi3516dv300开源开发板+ubuntu x86主机开发环境为例 使用工程的全量编译命令,编译生成uImage内核镜像 ``` -./build.sh --product-name Hi3516DV300 # 编译hi3516dv300的uImage内核镜像 +./build.sh --product-name Hi3516DV300 # 编译hi3516dv300镜像 + --build-target build_kernel # 编译hi3516dv300的uImage内核镜像 + --gn-args linux_kernel_version=\"linux-5.10\" # 编译指定内核版本 ``` -### 场景2:单独编译修改后的内核 - -1. 准备工作 - - 准备编译环境,可以使用开源arm clang/gcc编译器,或者使用工程自带编译器。 - - 进入工程主目录配置环境变量: - - ``` - export TARGET_PRODUCT=Hi3516DV300 # HDF驱动需要 - export PATH=`pwd`/prebuilts/clang/ohos/linux-x86_64/llvm/bin:`pwd`/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/:$PATH # 配置编译环境 - MAKE_OPTIONES="ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- CC=clang HOSTCC=clang" # 使用工程项目自带的clang环境 - ``` - -2. 直接进入整编过的内核目录out/KERNEL_OBJ/kernel/src_tmp/linux-4.19下修改内核代码或config (OpenHarmony提供对应平台的defconfig供参考)。 -3. 生成内核.config。 - - ``` - make ${MAKE_OPTIONES} hi3516dv300_standard_defconfig # 使用自带的默认config 构建内核 - ``` - -4. 编译生成对应的内核Image。 - - ``` - make ${MAKE_OPTIONES} -j32 uImage # 编译uImage内核镜像 - ``` - - ## 相关仓 kernel\_linux\_patches -device\_hisilicon\_hi3516dv300 - -- Gitee