2013-02-05 3 views
2

glibc를 안드로이드 glibc 또는 바이오닉 C와는 다른 팔에 맞게 컴파일했습니다. glibc 환경에서 필자는 더 많은 API를 제공하는 데 도움이 될 것입니다. 이제 Android가 실행되는 동안/system/폴더에 glibc 환경을 복사 할 수 있으며 chroot를 수행 할 때 glibc 환경에서 프로그램을 실행할 수 있습니다. 폴더에 구조화 된 미리 만들어진 파일 세트를 안드로이드 폴더에 추가합니다.

은 현재 내가

내가의 glibc를 개별적으로 컴파일 /의 glibc glibc는을 tarring 안드로이드 에뮬레이터의 sdcard에 복사 한 후/시스템 폴더에 압축을 해제 한 후/시스템에 chroot를 수행 한 후 별도의 glibc와 안드로이드를 컴파일하고 오전 그런 다음 Android 소스 코드의 어딘가에 배치하십시오. Android 소스를 컴파일하는 동안 glibc의 사전 빌드 된 폴더 구조가/system 폴더로 복사되고 system.img의 일부가되도록해야합니까?

system.img를 Android 에뮬레이터에 복사하고 실행하면 glibc가 이미/system 폴더에 있고 glibc 환경에서 앱을 실행해야합니다. 나는 유리는 그의 대답에 언급 된 당 (내가 glibc는 폴더와이 폴더에 복사 한 모든 것을 창조)로 한 후 내가 코드를 컴파일 할 때

UPDATE

, 나는 출력 이하로 얻을.

build/core/main.mk:490: * Some files have been added to ALL_PREBUILT. 
build/core/main.mk:491: * 
build/core/main.mk:492: * ALL_PREBUILT is a deprecated mechanism that 
build/core/main.mk:493: * should not be used for new files. 
build/core/main.mk:494: * As an alternative, use PRODUCT_COPY_FILES in 
build/core/main.mk:495: * the appropriate product definition. 
build/core/main.mk:496: * build/target/product/core.mk is the product 
build/core/main.mk:497: * definition used in all products. 
build/core/main.mk:498: * 
build/core/main.mk:499: * unexpected glibc in ALL_PREBUILT 
build/core/main.mk:500: * 
build/core/main.mk:501: * ALL_PREBUILT contains unexpected files. Stop. 

그래서 내가 빌드/코어/legacy_prebuilts.mk

에서 glibc에 추가하지만 나는 여기에 도움이 될 책 "임베디드 안드로이드"의 예입니다

make: * No rule to make target mkdir', needed byout/target/product/generic/root/glibc'. Stop. 

답변

1

를 얻을. , rootfs-glibc를라는 AOSP 프로젝트의 루트에 폴더를 만들고 거기에 복사 할 코드를 넣어, 다음과 같은 내용으로이 Android.mk 파일을 만듭니다

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
# This part is a hack, we're doing "addprefix" because if we don't, 
# this dependency will be stripped out by the build system 
GLIBC_ROOTFS := $(addprefix $(TARGET_ROOT_OUT)/, rootfs-glibc) 
$(GLIBC_ROOTFS): mkdir -p $(TARGET_ROOT_OUT) cp -af $(TOPDIR)rootfs-glibc/* $(TARGET_ROOT_OUT) rm 
# The last command just gets rid of this very .mk since it's copied as-is 
ALL_PREBUILT += $(GLIBC_ROOTFS) 

이 진저 브레드 마찬가지입니다있는 주석이 . 새로운 버전의 안드로이드에서는 make 시스템이 변경되었을 수도 있습니다.

+0

감사합니다. 그러나 귀하의 경우에는 glibc가 android toolchain을 사용하여 컴파일 될 때 컴파일 문제를 확인하고 수정해야 할 수도 있습니다. 변경없이 완벽하게 컴파일 될 수 있습니다. – Rookie

+0

나는 이해하지 못한다. 미리 빌드 된 바이너리를 추가하려고합니까, 아니면 안드로이드 툴체인으로 glibc를 컴파일하고 싶습니까? – Yury

+0

안녕하세요, Yuri, 특정 폴더 구조에 미리 빌드 바이너리를 추가해야합니다. 즉,/system/디렉토리에 추가해야하는 glibc 폴더의 폴더 구조에 바이너리가 많이 있습니다. – Rookie

0

나는 이런 식으로 할 수 있다고 생각했다. 1. 나는 안드로이드와 glibc를 separetely로 컴파일했다. 2. 일단 둘 다 컴파일되면 glibc 전체 폴더를 수동으로/out/target/product/generic/system/glibc/폴더에 복사합니다. 3. "snod"를 실행하십시오

그래도 되겠습니까?

4

마지막으로 나는 아주 특별한 방법으로 그것을했습니다.

나는 3 가지 옵션이 있었다 :

  1. 사용 BUILD_PREBUILT 변수를하지만, 당신이 하나의 파일을 위해 그것을 할 수 있습니다 그것을 환급,하지만 난 여러 파일을 가지고 특정 forlder 구조
  2. 사용 PRODUCT_COPY_FILES. 하지만 어쨌든 그것은 나를 위해 작동하지 않았다 PRODUCT_COPY_FILES는 (는) 기기 용이며 나를위한 새 기기가 아닙니다. 나는 에뮬레이터를 연구 중이다.
  3. ALL_PREBUILT + =를 사용하여 Yuri가 제공 한 솔루션을 사용했지만 Yuri 은 GB를 언급했으며 JB와 ICS를 사용하고 있으므로 은 나를 위해 일하지 않았습니다.

내가 취한 접근법은 Android.mk 파일에서 셸 스크립트를 사용하는 것입니다. 나는이 같은 일부 사용 : 당신이my_folder 내부에 그대로 폴더를 anddroid에 복사 할 필요가 전체 미리 만들어진 폴더 구조를 포함하는 폴더 이름 my_folder이 가정, 나는 Android.mk를 생성 및 텍스트 아래에 입력 :

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 

$(shell mkdir -p $(TARGET_OUT)/my_folder/) 
$(shell cp -rf $(LOCAL_PATH)/* `pwd`/$(TARGET_OUT)/my_folder/) 

my_folder 디렉토리에있는 모든 파일과 폴더 내 사전 구축 된 세트로 복사 된이 방법은 밖으로 안드로이드의 시스템 폴더에 있습니다.

이 정보가 도움이되기를 바랍니다.

1

PRODUCT_COPY_FILES는 모듈 파일 (Android.mk)이 아닌 제품 mk 파일 (device/mydevice/..)에 있어야합니다. 이것은 here입니다.

이 형식은 복사 DIRS에 사용됩니다 :이 명령은 비록 APK 파일에 작동하지 않습니다

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/mydir,system/app) 

을, 오류를주는 :

빌드/코어/메이크 : *** 미리 만들어진 APK PRODUCT_COPY_FILES에서 발견 : vendor/mydir/ray-system-ui-release.apk : system/app/ui-release.apk, 대신 BUILD_PREBUILT를 사용하십시오! 중지.