uclinux - Linux

By Charlie
at 2008-07-11T11:30
at 2008-07-11T11:30
Table of Contents
※ 引述《lowvoice (i am sam)》之銘言:
: 想請問一下有沒有會uclinux的前輩可以幫我解答一下
: 我的目的是把邊好的uclinux放入use隨身碟來開機
: 現在做到的部分是已經可以讀入grub
: 然後也可以把kernel讀近來了
: 但是就讀不到file system
: 他會顯示root=.....有錯誤
: 但是我只有一支隨身碟插在主機板上
: 所以我打root =/dev/sda1但不知道是哪裡錯了
: 不知道有誰可以幫幫我
: 謝謝
我想,這主要是因為你的USB storage還沒驅動,
因此kernel還沒法找到/dev/sdxx
你的GRUB有設定initrd嗎?
0)
如果沒有,我還不知如何進行,因為網路上LiveUSB(含一般distrub.)的方式都有使用
主要是因為kernel module的問題以及USB storage需要一點sleep喚醒(step 3)
如果有,你可以修改一下initrd,大致方式如下:
(NOTE:以下所說的是initrd.gz "檔案內" ,不是你的根目錄哦)
1)
你在complier kernel時,USB相關的選項如果是使用module的話
(目前各大distrub. 都使用此方式,如果你是用它們的來修改
;但uclinux 好像(?) 不是,這你可能要自己check一下你make的.config)
在/linuxrc中加入 insmod 將USB相關的module載入(及filesystem如vfat)
(當然你的/lib/module/2.6.xx/....ko要記得copy進去initrd.gz哦)
(要ins那些module,最簡單的方式是在你的host上,接上你的USB,mount完
使用lsmod查有載入的module,直接在linuxrc上全部insmod相同的)
如果你不是使用module的方式則不用insmod,略過本項
2)
如果你是使用2.6.xx的udev,記得驅動它(動作非當多,不寫了)
(一般initrd是沒有使用udev的,大都在進入init時由rc.sysinit啟動)
如果你沒驅動udev則,(大部份如此)
記得在 /dev內加入sdax
(大部部的distrub使用for loop 直接在 /dev內動態加入sd[a-n][1-xx]個
block device)
不然沒有 dev,kernel還是無用武之地
3)
Sleep,就是等.....(這很重要,因為其它的storage不用等,但USB storage一定要)
因為USB需要喚醒,之前系統能載入USB內的vmlinux,initrd.img等.....是bios功能
現在USB才正式交由kernel接管,且要等kernel可以管的動它,
不然它還是不受教的(不給動的)
目前有看到直接sleep 3 秒,有sleep 6秒
上回我在一只LiveUSB上,因為是白牌的,它要Sleep 30秒,
kernel才可以R/W USB (usb STORAGE 好壞,馬上出現)
(一般bios在loading完kernel,initrd後,bios會退出系統,
也就放棄usb的控制權,此時usb就停了,usb上的power燈就off或不閃了,
當kernel載入module後,kernel知道如何control/talk to usb,
usb會在閃數下,如在host上,一插入usb裝置一樣,這是第一次talk,
之後第少許時間,usb 的power燈就會一直on,表是link connected
你sleep的時間一定要比這off/on中間的時間大數倍)
4)
其他注意事項:
1.tempfs , sysfs ,proc 要記得mount
2.系統的/sbin/init記得可以正確啟動
3.如何做initrd.{gz,img}, 你可以參考各家distrub.的mkinitrd指令稿
(KERNEL的make在make install時會試著去呼叫/sbin/mkinitrd等...來產生
除了產生vmlinuz以外的其他工作)
如你的host不是針對在liveUSB可運行的,大部份mkinitrd都不會造出可以
使用USB boot的initrd,
4.系統的啟動,大致上是
poweron & check bios
bios load boot loader(ex.GRUB)
boot loader load kernel
boot loader load initrd if it declare(an image file for temp filesystem)
kernel make initrd can run and run it
release initrd memory and mount root=......
run /sbin/init (read setting save in /etc/inittab) as process 0
exit init
poweroff
以上,是我個人的粗略說明,
如有不足,請再問,
如果離題,請告知
如果錯誤,那就只能說 PI sales(台語) 了
--
: 想請問一下有沒有會uclinux的前輩可以幫我解答一下
: 我的目的是把邊好的uclinux放入use隨身碟來開機
: 現在做到的部分是已經可以讀入grub
: 然後也可以把kernel讀近來了
: 但是就讀不到file system
: 他會顯示root=.....有錯誤
: 但是我只有一支隨身碟插在主機板上
: 所以我打root =/dev/sda1但不知道是哪裡錯了
: 不知道有誰可以幫幫我
: 謝謝
我想,這主要是因為你的USB storage還沒驅動,
因此kernel還沒法找到/dev/sdxx
你的GRUB有設定initrd嗎?
0)
如果沒有,我還不知如何進行,因為網路上LiveUSB(含一般distrub.)的方式都有使用
主要是因為kernel module的問題以及USB storage需要一點sleep喚醒(step 3)
如果有,你可以修改一下initrd,大致方式如下:
(NOTE:以下所說的是initrd.gz "檔案內" ,不是你的根目錄哦)
1)
你在complier kernel時,USB相關的選項如果是使用module的話
(目前各大distrub. 都使用此方式,如果你是用它們的來修改
;但uclinux 好像(?) 不是,這你可能要自己check一下你make的.config)
在/linuxrc中加入 insmod 將USB相關的module載入(及filesystem如vfat)
(當然你的/lib/module/2.6.xx/....ko要記得copy進去initrd.gz哦)
(要ins那些module,最簡單的方式是在你的host上,接上你的USB,mount完
使用lsmod查有載入的module,直接在linuxrc上全部insmod相同的)
如果你不是使用module的方式則不用insmod,略過本項
2)
如果你是使用2.6.xx的udev,記得驅動它(動作非當多,不寫了)
(一般initrd是沒有使用udev的,大都在進入init時由rc.sysinit啟動)
如果你沒驅動udev則,(大部份如此)
記得在 /dev內加入sdax
(大部部的distrub使用for loop 直接在 /dev內動態加入sd[a-n][1-xx]個
block device)
不然沒有 dev,kernel還是無用武之地
3)
Sleep,就是等.....(這很重要,因為其它的storage不用等,但USB storage一定要)
因為USB需要喚醒,之前系統能載入USB內的vmlinux,initrd.img等.....是bios功能
現在USB才正式交由kernel接管,且要等kernel可以管的動它,
不然它還是不受教的(不給動的)
目前有看到直接sleep 3 秒,有sleep 6秒
上回我在一只LiveUSB上,因為是白牌的,它要Sleep 30秒,
kernel才可以R/W USB (usb STORAGE 好壞,馬上出現)
(一般bios在loading完kernel,initrd後,bios會退出系統,
也就放棄usb的控制權,此時usb就停了,usb上的power燈就off或不閃了,
當kernel載入module後,kernel知道如何control/talk to usb,
usb會在閃數下,如在host上,一插入usb裝置一樣,這是第一次talk,
之後第少許時間,usb 的power燈就會一直on,表是link connected
你sleep的時間一定要比這off/on中間的時間大數倍)
4)
其他注意事項:
1.tempfs , sysfs ,proc 要記得mount
2.系統的/sbin/init記得可以正確啟動
3.如何做initrd.{gz,img}, 你可以參考各家distrub.的mkinitrd指令稿
(KERNEL的make在make install時會試著去呼叫/sbin/mkinitrd等...來產生
除了產生vmlinuz以外的其他工作)
如你的host不是針對在liveUSB可運行的,大部份mkinitrd都不會造出可以
使用USB boot的initrd,
4.系統的啟動,大致上是
poweron & check bios
bios load boot loader(ex.GRUB)
boot loader load kernel
boot loader load initrd if it declare(an image file for temp filesystem)
kernel make initrd can run and run it
release initrd memory and mount root=......
run /sbin/init (read setting save in /etc/inittab) as process 0
exit init
poweroff
以上,是我個人的粗略說明,
如有不足,請再問,
如果離題,請告知
如果錯誤,那就只能說 PI sales(台語) 了
--
Tags:
Linux
All Comments
Related Posts
音效卡一問

By Regina
at 2008-07-11T11:21
at 2008-07-11T11:21
拖動視窗會留下殘影

By Zanna
at 2008-07-11T10:09
at 2008-07-11T10:09
請問如何將make所編譯到的檔案,輸出成一個文件

By Robert
at 2008-07-11T08:57
at 2008-07-11T08:57
vsftpd問題(容易斷線)

By Delia
at 2008-07-11T02:13
at 2008-07-11T02:13
英文版fedora 9, aMSN+gcin無法輸入中文

By Anonymous
at 2008-07-11T00:27
at 2008-07-11T00:27