Как создать файл make Android для объединения корневой файловой системы на основе glibc с файловой системой AOSP?

Приложение A (Устаревшее пользовательское пространство) книги Карима Ягмура Embedded Android 2013 года описывает, как объединить корневую файловую систему на основе glibc, содержащую BusyBox, со сборкой AOSP. Но там описано, как заставить это работать в версии 2.3/Gingerbread.

Я пытаюсь сделать то же самое для исходников Android 8.1, предоставленных с Orange Pi 4 LTS.

Следуя инструкциям в книге, я скопировал кросс-скомпилированную сборку корневой файловой системы на основе glibc, содержащей BusyBox, в новый каталог моего AOSP:

$ ls -lh ~/builds/RK3399-Android8.1/rootfs-glibc
total 20K
-rw-rw-r-- 1 joe joe  584 Mar 18 12:14 Android.mk
drwxrwxr-x 2 joe joe 4.0K Mar  8 12:25 bin
drwxrwxr-x 2 joe joe 4.0K Mar  8 11:29 lib
lrwxrwxrwx 1 joe joe   11 Mar  8 12:25 linuxrc -> bin/busybox
drwxrwxr-x 2 joe joe 4.0K Mar  8 12:25 sbin
drwxrwxr-x 5 joe joe 4.0K Mar  8 11:30 usr

И я создал файл Android.mk, соответствующий файлу в книге. Но это не сработало, поэтому я поэкспериментировал и адаптировал это вот к чему:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := rootfs-glibc
# LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
LOCAL_MODULE_CLASS := EXECUTABLES

# This part is a hack, we're doing "addprefix" because if we don't,
# this dependency will be stripped out by the build system
GLIBC_ROOTFS := $(addprefix $(TARGET_ROOT_OUT)/, rootfs-glibc)

$(GLIBC_ROOTFS):
    xxxmkdir -p $(TARGET_ROOT_OUT)
    cp -af $(TOPDIR)rootfs-glibc/* $(TARGET_ROOT_OUT)
    rm $(TARGET_ROOT_OUT)/Android.mk
    # The last command just gets rid of this very .mk since it's copied as is

include $(BUILD_PREBUILT)

Я знаю, что make-файл анализируется, поскольку перед добавлением LOCAL_MODULE_CLASS я получал сообщения об ошибках. Но правила в моей цели $(GLIBC_ROOTFS) не выполняются, что подтверждается намеренным изменением mkdir на xxxmkdir.

Я провел еще несколько исследований и узнал о существовании системы сборки Soong, которая была «представлена ​​в Android 7.0 (Nougat) для замены Make». Но я искал, например, файлы Android.bp, чтобы сделать что-то, приближающее то, что я пытаюсь сделать, но безуспешно.

Похоже, мне нужно использовать модуль типа android_filesystem, но я не нашел примера или достаточно четкой документации, чтобы создать свою собственную.

Должен ли я исправить свой Android.mk файл? Как? Или мне следует использовать файл Android.bp?


1
72
1

Ответ:

Решено

Я обратился к Кариму Ягмуру, который любезно ответил. Он посоветовал мне ознакомиться с упражнениями из своего курса обучения встроенному Android. Перейдите на страницу www.opersys.com/training/embedded-android-training и прокрутите вниз. Нажмите «КУРСЫ». (Обратите внимание на лицензию.) Там есть ссылка на права на упражнения. На странице 14 приведены инструкции по загрузке файла Android.mk, который мне помог (после выполнения прилагаемых инструкций).