内核态与用户态
OpenHarmony = OpenHarmony内核态层 + OpenHarmony用户态层 其中内核态层就是由内核本身(如Linux Kernel,LiteOS),和一些运行在内核态的一些特性组成,比如HDF等。
OH内核态层 = OH Linux内核 + OH内核态特性(可选特性或者必选特性,如必选特性HDF,今后的可选特性HMDFS等)
而OH Linux内核 = 标准LTS Linux内核 + 三方SoC芯片平台代码 + OH内核态基础代码(支撑OH用户态层运行的最基础代码)
OH内核态层 = 标准LTS Linux内核 + 三方SoC芯片平台代码 + OH内核态基础代码 + OH内核态特性 根据图片我们不难发现OH内核态层能够通过两种方法实现
- OH内核态层 = 三方Linux内核 + OH内核态基础代码 + OH内核态特性(如HDF,今后的HMDFS等)
- OH内核态层 = OH Linux内核 + OH内核态特性(如HDF,今后的HMDFS等)
但是我们知道直接是同OH Linux内核 支持的第三方芯片不够丰富,我们可以借助已经有的第三方Linux内核来移植OpenHarmony
内核态的基础代码移植
目前OH内核态的基础代码主要与日志服务相关,以轻量级内核为例,日志服务代码包含如下:
drivers/staging/hilog
drivers/staging/hievent
需要将上述目录下的代码从OpenHarmony内核代码目录kernel/linux/linux-4.19/drivers/staging中,拷贝到out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b/drivers/staging 下(加粗部分为某树莓派开发板的kernel目录) 好需要在Kconfig中配置好模块的加载,需要在drivers/staging/Kconfig文件内增加如下代码
source "drivers/staging/hilog/Kconfig"
source "drivers/staging/hievent/Kconfig"
必选特性HDF移植
执行如下命令打上HDF补丁
./patch_hdf.sh [工程根目录路径] [内核目录路径] [hdf补丁文件]
$PROJ_ROOT/drivers/adapter/khdf/linux/patch_hdf.sh \
$PROJ_ROOT
$PROJ_ROOT/out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b
$PROJ_ROOT/kernel/linux/patches/linux-4.19/hi3516dv300_patch/hdf.patch
基本配置结束后,打开HDF的基本配置选项,可以通过在Kconfig中静态配置,也可以通过meauconfig去动态配置
# 需要配置的选项如下
CONFIG_DRIVERS_HDF=y
CONFIG_HDF_SUPPORT_LEVEL=2
CONFIG_DRIVERS_HDF_PLATFORM=y
CONFIG_DRIVERS_HDF_PLATFORM_MIPI_DSI=y
CONFIG_DRIVERS_HDF_PLATFORM_GPIO=y
CONFIG_DRIVERS_HDF_PLATFORM_I2C=y
CONFIG_DRIVERS_HDF_PLATFORM_UART=y
CONFIG_DRIVERS_HDF_TEST=y
接下来编译镜像文件即可
|