久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

系統(tǒng)啟動(dòng)掛載根文件系統(tǒng)時(shí)Kernel panic

 心不留意外塵 2016-03-30

from http://blog.csdn.net/autumnqin/article/details/4906263


這類問題很常見,先總體介紹一下解決思路,。

能出現(xiàn)讓人激動(dòng)的的控制臺(tái),,那么系統(tǒng)移植已經(jīng)接近完成;但是不少人在最后一步出現(xiàn)問題,。

要點(diǎn)如下:

1. 在正確的位置燒寫正確格式的文件系統(tǒng)映象:

2. 內(nèi)核支持這種文件系統(tǒng)格式

3. 文件系統(tǒng)的內(nèi)容要完備

上面說得簡單,,一個(gè)個(gè)介紹。

1. 在正確的位置燒寫正確的文件系統(tǒng)映象:

(a). 正確的位置

嵌入式開發(fā)中,,常通過bootloader燒寫文件系統(tǒng)映象,,假設(shè)寫在flash的地址A處。

內(nèi)核啟動(dòng)時(shí),,顯然要從地址A處讀取文件系統(tǒng),,內(nèi)核是怎么知道的呢?通過命令行參數(shù),,比如“root=/dev/mtdblock2 ”,。/dev/mtdblock2 又是怎么和地址A對(duì)應(yīng)上的呢?內(nèi)核將flash劃分為

幾個(gè)分區(qū),這是在代碼中固定的,。/dev/mtdblock2是第3個(gè)分區(qū),,它的開始地址必須是A。

在內(nèi)核啟動(dòng)時(shí),,可以看到這些分區(qū)的開始地址,、結(jié)束地址,比如內(nèi)核啟動(dòng)時(shí)會(huì)有類似下面的信息:

Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":

0x00000000-0x00030000 : "bootloader"

0x00050000-0x00250000 : "kernel"

0x00250000-0x03ffc000 : "root"

對(duì)于上面的內(nèi)核信息,,/dev/mtdblock2對(duì)應(yīng)root分區(qū),,開始地址為0x00250000,使用bootloader寫文件系統(tǒng)映象時(shí),,燒寫的地址必須是0x00250000

所以,,要保證3點(diǎn):① bootloader燒到地址A,② 地址A是內(nèi)核某個(gè)分區(qū)的開始地址,,③ 命令行參數(shù)“root=/dev/mtdblockXXX ”是這個(gè)分區(qū)

(b). 正確格式的文件系統(tǒng)映象

不同的bootloader支持的燒寫的文件系統(tǒng)映象格式不同,、使用的燒寫命令也可能不同,請(qǐng)注意這點(diǎn),。

另外,,馬大哈們制作文件系統(tǒng)映象時(shí),使用的工具也不要弄錯(cuò)了,。

最后,,請(qǐng)保證這個(gè)文件系統(tǒng)映象是“真的燒寫了”,因?yàn)槿绻鹒lash只是擦除而沒有燒寫,,它也是“正確的,、可以掛接的文件系統(tǒng)”──有人碰到這個(gè)問題,,我和他答非所問地折騰了很久,。

2. 內(nèi)核支持這種文件系統(tǒng)格式

配置內(nèi)核時(shí)選上要支持的文件系統(tǒng)格式

1、2這兩個(gè)問題如果不能保證,,內(nèi)核啟動(dòng)時(shí)會(huì)出現(xiàn)類似如下錯(cuò)誤:

VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)

Please append a correct "root=" boot option

如果1,、2能保證,就可以掛接上文件系統(tǒng),,出現(xiàn)類似下面的字樣時(shí),,革命已經(jīng)成功了80%:

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 116K

3. 文件系統(tǒng)的內(nèi)容要完備

掛接文件系統(tǒng)后,內(nèi)核就會(huì)讀取,、執(zhí)行文件系統(tǒng)中的某個(gè)文件,,通過它來啟動(dòng)應(yīng)用程序。這個(gè)文件要么通過命令行參數(shù)“init=xxxx”來指定,,要么取默認(rèn)的文件(下面說明),。

一般制作文件系統(tǒng)映象時(shí),都是在一個(gè)目錄(假設(shè)目錄名為rootfs)下放好各種東西:bin/,sbin/,,lib/等目錄,,etc/fstab等文件,然后將這個(gè)目錄制作為文件系統(tǒng)映象,。

可以想象,,如果這個(gè)目錄中的東西不對(duì)、不全,,即使制作出了文件系統(tǒng)映象,,也只是能識(shí)別出來,掛接上去,;但是啟動(dòng)不了──所謂啟動(dòng),,不就是執(zhí)行文件系統(tǒng)中的程序嘛?

這時(shí)會(huì)有類似以下的錯(cuò)誤:

Failed to execute /linuxrc.  Attempting defaults...

Kernel panic - not syncing: No init found.  Try passing init= option to kernel.

它說得很明顯,,"Failed to execute /linuxrc"──執(zhí)行/linuxrc失?。?/p>

它為什么要執(zhí)行/linuxrc,還不是因?yàn)槟阍诿钚兄屑尤肓恕癷nit=/linuxrc”這個(gè)參數(shù),。

它為什么會(huì)失?。吭蛴卸?/p>

一,、你制作文件系統(tǒng)映象時(shí),,rootfs目錄下有l(wèi)inuxrc這個(gè)文件嗎?

二,、rootfs目錄的linuxrc文件是正確的嗎,?

請(qǐng)好好確定這兩點(diǎn),大多數(shù)是沒有l(wèi)inuxrc文件──linuxrc是busybox自動(dòng)生成的,,只要配置好就可以,。

如果有l(wèi)inuxrc,那么就是它無法執(zhí)行了(解決方法在下面),。

不用linuxrc行不行,?當(dāng)然行!看看內(nèi)核文件init/main.c,,有如下字樣:

    run_init_process("/sbin/init");

    run_init_process("/etc/init");

    run_init_process("/bin/init");

    run_init_process("/bin/sh");

    panic("No init found.  Try passing init= option to kernel.");

就是說,,它會(huì)依次嘗試執(zhí)行/sbin/init、/etc/init,、/bin/init,、/bin/sh這些文件,都失敗后才打印出錯(cuò)信息"No init found.  Try passing init= option to kernel.",。

所以,,出現(xiàn)這個(gè)出錯(cuò)信息時(shí),就表明了沒有或是無法執(zhí)行這些文件:命令行參數(shù)“init=xxxx”來指定的xxx文件、/sbin/init,、/etc/init,、/bin/init、/bin/sh,。

一,、請(qǐng)檢查你的rootfs目錄,看看這點(diǎn)些文件是否存在

二,、使用file命令看看它們是什么文件類型,,是否可執(zhí)行。

使用busybox時(shí),,這些文件是到/bin/busybox文件的鏈接,,那就看看busybox的文件類型,可以使用下面的命令:

$ file linuxrc 

linuxrc: symbolic link to `bin/busybox'

$ file bin/busybox 

bin/busybox: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.4.3, dynamically linked (uses shared libs), stripped

注意了:如果bin/busybox 是一個(gè)動(dòng)態(tài)鏈接的文件,,還要把它用到的庫復(fù)制到rootfs中,。唉,越說越復(fù)雜了,。這些庫在交叉編譯工具的相應(yīng)目錄下,,如果不知道,查google,,否則再發(fā)帖,。

最后一點(diǎn),文件系統(tǒng)中各種配置文件,、dev目錄也要正確,。出現(xiàn)問題時(shí)再在這個(gè)帖子中說吧。這樣寫下去真是沒完沒了,。

回到這個(gè)帖子,,它的內(nèi)核打印信息為:

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 116K

Failed to execute /linuxrc.  Attempting defaults...

Kernel panic - not syncing: No init found.  Try passing init= option to kernel.

說明文件系統(tǒng)掛接成功(VFS: Mounted root (cramfs filesystem) readonly.);

還說明/linuxrc不存在或者不可執(zhí)行(Failed to execute /linuxrc.  Attempting defaults...),;

但是樓主的意思是linuxrc已經(jīng)有了,,內(nèi)容為:

#!/bin/sh

echo "mount /etc as ramfs"

/bin/mount -n -t ramfs ramfs /etc

/bin/cp -a /mnt/etc/* /etc

echo "re-create the /etc/mtab entries"

# re-create the /etc/mtab entries

/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /

/bin/mount -f -t ramfs ramfs /etc

exec /sbin/init

它是一個(gè)腳本,,它的執(zhí)行依賴于/bin/sh,,問題轉(zhuǎn)為:/bin/sh是否存在?是否可以執(zhí)行,?

用file命令看看它的類型,、是否需要?jiǎng)討B(tài)庫。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多