silentoldconfig не удается создать при добавлении нового символа в конфигурацию AOSP - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь добавить драйвер ядра Linux в источник Android.

Я добавляю его в файл конфигурации для сборки (kernel / msm-4.9 / arch / arm64 / config / sdm845_defconfig).

CONFIG_LEDS_QPNP_WLED=y
# CONFIG_LEDS_QPNP_HAPTICS is not set
CONFIG_HAPTICS_MISC=y

Файлы makefile и Kconfig в kernel / msm-4.9 / drivers / misc / также обновляются и включают драйвер.

Makefile:

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", но я пытаюсь построить его так, как это было предложено, и это удается. Однако попытка собрать все ядро ​​не удалась по той же причине, что и выше. Есть идеи, что может быть причиной этого? Он был успешно построен до добавления нового символа.

1 Ответ

0 голосов
/ 06 сентября 2018

Я обнаружил, что после выхода версии 4.9 ядра Linux платформа Android перестала использовать встроенные драйверы. Чтобы обойти это, мне пришлось вместо этого собрать драйверы в виде динамически загружаемых модулей ядра. Для этого я создал каталог в vendor / с именем dlkm /, куда я помещаю весь исходный код и конфиги / Makefile.

После того, как это сделано, я могу успешно собрать исходный код.

$ source build/envsetup.sh
$ lunch 41
$ make -j12


#### build completed successfully (03:38 (mm:ss)) ###

Не может быть ссылки на драйвер в реальной части ядра платформы Android, иначе сборка не удастся. Исключением является дерево устройств (файлы .dtsi, .dts), которые все еще будут встроены в ядро.

...