如何在AOSP中包含来自here的util-linux?我应该在AOSP的什么地方添加这个util-linux文件夹,这样我就可以构建AOSP,并且这些工具可以添加到/system/bin/或/system/xbin/中?有没有什么特别的Makefile或者Android.mk需要我用Android build来编译?
发布于 2019-11-07 04:28:52
我在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时,安卓试图编译sohamchrt。我之所以将这个包命名为sohamchrt,是因为toybox已经提供了chrt,但它是有限制的。
问题是util-linux与bionic并不完全兼容。因此,我需要对一些.c和.h文件进行一些更改,比如fileutils.c, include/c.h等。
编译成功后,当Android运行时,二进制sohamchrt会出现在/system/bin中,并且工作正常。
这也是关于如何在AOSP中为用户空间可执行二进制文件添加C源文件的指南。
发布于 2019-11-06 04:45:08
检查您想要添加的库是否已经存在于https://android.googlesource.com/中总是值得的。不幸的是,在您的情况下,情况并非如此。
因为util-linux没有附带Android.bp。您必须了解util-linux是如何构建的,以及Soong如何创建用于集成的自定义Android.bp。放置它的正确文件夹应该是external/util-linux/。
也许您会想走捷径,只将util-linux作为预构建二进制文件添加。这将减少工作量。
不过,请先检查许可问题。
https://stackoverflow.com/questions/58717122
复制相似问题