كيفية تجميع الروبوت AOSP نواة اختبار مع منافس الروبوت ؟

StackOverflow https://stackoverflow.com/questions/1809774

سؤال

وقد أي شخص بنجاح تجميع الروبوت نواة واختبارها في الروبوت المحاكي ، وإذا كان الأمر كذلك هل هناك أي شيء خاص التي تحتاج إلى القيام به ؟

وثائق SDK ممتازة ، ومع ذلك وثائق تجميع نواة إنشاء آلة مخصصة في المحاكي كان من الصعب بالنسبة لي أن تجد.

هل كانت مفيدة؟

المحلول

منذ آب / أغسطس 2009 النواة لم يعد جزءا من معيار الريبو البيان الذي تحصل عليه عندما كنت اتبع التعليمات لتحميل التعليمات البرمجية المصدر الروبوت المصدر المفتوح المشروع.الخطوات اللازمة بنجاح تحميل, بناء وتشغيل نواة محددة على المحاكي هي كما يلي:

  • الحصول على الروبوت نواة إما عن طريق إضافته إلى الريبو ظاهر أو يدويا عن طريق تشغيل:
    git clone https://android.googlesource.com/kernel/goldfish.git
  • تحقق من الصحيح فرع للعمل مع المحاكي ، أيذهبية:
    git checkout -t origin/android-goldfish-2.6.29 -b goldfish
  • توليد المحاكي التكوين (كيمو المحاكي يعمل الذراع رمز ، أيذراع التكوين):
    make ARCH=arm goldfish_defconfig
    • إذا كان هذا لا يعمل, حاول make ARCH=arm goldfish_armv7_defconfig
  • الآن بناء النواة باستخدام الصليب تجميع الأدوات الموزعة مع مشروع مفتوح المصدر:
    make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
  • نواة بنيت هذه الطريقة يجب أن ينتهي في القوس/arm/التمهيد مجلد النواة شجرة (حيث يمكنك وضع رمز من بوابة استنساخ)
  • لتشغيل المحاكي مع نواة هناك خيارين ، إما نسخ إلى معدة مسبقا نواة مجلد المشروع مفتوح المصدر لتحل محل معيار النواة.الخيار الآخر هو أن تبدأ المحاكي مع نواة مجموعة الخيار:
    emulator -kernel mydroid/kernel/common/arch/arm/boot/zImage

علما بأنني استخدمت المسارات الافتراضية في الوصف أعلاه ، تحتاج إلى تغييرها إلى ما ينطبق على الإعداد الخاص بك.فقد كان بعض الوقت منذ آخر مرة أنا اختبرت هذا ولكن أعتقد أنه يجب أن تعمل.

بعض المعلومات الإضافية:في معيار الروبوت المصدر المفتوح توزيع النواة بوصفها بنيت قبل الثنائية في mydroid/prebuilt/android-arm/kernel مجلد التعليمات البرمجية المصدر غير المدرجة.نواة المصدر تم إزالتها من التقصير واضح لسببين وأنا أعتبر.واحد هو أنه يأخذ الكثير من عرض النطاق الترددي و مساحة القرص على منصة العنصر أن معظم الناس سوف لا تعمل مع الكثير.والسبب الآخر هو أنه منذ النواة مبني مع النواة بناء نظام وليس كجزء من aosp بناء نظام فمن المنطقي أن يبقيه فصل.المشتركة فرع النواة هو واحد يستخدم من قبل المحاكي.هناك أيضا فروع التجريبية ، msm (كوالكوم المنابر) و Omap (TI منصة) و ربما أكثر من بعض.إذا كنت ترغب في استخدام الروبوت نواة مع هذه الأجهزة قد يكون أكثر إثارة للاهتمام بالنسبة لك.

نصائح أخرى

فقط لتصحيح بعض الأشياء من BMB بعد (والتي كانت مفيدة جدا بالنسبة لي, لقد أنقذت حياتي المشروع) :

  • git clone git://android.بوابة.النواة.org/kernel/المشتركة.بوابة (ال نواة غاب) ;
  • بوابة الخروج -t المنشأ/android-ذهبية-2.6.29 -ب ذهبية (نفس) ;
  • جعل القوس=ذراع goldfish_defconfig (شرحه) ;
  • جعل القوس=ذراع CROSS_COMPILE=mydroid/معدة مسبقا/linux-x86/toolchain/ذراع eabi-4.2.1/بن/ذراع eabi- (شرحه)
  • المحاكي -avd my_avd -نواة mydroid/kernel/common/قوس/arm/boot/zImage (أنا هنا إضافة avd في الأمر أنها لم تعمل دون بالنسبة لي).

وهذا هو التحديث للحصول على إجابات BMB وأرنو LM ل.
يبدو تم تغيير branchnames ذهبية اعتبارا من 2011/3/3. عند سحب فرع ذهبية، استخدم هذا:

git checkout -t origin/archive/android-gldfish-2.6.29 -b goldfish 

لاحظ 'س' في عداد المفقودين في الروبوت-gldfish-2.6.29!

وهذا الأمل يوفر الوقت لشخص ما.

واعتبارا من عام 2012، ونواة تحميل تم توثيقه جيدا على source.google.com، ولكن أنا وجدت تجميع استغرق الأمر عدة محاولات. هنا الأوامر اعتدت على بناء نواة لالمضاهاة ARM:

cd /kernel/source/root
make mrproper
adb pull /proc/config.gz # from the emulator
gunzip config
mv config .config  # now you have a (perhaps slightly outdated kernel .config)
make ARCH=arm silentoldconfig # update the .config - take the defaults if prompted
make ARCH=arm menuconfig # make any further changes
time make -j4 ARCH=arm CROSS_COMPILE=/path/to/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- 2>&1 | tee ../../logs/$(date +%Y%m%d-%H%M)-make-kernel.log
emulator -kernel /kernel/source/root/kernel/goldfish/arch/arm/boot/zImage -avd myAVD &

وشكرا لجميع الذين أجابوا هذا واحد - وكنت قادرا على القيام بذلك مع اجزاء وقطع من هذا الجواب. وAmaund "كنت في حاجة إلى AVD 'وكان آخر قطعة أن أعطاني المتاعب.

مؤتمتة بالكامل الروبوت 8.1 ضيف على أوبونتو 17.10 المضيف

# Download the source. Takes several minutes.
curl https://storage.googleapis.com/git-repo-downloads/repo >repo
chmod a+x repo
./repo init -b android-8.1.0_r1 --depth 1 -u https://android.googlesource.com/platform/manifest
./repo sync -c  -j $(($(nproc) - 2)) --no-tags --no-clone-bundle

# Do the actual build. Takes minutes / hours.
. build/envsetup.sh
lunch aosp_x86_64-eng
USE_CCACHE=1 CCACHE_DIR=ccache make -j $(($(nproc) - 2))

# Run the emulator.
emulator -show-kernel

على out/ بناء دليل يستغرق حوالي 90Gb و بقية الشجرة عن 40Gb ، باستثناء CCACHE.

حوالي 1-2 دقائق بعد بدء تشغيل المحاكي ، تظهر الشاشة الرئيسية:

وإذا كنت اضغط على enter على المضيف محطة الروبوت انطلقت من الحصول على قذيفة على أن نظام أندرويد على المضيف الخاص بك المحطة الطرفية:

enter image description here

ملاحظات:

  • ./repo init -b يجب أن نشير إلى الوسم. master فرع مكسورة دائما ، وهكذا كانت -release فروع.

    قائمة العلامات يمكن الاطلاع على: https://android.googlesource.com/platform/manifest أو عن طريق الاستنساخ التي الريبو.

    هناك سببان لماذا فروع دائما مكسورة:

    • ما وراء الأبواب المغلقة و رمز انخفض.ولذلك جوجل و OEM المشروعات الإنمائية بالفعل طن من باكس على رأس العام "سيد" ، و بالفعل تم إصلاح المشكلة.

      لنفس السبب فمن المرجح عديمة الفائدة في محاولة والإبلاغ عن أي أخطاء بناء على الماجستير:سبق أن ذكرت و ثابت.كما أتحداك أن تجد حتى حق الرسمية المكان التقرير بناء الفشل.

    • repo sync على فرع ببساطة تسحب ما أحدث نسخة من كل 650 بوابة اتفاقيات إعادة الشراء يجعل AOSP على فرع معين ، دون المزامنة لهم مثل الوحدات الفرعية.لذلك لا شيء يضمن أن تكون متوافقة.العلامات ومع ذلك جلب علامة محددة من كل اتفاقيات إعادة الشراء.

  • --depth 1 و sync -c --no-tags --no-clone-bundle كانت محاولة لجعل بطيئة استنساخ أسرع.غير متأكد من مدى نجاحه.انظر أيضا: AOSP الريبو مزامنة يأخذ وقتا طويلا

  • نستخدم lunch aosp_x86_64-eng بدلا من الذراع لأنه يعمل أسرع بكثير من المقرر أن تستضيف x86 الافتراضية امتداد.

    لبناء ذراع نسخة بدلا من مجرد استخدام lunch aosp_arm-eng بدلا من ذلك.

    وعلاوة على ذلك, الذراع الصورة هو عربات التي تجرها الدواب ، ربما بسبب بطء?عندما واجهة المستخدم الرسومية يبدأ (إذا كنت محظوظا) ، يظهر "UI نظام لا يستجيب".انظر أيضا: عملية النظام لا يستجيب في الروبوت المحاكي

  • -show-kernel الروابط محطة المسلسل ، أيترى التمهيد الرسائل والحصول على قذيفة في النهاية ، وهو أمر مفيد جدا لتصحيح الأمور.

  • type emulator يظهر أنه هو فقط الاسم المستعار emulator دون أي حجج. تشغيل ROM مخصص على الروبوت المحاكي يسأل كيفية تمرير بعض الحجج صراحة حدد القرص.

    المحاكي -help الأهداف من المستغرب الثاقبة:

    emulator -help
    emulator -help-build-images
    emulator -help-disk-images
    

    يمكنك تحديد كيمو وسيطات سطر الأوامر المعطاة:

    emulator -verbose | grep 'emulator: argv'
    

    كما ذكر في: كيفية إظهار الخيارات التي يتم تمريرها إلى كيمو عند إطلاق محاكي الروبوت?

    وهذا يدل على بعض خيارات مخصصة مثلا -android-hw, لذا يجب أن يكون متشعب كيمو: كيمو مقابل الروبوت المحاكي:خيارات سطر الأوامر المصدر التحركات الموقع كل 5 دقائق على ما يبدو: تعديل محاكي الروبوت شفرة المصدر

وهذا سهل. اتبع الإرشادات التي تظهر على http://source.android.com/download للحصول على الحصول على وترجمة التعليمات البرمجية المصدر ل الروبوت كله. أن يستغرق بعض الوقت، ولكن ليس بهذا التعقيد.

ومن خلال بناء ذلك، سيكون لديك كنت الانتاج في الدليل <android>/out. وهذا يشمل، بالإضافة إلى صور ROM، مجموعة من الأدوات للغاية، بما في ذلك المضاهاة. بلدي منافس هو في <android>/out/host/linux-x86/bin/emulator. مجرد تعيين متغير بيئة يدعى ANDROID_PRODUCT_OUT إلى <android>/out/target/product/generic، ومن ثم تشغيل المحاكي بدون أي خيارات سيتم تشغيل ROM المترجمة.

واعتبارا من مايو 2012، وجدت أنه لا يمكنك استخدام 'goldfish_defconfig "لتجميع النواة. تحتاج إلى استخدام goldfish_armv7_defconfig. وهذا يفسر لماذا طريقة JonnyLambada لاستخراج التكوين من المضاهاة (للنواة قبل البناء) يعمل، وضروري.

ووgoldfish_defconfig تكوين نواة لتشغيل على ARM 926 المعالج، ولكن تم تكوين محاكي لتشغيل وCoretex A8 (وهو V7 CPU ARM). لذلك تحتاج إلى استخدام أحدث defconfig إذا كنت تريد أن تعمل (أو سحب التكوين من منافس).

ولمعلوماتك فقط.

وكانت الطريقة وكنت قادرا على تمهيد مدمج I AOSP جمعت لنسخ system.img التي حصلت جمعت إلى ~ / .android / AVD / Froyo.avd / ولكن، عندما كنت استخراج system.img وإضافة نسخة الجذور من سو وBUSYBOX، ثم إعادة تشكيل system.img، المضاهاة لا التمهيد. أنا لا تزال تحاول معرفة ذلك الجزء من: S

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top