嵌入式linux ramfs,嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initram

mount -t proc /proc /proc

setquiet

echo Mounting proc filesystem

echo Mounting sysfs filesystem

mount -t sysfs /sys /sys

echo Creating /dev

mount -o mode=0755 -t tmpfs /dev /dev

mkdir /dev/pts

mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts

mkdir /dev/shm

mkdir /dev/mapper

echo Creating initial device nodes

mknod /dev/null c 1 3

mknod /dev/zero c 1 5

mknod /dev/systty c 4 0

mknod /dev/tty c 5 0

mknod /dev/console c 5 1

mknod /dev/ptmx c 5 2

mknod /dev/tty0 c 4 0

mknod /dev/tty1 c 4 1

mknod /dev/tty2 c 4 2

mknod /dev/tty3 c 4 3

mknod /dev/tty4 c 4 4

mknod /dev/tty5 c 4 5

mknod /dev/tty6 c 4 6

mknod /dev/tty7 c 4 7

mknod /dev/tty8 c 4 8

mknod /dev/tty9 c 4 9

mknod /dev/tty10 c 4 10

mknod /dev/tty11 c 4 11

mknod /dev/tty12 c 4 12

mknod /dev/ttyS0 c 4 64

mknod /dev/ttyS1 c 4 65

mknod /dev/ttyS2 c 4 66

mknod /dev/ttyS3 c 4 67

echo Setting up hotplug.

hotplug

echo Creating block device nodes.

mkblkdevs

echo "Loading ehci-hcd module"

modprobe -q ehci-hcd

echo "Loading ohci-hcd module"

modprobe -q ohci-hcd

echo "Loading uhci-hcd module"

modprobe -q uhci-hcd

mount -t usbfs /proc/bus/usb /proc/bus/usb

echo "Loading ext3 module"

modprobe -q ext3

echo "Loading scsi_mod module"

modprobe -q scsi_mod

echo "Loading sd_mod module"

modprobe -q sd_mod

echo "Loading libata module"

modprobe -q libata

echo "Loading ata_generic module"

modprobe -q ata_generic

echo "Loading pata_acpi module"

modprobe -q pata_acpi

echo Waiting for driver initialization.

stabilized --hash --interval 250 /proc/scsi/scsi

echo "Loading ata_piix module"

modprobe -q ata_piix

echo Waiting for driver initialization.

stabilized --hash --interval 250 /proc/scsi/scsi

echo "Loading dm-mod module"

modprobe -q dm-mod

echo "Loading dm-mirror module"

modprobe -q dm-mirror

echo "Loading dm-zero module"

modprobe -q dm-zero

echo "Loading dm-snapshot module"

modprobe -q dm-snapshot

echo Making device-mapper control node

mkdmnod

modprobe scsi_wait_scan

rmmod scsi_wait_scan

mkblkdevs

echo Scanning logical volumes

lvm vgscan --ignorelockingfailure

echo Activating logical volumes

lvm vgchange -ay --ignorelockingfailure VolGroup00

resume /dev/VolGroup00/LogVol01

echo Creating root device.

mkrootdev -t ext3 -o defaults,ro /dev/VolGroup00/LogVol00

echo Mounting root filesystem.

mount /sysroot

echo Setting up other filesystems.

setuproot

loadpolicy

echo Switching to new root and running init.

switchroot

echo Booting has failed.

sleep -1

首先,这里使用的是nash,不是bash、csh等常见shell。nash是专门为了init设计的,因为体积小。

pc机上的initrd不过只是一个过渡,所以在加载完了硬盘、ext3等驱动后,就迫不及待地要重新设置根文件系统了

首先mkrootdev指定最终的根目录,参数跟grub的内核启动参数一致。接着mount /sysroot将最终的根目录先挂在到/sysroot ,setuproot开始将initrd中的/proc /dev /sys 中的资料转移到 /sysroot ,

switchroot

会开始转换/sysroot 为最终的根文件系统,完成后顺便将initrd之前在ram中的一切清空。

(如果有/initrd 目录的话就会把initrd挂载到该目录下)

好了,扯了半天,终于能解释最开始的疑惑了

initrd,或者initramfs,无论在pc还是嵌入式,都是可以选择的,分3种情况

1 完全不要initrd

2 initrd作为最终的根文件系统

3 initrd作为过渡,由initrd的init来加载最终的根文件系统

(本文作者deep_pro 转载请注明出处)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值