我想在Android ICS Emulator中运行glibc,我已将glibc作为单独的文件夹捆绑在AOSP根文件夹中,其中包含Android.mk,内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
$(shell mkdir -p $(TARGET_OUT)/glibc/)
$(shell cp -rf $(LOCAL_PATH)/* `pwd`/$(TARGET_OUT)/glibc/)
它将整个glibc文件夹复制到out / target / product / generic / system /文件夹。 并使snod将其包含在system.img
中有一个带有glibc文件夹的startglibc.sh和init.sh脚本被复制到/ system / glibc& / system / glibc / root /文件夹。
我编译了busybox并将其复制到/ system / bin /文件夹。
/system/glibc/startglibc.sh的内容如下:
BUSYBOX=/system/bin/busybox
mnt=/system/glibc
export PATH=/usr/bin:/usr/sbin:/bin:$PATH
export ROOT=/root
${BUSYBOX} chroot $mnt /root/init.sh
从init.goldfish.rc调用startglibc.sh,如下所示:
service myscript /system/bin/busybox ash /system/glibc/startglibc.sh
class main
oneshot
我使用system / core / include / private / android_filesystem_config.h给出了777和root:root作为init.sh的文件权限,如下所示:
{ 00777, AID_ROOT, AID_ROOT, "system/glibc/root/init.sh" },
在启动时,会调用startglibc.sh脚本,但在执行chroot时会发出权限被拒绝错误。
我是否因为使用init.sh而无法做chroot?或者我在Android AOSP构建期间错误地复制了glibc文件夹?
答案 0 :(得分:0)
我能够成功地做chroot。 以下是我的所作所为:
chroot不仅需要具有执行权限的init脚本或/ bin / sh,还需要大多数文件系统文件夹,例如bin。变种等用于创建新根目录。
因此,我在system / core / include / private / android_filesystem_config.h
中给出了以下内容{ 00755, AID_ROOT, AID_ROOT, "system/glibc/" },
{ 00755, AID_ROOT, AID_ROOT, "system/glibc/*" },
因为在AOSP构建期间复制整个文件夹时,默认情况下,复制文件夹中所有文件和文件夹的权限为644,因此chroot所需的必要文件夹没有执行权限。
此外,如果复制的任何文件夹需要其他权限,那么我们可以在上面的代码中指定相同的内容。
我非常喜欢android赋予文件系统权限的方式。它非常易于配置。
我希望这对其他人也有帮助。