+ -
当前位置:首页 → 问答吧 → ramdisk的问题

ramdisk的问题

时间:2008-06-13

来源:互联网

内核建立第一个进程之后,如果init是一个脚本,
那这个脚本里面写#!/bin/bash,
内核是不是就执行/bin/bash,同时把 /init 作为参数传给bash呀?

资料上说内核会在/ /bin /sbin等文件夹下寻找init文件,并试图执行它,
但我把init放入/bin下,不能执行。
放在/下,是可以的
我用的fedora7, 2.6.23.15的内核
我已经用bash把nash替换了
有人点醒一下可以吗?

作者: xy_god   发布时间: 2008-06-13

貌似这个不是 LFS 的范围

楼主可说说搞这个 ramdisk 的意图吗?

作者: d00m3d   发布时间: 2008-07-05

最好能把你写的那个shell贴出来,

作者: alex_chen_028   发布时间: 2008-07-11

引用:
内核建立第一个进程之后,如果init是一个脚本,
那这个脚本里面写#!/bin/bash,
内核是不是就执行/bin/bash,同时把 /init 作为参数传给bash呀?
何必那样,你直接在 /sbin 目录下建一个 bash 的符号链接就可以了,只要名字是 init 就行,没有 init 照样能运行,只是这个时候整个系统只运行了你一个 bash 程序。

系统在启动的最后一步只是执行 /sbin/init,但这个 init 到底干什么,它不管,内核只需要有一个行了,所以你可以用一个其它的程序或者脚本把原来的 /sbin/init 替换掉,理论都是可以的,但貌似没人会那么做。

另外,你还可以在启动的时候用
init= 你要运行的程序
来测试一下

作者: panly   发布时间: 2008-07-18

使用ramdisk的话是会执行/init的,正常启动的话就会找/bin 和 /sbin下的init或sh。

作者: takethat   发布时间: 2008-07-18

引用:
作者: takethat
使用ramdisk的话是会执行/init的,正常启动的话就会找/bin 和 /sbin下的init或sh。
学习了!

我没有用 ramdisk 测试过,但 nfs 试过,确实是先找 init,找不到的时候再找 sh,在最近的一本 《Embedded Linux Primer》(英文版 Christopher Hallinan 著 人民邮电出版社 中文名《嵌入式 Linux 开发》)的第 11 章里面有介绍,举了一个最小嵌入式 Linux 的例子,先是以 init 方式启动,找不到 init 时会启动 sh,在另外一本《Building embedded Linux Systems》(中文名《构建嵌入式Linux 系统》 Karim Yaghmour 著 O'Reilly 出版)上面的第 6 章也有介绍。

作者: panly   发布时间: 2008-07-18

我们平时使用的发行版,大多是ramdisk的/init调用真正文件系统上的/sbin/init.

在kernel 2.6的参数中如果有initrd=XXXX, 并且initrd是cpio格式的话, 那么启动的时候内核只会运行ramdisk的/init. 这是写死在内核里面的.

作者: kevinlei   发布时间: 2008-07-20

Debian 有其原因,这个我知道,但其他发行版呢?

实在有点不解,为什麽硬要使用 ramdisk 这玩意?

作者: d00m3d   发布时间: 2008-07-23

怎么可能不用呢...发行版内核需要提供很多很多模块以支持各种硬件和各种功能, 但又不能全编译进内核, 那样内核太大了影响效率, 启动速度也会很慢很慢.

因此把这些模块编译成Module, 需要的时候再加载, 这样要合理的多.

问题是, 这些Module, 包括文件系统/硬盘等的驱动, 是存放在硬盘上的. 而要访问硬盘就必须要有这些驱动. 怎么办? 解决办法就是把一些必要的驱动打包成cpio, 由BOOTLOADER把这个cpio给读进内存, 再由内核在内存中把这个cpio解开成一个RAMDISK.

作者: kevinlei   发布时间: 2008-07-26

發行版只不過為了兼容性而採用,自己的系統當然是自己去 custom made 了,干嘛還要用?

俺的 LFS 及 Debian 系統從來不用。。。

作者: d00m3d   发布时间: 2008-07-26

initramfs里面的init是初始化脚本,/sbin/init是一个命令,二者是不同的

作者: vslm698   发布时间: 2008-08-05