您的位置:首页 > 运维架构 > Linux

为linux建立最小的根文件系统

2009-12-22 21:31 363 查看
在编译内核时候,可以指定一个文件夹作为内核启动时候的根文件系统,linux中管这个文件系统叫做initramfs。

具体做法如下(以i386为例)

1.下载内核文件

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2
2.解压内核

bzip2 -d linux-2.6.26.tar.bz2 生成一个linux-2.6.26.tar文件,然后

tar xvf linux-2.6.26.tar

解压后,将有个linux-2.6.26文件夹存在

3.准备一个iniramfs文件系统的文件夹

在linux-2.6.26文件夹下建立一个文件夹 myinitramfs

写一个测试用的hello world,起名为hello.c,如下:

#include <stdio.h>

#include <unistd.h>

int main(int argc,char *argv[])

{

int i = 0;

while (1) {

printf("hello world (%d)\n",i);

}

return 0;

}

编译 gcc -static -o init hello.c

把init拷贝到myinitramfs文件夹下。

cp init myinitramfs/

由于需要显示文字,还需要在文件夹下准备console设备文件。

mkdir myinitramfs/dev

cp -a /dev/console myinitramfs/

4.编译内核

在linux-2.6.26文件下下,执行make help。

将看到很多帮助信息,其中有一项是 i386_defconfig

执行 make i386_defconfig,将生成一个.config文件。

为了把之前准备好的文件夹添加到内核配置文件中,还需要重新配置下config文件

make config

在 General Setup --->

Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD) [Y/n/?]

Initramfs source file(s) (INITRAMFS_SOURCE) [myinitramfs]

处,输入准备好的文件夹.

配置好后,在.config文件中会有如下一条定义

CONFIG_INITRAMFS_SOURCE="myinitramfs"

保存.config

make 编译内核

5.用qemu测试内核和initramfs

qemu -kernel linux-2.6.26/arch/i386/boot/bzImage -initrd linux-2.6.26/usr/initramfs_data.cpio.gz /dev/zero

initramfs_data.cpio.gz 这个文件是内核自动生成的,具体名字可能不同的系统或者内核有差异,但是后缀应该是.cpio.gz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: