积分584 / 贡献0

提问0答案被采纳0文章52

[经验分享] 从标准系统剥离带HDF的kernel并独立编译案例分享 原创

Laval社区小助手 显示全部楼层 发表于 2024-3-7 10:34:07

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的内核

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

a305566

沙发 发表于 2024-3-15 11:50:30
感谢分享

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部