android - एंड्रॉइड एओएसपी कर्नेल को संकलित कैसे करें और एंड्रॉइड एमुलेटर के साथ इसका परीक्षण कैसे करें?




android-emulator emulation (6)

2012 तक, कर्नेल को डाउनलोड करना Source.google.com पर अच्छी तरह से प्रलेखित है, हालांकि मैंने संकलन पाया कि इसमें कुछ प्रयास किए गए हैं। एआरएम एमुलेटर के लिए कर्नेल बनाने के लिए उपयोग किए जाने वाले आदेश यहां दिए गए हैं:

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 &

उन सभी के लिए धन्यवाद जिन्होंने इसका उत्तर दिया - मैं इसे इस उत्तर से बिट्स और टुकड़ों के साथ करने में सक्षम था। अमाउंड की 'आपको एवीडी की जरूरत है' वह आखिरी टुकड़ा था जिसने मुझे परेशानी दी।

क्या किसी ने एंड्रॉइड कर्नेल को सफलतापूर्वक संकलित किया है और एंड्रॉइड एमुलेटर में इसका परीक्षण किया है, और यदि ऐसा कुछ भी है जो विशेष करने की ज़रूरत है?

एसडीके के लिए दस्तावेज़ीकरण उत्कृष्ट है, हालांकि कर्नेल को संकलित करने और एम्यूलेटर में एक कस्टम मशीन स्थापित करने के लिए दस्तावेज मेरे लिए खोजना मुश्किल रहा है।


अगस्त 200 9 से कर्नेल अब मानक रेपो मैनिफेस्ट का हिस्सा नहीं है जिसे आप एंड्रॉइड ओपन सोर्स प्रोजेक्ट के लिए स्रोत कोड डाउनलोड करने के निर्देशों का पालन करते समय प्राप्त करते हैं। एमुलेटर पर एक विशिष्ट कर्नेल को सफलतापूर्वक डाउनलोड, निर्माण और चलाने के लिए आवश्यक चरणों निम्नानुसार हैं:

  • एंड्रॉइड कर्नेल को या तो अपने रेपो मेनिफेस्ट में या मैन्युअल रूप से चलाकर इसे प्राप्त करके प्राप्त करें:
    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-
  • इस तरह से बनाया गया कर्नेल आपके कर्नेल पेड़ के आर्क / आर्म / बूट फ़ोल्डर में समाप्त होना चाहिए (जहां आप गिट क्लोन से कोड डालते हैं)
  • अपने कर्नेल के साथ एमुलेटर चलाने के लिए दो विकल्प हैं, या तो इसे मानक कर्नेल को प्रतिस्थापित करने के लिए ओपन सोर्स प्रोजेक्ट के प्रीबिल्ट कर्नेल फ़ोल्डर में कॉपी करें। दूसरा विकल्प कर्नेल विकल्प सेट के साथ एमुलेटर शुरू करना है:
    emulator -kernel mydroid/kernel/common/arch/arm/boot/zImage

ध्यान दें कि मैंने उपर्युक्त विवरण में डिफ़ॉल्ट पथ का उपयोग किया है, आपको उन्हें अपने सेटअप पर लागू होने वाली चीज़ों में बदलने की आवश्यकता है। आखिरी बार मैंने इसका परीक्षण किया है, लेकिन मुझे लगता है कि इसे काम करना चाहिए।

कुछ अतिरिक्त जानकारी: मानक एंड्रॉइड ओपन सोर्स डिस्ट्रीब्यूशन में कर्नेल को mydroid/prebuilt/android-arm/kernel फ़ोल्डर में प्री-बिल्ट बाइनरी के रूप में वितरित किया जाता है और स्रोत कोड शामिल नहीं होता है। कर्नेल स्रोत को डिफ़ॉल्ट रूप से दो कारणों से हटा दिया गया था क्योंकि मैं इसे लेता हूं। एक यह है कि प्लेटफार्म घटक के लिए बहुत सारे बैंडविड्थ और डिस्कस्पेस लेते हैं कि ज्यादातर लोग ज्यादा काम नहीं करेंगे। दूसरा कारण यह है कि चूंकि कर्नेल कर्नेल बिल्ड सिस्टम के साथ बनाया गया है और एओएसपी बिल्ड सिस्टम के हिस्से के रूप में नहीं, इसे अलग रखने के लिए यह समझ में आता है। कर्नेल के लिए आम शाखा एमुलेटर द्वारा उपयोग की जाती है। प्रयोगात्मक, एमएसएम (क्वालकॉम प्लेटफार्म) और ओमैप (टीआई मंच) और शायद कुछ और के लिए शाखाएं भी हैं। यदि आप हार्डवेयर के साथ एंड्रॉइड कर्नेल का उपयोग करना चाहते हैं तो यह आपके लिए अधिक दिलचस्प हो सकता है।


बस बीएमबी की पोस्ट से कुछ चीजों को सही करने के लिए (जो मेरे लिए बहुत उपयोगी था, उसने मेरी परियोजना को बचाया):

  • गिट क्लोन गिट: //android.git.kernel.org/kernel/common.git ( कर्नेल मिस्ड);
  • गिट चेकआउट -ट मूल / एंड्रॉइड-गोल्डफिश-2.6.2 9 -बी गोल्डफिश (वही);
  • ARCH = arm goldfish_defconfig (idem) बनाएं;
  • ARCH = arm CROSS_COMPILE = mydroid / prebuilt / linux-x86 / टूलचेन / arm-eabi-4.2.1 / bin / arm-eabi- (idem) बनाएं
  • emulator -avd my_avd-कर्नेल mydroid / कर्नेल / सामान्य / arch / arm / boot / zImage (यहां मैंने कमांड में एक avd जोड़ा, यह मेरे लिए बिना काम नहीं किया)।


मई 2012 तक, मैंने पाया कि आप कर्नेल को संकलित करने के लिए 'goldfish_defconfig' का उपयोग नहीं कर सकते हैं। आपको goldfish_armv7_defconfig 'का उपयोग करने की आवश्यकता है। यह समझाएगा कि क्यों जॉनीलैम्बाडा एमुलेटर (प्रीबिल्ट कर्नेल के लिए) से कॉन्फ़िगर निकालने की विधि काम करता है, और आवश्यक है।

Goldfish_defconfig कर्नेल को एआरएम 926 प्रोसेसर पर चलाने के लिए कॉन्फ़िगर करता है, लेकिन एम्यूलेटर को कोरटेक्स ए 8 (जो एक एआरएम वी 7 सीपीयू है) के रूप में चलाने के लिए कॉन्फ़िगर किया गया है। इसलिए यदि आप इसे काम करना चाहते हैं तो आपको नए defconfig का उपयोग करने की आवश्यकता है (या एमुलेटर से कॉन्फ़िगर खींचें)।

सिर्फ आपकी जानकारी के लिए।


यह बीएमबी और अर्नुद एलएम के उत्तरों के लिए एक अद्यतन है।
ऐसा लगता है कि 2011/03/03 के अनुसार सुनहरी मछली ब्रांच तकनीक बदल दी गई थीं। गोल्डफिश शाखा की जांच करते समय, इसका उपयोग करें:

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

एंड्रॉइड-gldfish-2.6.29 में लापता 'ओ' नोट करें!

उम्मीद है कि यह किसी के लिए समय बचाता है।


Android 8.1 अतिथि और उबंटू 17.10 होस्ट के लिए पूरी तरह से स्वचालित प्रक्रिया

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
. build/envsetup.sh
lunch aosp_x86_64-eng
USE_CCACHE=1 CCACHE_DIR=ccache make -j $(($(nproc) - 2))
emulator -show-kernel

out/ निर्माण निर्देशिका लगभग 90 जीबी लेती है, सीसीएसीईई को छोड़कर, और बाकी पेड़ के बारे में 40 जीबी।

टिप्पणियाँ:

  • ./repo init -b एक टैग को इंगित करना चाहिएmaster शाखा हमेशा टूटी हुई है, और इसलिए -release शाखाएं थीं।

    टैग की सूची यहां मिल सकती है: https://android.googlesource.com/platform/manifest या रेपो क्लोनिंग करके।

    शाखाओं को हमेशा तोड़ने के दो कारण होने की संभावना है:

    • बंद दरवाजे और कोड के पीछे एंड्रॉइड विकसित किया गया है। इसलिए Google और OEM devs के पास पहले से ही "मास्टर" के शीर्ष पर पैच का एक टन है, और पहले से ही समस्या को ठीक कर दिया है।

      इसी कारण से मास्टर पर किसी भी बिल्डिंग त्रुटियों को आजमाने और रिपोर्ट करने के लिए बेकार है: वे पहले से ही सूचित और तय किए गए हैं। बिल्ड विफलताओं की रिपोर्ट करने के लिए मैं आपको सही आधिकारिक स्थान भी ढूंढने की हिम्मत करता हूं।

    • एक शाखा पर repo sync बस खींचता है कि सभी 650 गिट रेपो के नवीनतम संस्करण को दिए गए शाखा के लिए एओएसपी बनाता है, उन्हें सबमिड्यूल की तरह सिंक किए बिना। इसलिए कुछ भी गारंटी नहीं देता है कि वे संगत हैं। टैग हालांकि सभी repos का एक विशिष्ट टैग लाते हैं।

  • --depth 1 और sync -c --no-tags --no-clone-bundle --depth 1 sync -c --no-tags --no-clone-bundle --depth 1 sync -c --no-tags --no-clone-bundle दर्दनाक धीमी क्लोन को तेज़ी से बनाने का प्रयास था। यकीन नहीं है कि यह कितना सफल था। यह भी देखें: एओएसपी रेपो सिंक बहुत लंबा लगता है

  • हम एआरएम के बजाय lunch aosp_x86_64-eng का lunch aosp_x86_64-eng उपयोग करते हैं क्योंकि यह मेजबान x86 वर्चुअलाइजेशन एक्सटेंशन के कारण बहुत तेजी से चलता है।

    इसके बजाय एआरएम संस्करण बनाने के लिए, बस इसके बजाय lunch aosp_arm-eng का lunch aosp_arm-eng उपयोग करें।

    इसके अलावा, एआरएम छवि शायद धीमी गति के कारण छोटी है? जब जीयूआई शुरू होता है (यदि आप भाग्यशाली हैं), तो यह दिखाता है कि "सिस्टम यूआई प्रतिसाद नहीं दे रहा है"। यह भी देखें: प्रक्रिया प्रणाली एंड्रॉइड एमुलेटर में प्रतिक्रिया नहीं दे रही है

  • -show-kernel टर्मिनल को एक धारावाहिक से जोड़ता है, यानी आप बूट संदेश देखते हैं, और अंत में एक खोल प्राप्त करते हैं, जो चीजों को डीबग करने के लिए बहुत उपयोगी है।

  • type emulator दिखाता है कि यह बिना किसी तर्क के emulator लिए एक उपनाम है। एंड्रॉइड एमुलेटर पर कस्टम रोम चलाएं पूछता है कि अपने रोम को स्पष्ट रूप से चुनने के लिए कुछ तर्क कैसे पारित करें।

    एम्यूलेटर -help लक्ष्य आश्चर्यजनक रूप से अंतर्दृष्टिपूर्ण हैं:

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




android-source