我想在 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
startglibc.sh 从 init.goldfish.rc 调用如下:
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 文件夹?