initramfs切入真实linux文件系统
来源:互联网 发布:办公oa软件下载 编辑:程序博客网 时间:2024/06/10 19:37
转载:http://www.iteedu.com/os/linux/mklinuxdiary/ch3initrd/23.php
initramfs切入真实linux文件系统主要用到switch_root命令。
通常initramfs都是为安装最终的根文件系统做准备工作,它的最后一步需要安装最终的根文件系统,然后切换到新根文件系统上去。
以往 的基于ramdisk 的initrd 使用pivot_root命令切换到新的根文件系统,然后卸载ramdisk。但是initramfs是rootfs,而rootfs既不能 pivot_root,也不能umount。
busybox的解决方案是,提供了switch_root命令,完成全部的处理过程,使用起来非常方便。
switch_root命令的格式是:
switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGUMENTS_TO_INIT]
- 其中NEW_ROOT是实际的根文件系统的挂载目录,执行switch_root命令前需要挂载到系统中;
- NEW_INIT是实际根文件系统的init程序的路径,一般是/sbin/init;
- -c /dev/console是可选参数,用于重定向实际的根文件系统的设备文件,一般情况我们不会使用;
- ARGUMENTS_TO_INIT则是传递给实际的根文件系统的init程序的参数,也是可选的。
特别注意
switch_root命令必须由PID=1的进程调用,也就是必须由initramfs的init程序直接调用,不能由init派生的其他进程调用,否则会出错,提示: switch_root: not rootfs
也是同样的原因,init脚本调用switch_root命令必须用exec命令调用,否则也会出错,提示: switch_root: not rootfs
示例
下面是个人写的一个init文件,把分区写到命令里了,你可以从“/proc/cmdline”中读取内核参数来找到要切换的分区。
#!/bin/sh#[ expression ] expression为真返回true,否则返回false。-d file FILE exists and is a directory# ||或运算,前面为假运行后面。#下面一段的意思,没有对应目录创建。[ -d /dev ] || mkdir -m 0755 /dev[ -d /root ] || mkdir -m 0700 /root[ -d /sys ] || mkdir /sys[ -d /proc ] || mkdir /proc[ -d /tmp ] || mkdir /tmp#-----------------------------------mkdir -p /var/lockecho "mount -t sysfs -o nodev,noexec,nosuid none /sys"mount -t sysfs -o nodev,noexec,nosuid none /sys echo "mount -t proc -o nodev,noexec,nosuid none /proc "mount -t proc -o nodev,noexec,nosuid none /proc # Note that this only becomes /dev on the real filesystem if udev's scripts# are used; which they will be, but it's worth pointing outif ! mount -t devtmpfs -o mode=0755 none /dev; thenmount -t tmpfs -o mode=0755 none /dev#echo "mknod -m 0600 /dev/console c 5 1"#mknod -m 0600 /dev/console c 5 1#mknod /dev/null c 1 3# Make some basic devices first, let udev handle the restmknod /dev/null c 1 3mknod /dev/ptmx c 5 2mknod /dev/console c 5 1mknod /dev/kmsg c 1 11fimkdir /dev/ptsmount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || truemdev -secho "mount /dev/sda3 /root"mount /dev/sda3 /rootecho "switch_root /root /sbin/init "exec switch_root /root /sbin/init
0 0
- initramfs切入真实linux文件系统
- BusyBox制作Initramfs嵌入式Linux根文件系统
- 从initramfs根文件系统启动Linux
- arm linux 挂载initramfs根文件系统
- BusyBox制作Initramfs嵌入式Linux根文件系统
- BusyBox制作Initramfs嵌入式Linux根文件系统
- Ramdisk根文件系统启动Linux(使用initramfs启动Linux)
- Linux嵌入式移植之——(2)文件系统制作, initramfs
- Linux下为什么会有initrd initramfs这种虚拟文件系统
- Linux内核3.0移植并基于Initramfs根文件系统启动
- 构建根文件系统-initramfs
- 构建initramfs文件系统
- Initramfs文件系统的制作
- 文件系统 busybox and initramfs
- initramfs文件系统制作
- Initramfs文件系统的制作
- ramdisk根文件系统+initramfs
- Linux initramfs
- SQLITE数据库存储类对象 用到qt的QByteArray
- fedroa20 httpd apache 只有本机能够访问解决办法
- 如何利用yum的缓存文件
- 出国以后才知道英语应该怎么学
- System.getProperty()小结
- initramfs切入真实linux文件系统
- C语言中字符串函数后隐藏的危险陷阱
- Camera Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别
- js手机相应式多级导航分享
- Hangover(1.4.1)
- QTcreator找不到库
- VxWorks工程Makefile分析
- JQuery中serialize()、serializeArray()和param()方法
- UVa OJ 10361 自动作诗机