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/ccache
PATH"
#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