मेरे पास एसपीआई फ्लैश स्टोरेज वाला एक डिवाइस है, मैं उस फ्लैश डिवाइस पर अपने रूटफिक्स के रूप में एक यूबीआईएफएस फाइल सिस्टम का उपयोग करना चाहता हूं। मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि एसपीआई मॉड्यूल शुरू होने से पहले यूबीआई मॉड्यूल शुरू होता है। इस वजह से, जब यूबीआई लोड होता है, तो यह उस यूबीआई डिवाइस से संलग्न नहीं हो सकता है जिसे मैंने इसे बताया है (कर्नेल कमांड लाइन के माध्यम से), इसलिए कोई रूटफ नहीं है। नीचे कंसोल आउटपुट इसे दिखाता है।लिनक्स मॉड्यूल इनिट कॉल का ऑर्डर कैसे निर्धारित करता है?
मैं यह देखने के लिए पर्याप्त स्रोत में डाइविंग कर रहा हूं कि init/main.c
में do_initcalls()
फ़ंक्शन है जो फ़ंक्शन पॉइंटर्स की सूची को कॉल करता है। उन फ़ंक्शन पॉइंटर्स कर्नेल में अंतर्निहित मॉड्यूल के सभी module_init()
फ़ंक्शंस को इंगित करते हैं। उन फ़ंक्शन पॉइंटर्स को कर्नेल बाइनरी में एक विशेष अनुभाग में रखा जाता है, इसलिए यह ऑर्डर संकलन-समय पर चुना जाता है। हालांकि, मैंने अभी तक यह नहीं पता लगाया है कि यह आदेश कैसे निर्धारित किया जाता है।
[ 0.482500] UBI error: ubi_init: UBI error: cannot initialize UBI, error -19
[ 0.492500] atmel_spi atmel_spi.0: Using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
[ 0.500000] atmel_spi atmel_spi.0: Atmel SPI Controller at 0xf0000000 (irq 13)
[ 0.507500] m25p80 spi0.1: mx25l25635e (32768 Kbytes)
[ 0.512500] Creating 7 MTD partitions on "jedec_flash":
[ 0.520000] 0x000000000000-0x000000020000 : "loader"
[ 0.527500] 0x000000020000-0x000000060000 : "u-boot"
[ 0.537500] 0x000000060000-0x000000080000 : "u-boot-env"
[ 0.547500] 0x000000080000-0x000000280000 : "kernel0"
[ 0.557500] 0x000000280000-0x000000480000 : "kernel1"
[ 0.567500] 0x000000480000-0x000001240000 : "fs"
[ 0.575000] 0x000001240000-0x000002000000 : "play"
[ 0.590000] AT91SAM9 Watchdog enabled (heartbeat=15 sec, nowayout=0)
[ 0.607500] TCP cubic registered
[ 0.615000] VFS: Cannot open root device "ubi0:root0" or unknown-block(0,0)
[ 0.622500] Please append a correct "root=" boot option; here are the available partitions:
[ 0.630000] 1f00 128 mtdblock0 (driver?)
[ 0.635000] 1f01 256 mtdblock1 (driver?)
[ 0.640000] 1f02 128 mtdblock2 (driver?)
[ 0.645000] 1f03 2048 mtdblock3 (driver?)
[ 0.650000] 1f04 2048 mtdblock4 (driver?)
[ 0.655000] 1f05 14080 mtdblock5 (driver?)
[ 0.660000] 1f06 14080 mtdblock6 (driver?)
[ 0.665000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
मैं के लिए प्रवास के लिए फ़्लैग किया [तो], क्योंकि भले ही यह नहीं हो सकता स्रोत कोड संशोधन की आवश्यकता है, इसे कम से कम Kbuild चालबाजी की आवश्यकता होती है। इसके अलावा [विशेषज्ञ] हैं जहां विशेषज्ञ हैं। मुझे संदेह है कि आपको किसी विशेष आदेश पर भरोसा नहीं करना चाहिए और यूबीआई ड्राइवर को किसी भी डिवाइस तक पहुंचने की कोशिश नहीं करनी चाहिए जब तक कि उसे कुछ माउंट करने के लिए कहा न जाए। – Gilles
संभावित डुप्लिकेट [LINUX: स्थिर रूप से जुड़े मॉड्यूल लोडिंग का क्रम] (http://stackoverflow.com/questions/5669647/linux-order-of-statically-linked- मॉड्यूल- लोडिंग) जो आपको बताता है कि मॉड्यूल सुनिश्चित करने की आवश्यकता है वांछित प्रारंभिक क्रम में मेकअप के पेड़ (पेड़) में होते हैं। –
'EPROBE_DEFER' का उपयोग कर समस्या का वैकल्पिक समाधान हो सकता है; मैं उसमें जांच करूँगा। –