OpenHarmony开发者论坛

标题: 从标准系统剥离带HDF的kernel并独立编译案例分享 [打印本页]

作者: Laval社区小助手    时间: 2024-3-7 10:34
标题: 从标准系统剥离带HDF的kernel并独立编译案例分享
[md]# 1 关键字

hdf;kernel;驱动;

# 2 问题描述

设备型号:8541e

系统版本:OpenHarmony 3.1 Release

代码版本:OpenHarmony-v3.1-Release

问题现象:在调试驱动的过程,使用OHOS单独编译内核需要全量编译,消耗时间过长

# 3 问题原因

## 3.1 正常机制

调试过程中,编译内核及HDF驱动时采用增量编译,降低编译时间,并且无需ohos整个工程代码

## 3.2 异常机制

使用ohos全量代码编译内核及HDF驱动时,每次会删除源码及编译过程文件,每次编译最少10分钟.

# 4 解决方案

1.准安装编译时需要用到的软件

```
#sudo apt ccache install bc flex bison libssl-dev
```

2.复制kernel需要使用到的编译器,第三方库,hdf配置源文件,HDF驱动框架及框架

3.修改hdf相关的配置文件

# 5 定位过程

1.复制必要目录

```
   从OHOS根目录中,复制出以下目录
 
   drivers
   out/kernel/src_tmp
   prebuilts/gcc
   third_party/bounds_checking_function
   vendor/flyhong
```

2.给内核添加HDF

在out/kernel/src\_tmp/kernel/drivers下添加hdf目录

```
#cd out/kernel/src_tmp/kernel/drivers
mkdir hdf
```

在out/kernel/src\_tmp/kernel/drivers/hdf下生成软连接

```
#cd ~/out/kernel/src_tmp/kernel/drivers/hdf
ln -s ../../../../../../drivers/framework  framework
ln -s ../../../../../../drivers/adapter/khdf/linux khdf
```

修改drivers/Makefile

```
#vim ~/out/kernel/src_tmp/kernel/drivers/Makefile
obj-$(CONFIG_COUNTER)           += counter/
`+obj-$(CONFIG_DRIVERS_HDF)       += hdf/`  //添加HDF的编译目录
obj-$(CONFIG_MOST)              += most/
```

修改drivers/Kconfig

```
#vim  ~/out/kernel/src_tmp/kernel/drivers/Kconfig
source "drivers/counter/Kconfig"
`+source "drivers/hdf/khdf/Kconfig"`   //添加KHDF的编译配置文件
source "drivers/most/Kconfig"
```

添加drviers/hdf/Makefile 内容如下

```
#vim  ~/out/kernel/src_tmp/kernel/drivers/hdf/Makefile
export PROJECT_ROOT :=../../../../../                  //添加KHDF的编译目录
obj-$(CONFIG_DRIVERS_HDF)+=khdf/
```

修改arch/{arch/arm64}/kernel/vmlinux.lds.S添加HDF驱动入口的段地址: 根据SOC架构选择对应的目录

```
+#ifdef CONFIG_DRIVERS_HDF
+   .init.hdf_table : {
+       _hdf_drivers_start = .;
+       *(.hdf.driver)
+       _hdf_drivers_end = .;
+   }
+#endif
```

内核make\_ohos.sh文件内容

```
#vim ~/out/kernel/src_tmp/kernel/make_ohos.sh

#!/bin/bash
set -e

export CCACHE_DIR=../.ccache
export PATH="/usr/bin/ccachePATH"
#rm out -rf
#mkdir out
SRC_DIR=$(cd $(dirname $0); pwd)
OUT_DIR=${SRC_DIR}/out
OHSRC_DIR=${SRC_DIR}/../../../..

export PRODUCT_PATH=vendor/flyhong/fh100     #根据实际产品目录修改
CPUs=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`
KERNEL_CROSS_COMPILE=${OHSRC_DIR}/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi-

export CROSS_COMPILE="ccache ${KERNEL_CROSS_COMPILE}"
#make -C ${SRC_DIR} O=${OUT_DIR}  ARCH=arm CROSS_COMPILE=${KERNEL_CROSS_COMPILE} distclean
make -C ${SRC_DIR} O=${OUT_DIR}  ARCH=arm sprd_sharkle_defconfig #根据实际内核配置文件修改
make -C ${SRC_DIR} O=${OUT_DIR}  ARCH=arm  -j$CPUs
```

# 6 知识分享

熟悉HDF框架,内核编译流程,增加代码调试效率。 1)在二次全量编译内核时采用ccache,可以增加编译效率 2)将khdf将入kernel后,可以更方便的调试hdf的驱动,生成带有HDf的内核
[/md]
作者: a305566    时间: 2024-3-15 11:50
感谢分享




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5