如何在 AOSP 中包含 util-linux?

How to include util-linux in AOSP?

如何在 AOSP 中包含 here 中的 util-linux?我应该在 AOSP 中的什么地方添加这个 util-linux 文件夹,以便我可以构建 AOSP 并且可以将这些实用程序添加到 /system/bin//system/xbin/ 中?是否有任何特定的 MakefileAndroid.mk 需要使用 Android build 进行编译?

检查您要添加的库是否已存在于 https://android.googlesource.com/ 总是值得的。不幸的是,您的情况并非如此。

因为 util-linux 没有 Android.bp。您将必须了解 util-linux 的构建方式以及 Soong 如何创建用于集成的自定义 Android.bp。放置它的正确文件夹是 external/util-linux/.

也许您会想走捷径,只需添加 util-linux 作为预构建的二进制文件。这将减少工作量。

不过,请先检查许可问题。

我已经从 AOSP 中的 util-linux 包中添加了一个应用程序。

这是我的做法。我在 AOSP 文件夹的 external 中添加了 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.34/util-linux-2.34.tar.gz 中的 util-linux (2.34)。

我只想从 util-linux 添加 chrt。因此,我 运行 在 util-linux 中使用正常的 make 命令来查看为 chrt 编译了哪些文件。我做了笔记并相应地创建了一个 Android.mk。我确信有一种更好的方法可以通过首先制作库然后制作 chrt 可执行文件来分层执行此操作。不过,这也行。

我在 external\util-linux\ 添加了以下 Android.mk。 Android.mk 如下所示:

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)
 LOCAL_MODULE := sohamchrt

 LOCAL_SRC_FILES := schedutils/chrt.c lib/blkdev.c lib/canonicalize.c \
     lib/crc32.c lib/crc32c.c lib/idcache.c lib/fileutils.c \
     lib/ismounted.c lib/color-names.c lib/mangle.c lib/match.c lib/mbsalign.c \
     lib/mbsedit.c lib/md5.c lib/pager.c lib/parse-date.c lib/pwdutils.c lib/randutils.c \
     lib/setproctitle.c lib/strutils.c lib/timeutils.c lib/ttyutils.c lib/exec_shell.c \
     lib/strv.c lib/sha1.c lib/signames.c lib/linux_version.c lib/loopdev.c \
     lib/plymouth-ctrl.c lib/cpuset.c lib/path.c lib/procutils.c lib/sysfs.c

 LOCAL_CFLAGS = -DHAVE_NANOSLEEP -include config.h \
                -isystem bionic/libc/upstream-openbsd/android/include

 LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

 include $(BUILD_EXECUTABLE)

现在,当我 运行 m -j8 iso_img 时,Android 会尝试编译 sohamchrt。我将包命名为 sohamchrt,因为 chrt 已经由 toybox 提供,但有限制。

问题是 util-linuxbionic 不完全兼容。所以,我需要对一些 .c 和 .h 文件进行一些更改,例如 fileutils.c, include/c.h

编译成功后,当Android为运行ning时,二进制文件sohamchrt出现在/system/bin中,正常运行。

这也是关于如何在 AOSP 中为用户空间可执行二进制文件添加 C 源文件的指南。