技術討論區 > Embedded 討論版

[教學] linuxrc 實作剖析

<< < (2/2)

V-ezlinux:
哈感謝說明,是我寫錯造成不行後來抓到問題了..現在要將voip server的功能放進去有啥問題在來請教...哈感謝萬分有機會請您吃個飯摟....萬能的天神哈~說真的喔

ericshei:
有些問題請指點:

還境RH9

pivot_root /sysroot /sysroot/initrd

執行如上指令後,當下是否就切換到新的root filesystem中了? 若然最後一行的"umount /initrd/proc"就是umount原initrd中的proc了,對吧?

另外/sysroot/initrd中的initrd敍述應該是對應到,真正root filesystem中的/initrd目錄了,對吧?

另外關於mkrootdev的用途,man nash之後了解的是,若沒有指定kernel的root=參數就使用/proc/sys/kernel/real-root-dev的值,這個部份,我在一搬的partition上測試是沒問題的,但在LVM上似乎行不通? 設定如下:

kernel 開機設為root=/dev/vg00/rootreiserfs

linuxrc 內容如下:


--- 引用 ---echo "Loading scsi_mod.o module"
insmod /lib/scsi_mod.o
echo "Loading sd_mod.o module"
insmod /lib/sd_mod.o
echo "Loading BusLogic.o module"
insmod /lib/BusLogic.o
echo "Loading lvm-mod.o module"
insmod /lib/lvm-mod.o
echo "Loading jbd.o module"
insmod /lib/jbd.o
echo "Loading ext3.o module"
insmod /lib/ext3.o
echo "Loading reiserfs.o module"
insmod /lib/reiserfs.o
echo Mounting /proc filesystem
mount -t proc /proc /proc
echo Creating block devices
mkdevices /dev
echo Scanning logical volumes
vgscan
echo Activating logical volumes
vgchange -ay
echo Creating root device
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
echo Mounting root filesystem
#mount -o defaults --ro -t reiserfs /dev/vg00/rootreiserfs /sysroot
mount -o defaults --ro -t reiserfs /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc

--- 引用結尾 ---


不過若將linuxrc中mount rootfilesystem的部份改成如下就可以:

mount -o defaults --ro -t reiserfs /dev/vg00/rootreiserfs /sysroot
但前提不能將echo 0x0100 > /proc/sys/kernel/real-root-dev給註解掉.
這個部份不知是不是我對mkrootdev的理解還有問題?

而我在標準RH9的LVM上,看它的linuxrc也是直接做指定,沒有用mkrootdev所產生的/dev/root,且也是有對/proc/sys/kernel/real-root-dev做指定.

望前輩們指點!  ^^

thyme:

--- 引述: "ericshei" ---有些問題請指點:

還境RH9

pivot_root /sysroot /sysroot/initrd

執行如上指令後,當下是否就切換到新的root filesystem中了? 若然最後一行的"umount /initrd/proc"就是umount原initrd中的proc了,對吧?

另外/sysroot/initrd中的initrd敍述應該是對應到,真正root filesystem中的/initrd目錄了,對吧?

--- 引用結尾 ---


這我沒有詳究,實作看看結果就是了。


--- 引用 ---
不過若將linuxrc中mount rootfilesystem的部份改成如下就可以:

mount -o defaults --ro -t reiserfs /dev/vg00/rootreiserfs /sysroot
但前提不能將echo 0x0100 > /proc/sys/kernel/real-root-dev給註解掉.
這個部份不知是不是我對mkrootdev的理解還有問題?


--- 引用結尾 ---


我的苦力經驗是,如果你的 real-root-dev 不是 0x100,
那麼,你的 pivot_root 會做白工,還是跳回原來 real-root-dev,
然後告訴你不能 mount rootfs -_-|||
0x100 指的是 ramdisk ,也就是目前 mount initrd 的 /dev/ram0。

mkrootdev LVM
也許 mkrootdev 沒有支援這個 device,或是 grub 傳不進這個 device,
也或許是 kernel 一開機沒有建立這個 device ,這要測一下才知道。

ericshei:

--- 引述: "thyme" ---
--- 引述: "ericshei" ---有些問題請指點:

還境RH9

pivot_root /sysroot /sysroot/initrd

執行如上指令後,當下是否就切換到新的root filesystem中了? 若然最後一行的"umount /initrd/proc"就是umount原initrd中的proc了,對吧?

另外/sysroot/initrd中的initrd敍述應該是對應到,真正root filesystem中的/initrd目錄了,對吧?

--- 引用結尾 ---


這我沒有詳究,實作看看結果就是了。

--- 引用結尾 ---

嗯.實作結果,的確如此!  ^^


--- 引用 ---
--- 引用 ---
不過若將linuxrc中mount rootfilesystem的部份改成如下就可以:

mount -o defaults --ro -t reiserfs /dev/vg00/rootreiserfs /sysroot
但前提不能將echo 0x0100 > /proc/sys/kernel/real-root-dev給註解掉.
這個部份不知是不是我對mkrootdev的理解還有問題?


--- 引用結尾 ---


我的苦力經驗是,如果你的 real-root-dev 不是 0x100,
那麼,你的 pivot_root 會做白工,還是跳回原來 real-root-dev,
然後告訴你不能 mount rootfs -_-|||
0x100 指的是 ramdisk ,也就是目前 mount initrd 的 /dev/ram0。

mkrootdev LVM
也許 mkrootdev 沒有支援這個 device,或是 grub 傳不進這個 device,
也或許是 kernel 一開機沒有建立這個 device ,這要測一下才知道。
--- 引用結尾 ---


關於LVM的device file執行到linuxrc中的vgscan及vgchange -ay 才會出現.

多謝指點.   :wink:

導覽

[0] 文章列表

[*] 上頁

前往完整版本