1. 要設定正確的核心起始位置、Offset與正確的系統頻率。當然必要的Device Driver也要記得掛入。我已經改出可用的 Kernel config(當然也加入了一些修改),可以到這裡下載: http://0rz.tw/r3LP9 2. 網樂通的rootfs是放在USB Stick上的,但是USB Stick要配置sd分割區之前,會經由USB probe到SCSI子系統上,再由核心找出正確的檔案系統以後才會產生sdX的資訊。但是,整個識別過程需要一些時間,若沒有做核心Hack,核心的init就會在sdX來不及產生前就嘗試掛載它,這會導致kernel pantic:
VFS: Cannot open root device 'sda2' or unknown-block(8,2) Please append a correct 'root=' boot option Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,2)
解決方法有兩種,我們可以在u-boot時,修改內建的bootargs,在尾端加上rootdelay=xx,xx表示要init等待的秒數,一般來說五秒足矣。若有些裝置(例如SD讀卡機或是硬碟等)需要更長的時間,就把秒數增加就好。 另外一種就是kernel hack,在核心程式碼 init/do_mounts.c 內,prepare_namespace() 函式實作內部加上delay:
if (root_delay) { /* ... */ } /* Stevennick Hack: force wait 5 seconds for device becomd ready. */ /* See https://blueprints.launchpad.net/ubuntu/+spec/kernel-boot-usb-roodelay */ ssleep(5); /* ...*/
然後重新編譯kernel,應該就可以避免掉這個問題。 當然,由於我沒有網樂通的JTAG connector可用,在怕把u-boot弄壞的情況下,實在不敢下saveenv指令,不然,直接加上rootdelay參數,其實是比較好的解法。 若使用網樂通內部的核心開機,我們也會發現核心在掛載系統前會很明顯的暫停了一會,或許正是等待usb裝置就緒吧!
文章標籤
全站熱搜
創作者介紹
創作者 stevennick 的頭像
stevennick

空中精靈.SkyElf

stevennick 發表在 痞客邦 留言(3) 人氣(0)