1

Android ICSEmulator内で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/フォルダーにコピーします。そして、makesnodはそれをsystem.imgに含めます

startglibc.shおよびinit.shスクリプトがあり、それぞれ/ system/glibcおよび/system/ glibc /root/フォルダーにコピーされるglibcフォルダーがあります。

私は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を使用して、init.shのファイル権限として777とroot:rootを付与しました。

{ 00777, AID_ROOT,      AID_ROOT,     "system/glibc/root/init.sh" },

起動時にstartglibc.shスクリプトが呼び出されますが、chrootの実行中に、パーミッション拒否エラーが発生します。

init.shを使用してchrootを実行するために何かが足りませんか?または、Android AOSPのビルド中にglibcフォルダーを間違ってコピーしていますか?

4

1 に答える 1

0

chrootを正常に実行できました。以下は私がしたことです:

chrootには、実行権限のあるinitスクリプトまたは/ bin / shだけでなく、binなどのほとんどのファイルシステムフォルダーが必要です。などvar。新しいルートを作成するためなど。

したがって、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がファイルシステムにパーミッションを与える方法が本当に好きでした。それは非常に構成可能です。

これが他の誰かにも役立つことを願っています。

于 2013-02-26T22:47:49.283 に答える