[英]silentoldconfig fails to build when adding new symbol to AOSP config
我試圖將linux內核驅動程序添加到android源。
我將其添加到要構建的配置文件中(內核/msm-4.9/arch/arm64/config/sdm845_defconfig)。
CONFIG_LEDS_QPNP_WLED=y
# CONFIG_LEDS_QPNP_HAPTICS is not set
CONFIG_HAPTICS_MISC=y
內核/msm-4.9/drivers/misc/中的makefile和Kconfig文件也已更新為包含驅動程序。
生成文件:
haptics-misc-objs := haptics-misc.o hatpics-misc-tables.o
obj-$(CONFIG_HAPTICS_MISC) += haptics-misc.o
Kconfig:
config HAPTICS_MISC
tristate "Haptics driver"
depends on I2C && SYSFS && NEW_LEDS
help
Boosted Haptics Driver
我嘗試通過以下步驟構建內核:
$ source build/envsetup.sh
$ lunch 41
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=8.1.0
TARGET_PRODUCT=sdm845
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_PLATFORM_VERSION=OPM1
TARGET_BUILD_APPS=
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=kryo300
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv7-a-neon
TARGET_2ND_CPU_VARIANT=cortex-a9
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.15.0-24-generic-x86_64-with-Ubuntu-16.04-xenial
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=OPM1.171019.026
OUT_DIR=out
AUX_OS_VARIANT_LIST=
$ make -j12
構建失敗,並出現以下錯誤:
Haptics driver (HAPTICS_MISC) [N/m/y/?] (NEW) aborted!
Console input/output is redirected. Run 'make oldconfig' to update configuration.
/media/ftreven/quarter-b/Open-Q_845_Android-O_v1.0/Source_Package/SDA845_Open-Q_845_Android-O_v1.0/kernel/msm-4.9/scripts/kconfig/Makefile:37: recipe for target 'silentoldconfig' failed
make[3]: *** [silentoldconfig] Error 1
/media/ftreven/quarter-b/Open-Q_845_Android-O_v1.0/Source_Package/SDA845_Open-Q_845_Android-O_v1.0/kernel/msm-4.9/Makefile:550: recipe for target 'silentoldconfig' failed
make[2]: *** [silentoldconfig] Error 2
make[1]: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/kernel.release'. Stop.
make[1]: Leaving directory '/media/ftreven/quarter-b/Open-Q_845_Android-O_v1.0/Source_Package/SDA845_Open-Q_845_Android-O_v1.0/out/target/product/sdm845/obj/kernel/msm-4.9'
Makefile:150: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2
從錯誤消息看來,命令失敗僅是因為符號是新的。 它建議制作oldconfig,但這也會失敗:
$ make oldconfig
ninja: error: unknown target 'oldconfig', did you mean 'fmconfig'?
13:08:18 ninja failed with: exit status 1
#### failed to build some targets (38 seconds) ####
我不確定“ fmconfig”是什么,但是我嘗試按照建議的方法構建它並成功。 但是,由於與上述相同的原因,嘗試構建整個內核失敗。 知道是什么原因造成的嗎? 它是在添加新符號之前成功構建的。
我發現發布Linux內核版本4.9之后,android框架停止允許內置驅動程序。 為了解決這個問題,我不得不將驅動程序構建為可動態加載的內核模塊。 為此,我在vendor /下創建了一個名為dlkm /的目錄,在其中放置了所有源代碼和configs / Makefile。
完成此操作后,我可以成功構建源。
$ source build/envsetup.sh
$ lunch 41
$ make -j12
#### build completed successfully (03:38 (mm:ss)) ###
在android框架的實際內核部分中無法引用驅動程序,否則構建將失敗。 設備樹(.dtsi,.dts文件)的例外情況仍然是在內核中構建的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.