में कर्नेल मॉड्यूल लोड हो रहा है मैं अपनी समस्या यहां सूचीबद्ध कर रहा हूं।एंड्रॉइड कर्नेल
मेरे पास Google Nexus एक ए.के.ए. "जुनून" फोन है। फास्टबूट और एडीबी उपकरण फोन में स्थापित हैं। और बूट लोडर अनलॉक है।
मेरा कार्य: मुझे एंड्रॉइड कर्नेल में एक लिनक्स कर्नेल मॉड्यूल जोड़ना है।
मैंने क्या किया:
मैं http://source.android.com/source/initializing.html में चरणों का पालन किया और android-2.3.6_r1 (जुनून) के लिए कर्नेल डाउनलोड किया है और यह निर्माण किया है। मैं इसे फोन पर फ्लैश करने में भी सक्षम हूं और नया एंड्रॉइड कर्नेल भी ठीक काम करता है। अब मैं कर्नेल को संशोधित करना चाहता हूं और अपना कर्नेल मॉड्यूल जोड़ना चाहता हूं और फिर इसे फोन पर फ्लैश करना चाहता हूं, ताकि फोन पर कर्नेल मेरा संशोधित कर्नेल हो।
अब मैं ऐसा करने के लिए दो दृष्टिकोणों में आया हूं।
1)
क्रॉस एंड्रॉयड कर्नेल के साथ मेरी कर्नेल मॉड्यूल संकलित करें और एशियाई विकास बैंक के आदेश के साथ डिवाइस पर इसे धक्का। कर्नेल में मेकफ़ाइल का उपयोग निम्नानुसार है।
VERSION = 2
PATCHLEVEL = 3
SUBLEVEL = 6
EXTRAVERSION = -00054-g5f01537
obj-m += hello-1.o
KDIR=/home/apurva/android_dir
PWD := $(shell pwd)
all:
make -C $(KDIR) ARCH=arm CROSS_COMPILE=/home/apurva/android_dir/prebuilt/linux- x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- SUBDIRS=$(PWD) modules
clean:
make -C $(KDIR) ARCH=arm CROSS_COMPILE=/home/apurva/android_dir/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- SUBDIRS=$(PWD) clean
अब यह नया हैलो-1.ko उत्पन्न करने में सक्षम नहीं है। मुझे नहीं पता क्यों, मुझे लगता है कि संस्करण, पैचलेवल, सबवेल और एक्सट्रूशन मूल्यों में कुछ समस्या है। क्या ये आवश्यक हैं? मैंने एंड्रॉइड-2.3.6_आर 1 से भी इन मानों की कोशिश की लेकिन फिर भी यह काम नहीं करता है। मुझे यकीन नहीं है कि यह बहिष्करण मूल्य क्या है?
मैंने अपने उबंटू में कंपाइलर से उत्पन्न हैलो-1.ko के साथ भी कोशिश की। मैंने इस हैलो-1.ko को निम्नलिखित एडीबी कमांड के साथ एमुलेटर में धक्का दिया।
/root/bin/src/out/host/linux-x86/bin/adb shell mount
/root/bin/src/out/host/linux-x86/bin/adb push hello-1.ko /data
/root/bin/src/out/host/linux-x86/bin/adb insmod /data/hello-1.ko
लेकिन हैलो-1.ko इनकोड करने में सक्षम नहीं है और मुझे निम्न त्रुटि मिलती है। insmod: init_module करने में त्रुटि() हैलो-1.ko समारोह लागू नहीं किया
हैलो-1.c जबकि काफी सरल है:
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
2)
ऐसा करने का दूसरा दृष्टिकोण एंड्रॉइड की कर्नेल निर्देशिका में कर्नेल मॉड्यूल की मेरी स्रोत फ़ाइलों को रख सकता है। सिस्टम निर्देशिका में या कहीं और हो सकता है और अन्य स्रोतों के साथ-साथ इन स्रोत फ़ाइलों को बनाने के लिए कहें। लेकिन मुझे यकीन नहीं है कि ऐसा करने के लिए मेक प्रक्रिया कहां से पूछें। मैंने main.mk में ऐसा करने की कोशिश की और मेरी स्रोत फ़ाइलों की स्रोत निर्देशिका में एक Android.mk फ़ाइल बनाई लेकिन यह काम नहीं किया। यह एक बेहतर समाधान हो सकता है लेकिन मुझे इस पर कोई मदद नहीं मिली।
ऐसा करने के बाद, मेरे कर्नेल मॉड्यूल एंड्रॉइड फोन के वैनिक (वायरलेस नेटवर्क इंटरफेस डिवाइस) को नियंत्रित करने में सक्षम होना चाहिए। यह नींबू को नींद मोड में डालने में सक्षम होना चाहिए और उसके बाद मेरे कर्नेल मॉड्यूल से कमांड प्राप्त करने के बाद इसे जगाएं। यदि आपके पास ऐसा करने के तरीके पर कुछ पॉइंटर्स हैं, तो यह एक सहायता होगी। मैंने पाया है कि एंड्रॉइड पर इसे wpa_supplicant निजी ड्राइवर के माध्यम से नियंत्रित किया जाता है। कमांड, जैसे:
wpa_cli driver powermode 0 - auto
wpa_cli driver powermode 1 - active
मेरा काम कर सकता है, लेकिन मुझे यकीन नहीं है क्योंकि मैंने कोशिश नहीं की है। मैं उस चरण तक नहीं पहुंचा हूं।
कृपया इसे देखें और कुछ सहायता/मार्गदर्शन प्रदान करें।
धन्यवाद,
अपूर्व