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

Initrd文件制作的老方法

2008-06-23 14:38 295 查看
1.内核编译
       cd /usr/src/....
       make mrproper
      make menuconfig-----请注意一定加入RAM disk support 和initial RAM disk (initrd)             support 的支持

       make dep
       meke clean
      make bzImage
   没有加入对modules的支持,生成的bzImage文件在usr/src/linux/arch/x86_64/

2.busybox

#cp busybox-1.00.tar.gz /tmp/ada
#cd /tmp/ada
#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig

下面是需要编译进busybox的功能选项,其他的可以根据需要自选,但是同样不要太贪心.
General Configuration应该选的选项
Show verbose applet usage messages
Support for SUID/SGID handling里面的:
Runtime SUID/SGID configuration via /etc/busybox.conf

Build Options
Build BusyBox as a static binary (no shared libs)
这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作.

Installation Options
Don't use /usr
这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.

其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了.

配置好后退出并保存.
make
make install
编译好后在busybox目录下生成子目录_install,里面的内容:
drwxr-xr-x 2 root root 4096 11月 24 15:28 bin
lrwxrwxrwx 1 root root 11 11月 24 15:28 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin
其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接.

3.制作自己的root fs

1.目录结构
mkdir /mnt/myOS/rootfs
cd /mnt/myOS/rootfs
mkdir etc usr var tmp proc home root dev
其中etc,proc和dev是一定要建的,bin和sbin不用建,因为busybox中已经有了.
其他的可以象征性的建几个就可以了.

拷贝busybox
#cp -R /tmp/ada/busybox-1.00/_install/* /mnt/myOS/rootfs/

2.设备文件
我是直接在redhat系统/dev目录里cp的,方法如下:
#cp -R /dev/console ../rootfs/dev/
#cp -R /dev/null ../rootfs/dev/
#cp -R /dev/zero ../rootfs/dev/
你认为需要的都cp过来
(有的文章说  fd0,hda,ram,ram1,tty1,null,zero,loop1,fb0,fb,tty等是必备的--)

3,建立etc目录下的配置文件
我是直接拷贝busybox自带的例子    (这是我自己试出来的一种方法,不知道标准的怎么做--)
cp -R .../busybox-1.00/examples/bootfloppy/etc/*  /mnt/myOS/rootfs/etc

4.制作ramdisk映象文件
cd /mnt/myOS/
dd if=/dev/zero of=/dev/ram0 bs=1M count=4    ------初始化4M内存空间   //这一步可以改一改:否则img最大只能                                                                                            为4M, of=/tmp/myimg bs=1M count=32
mkfs.ext3 -m0 /dev/ram0                                        ------格式化为ext3
mkdir /mnt/ram
mount /dev/ram0 /mnt/ram                                    ------挂载到/mnt/ram
cp -R rootfs/* /mnt/ram                                           ------把rootfs写入内存
umount /mnt/ram
dd if=/dev/ram0 of=/mnt/myOS/ramdisk.img     ------把内存中的内容以映象方式取出
     ok,这个ramdisk.img就是我们的rootfs

1.kernel    一般命名为vmlinuz
  就是/usr/src/linux/arch/x86_64/boot/bzImage
2.rootfs    一般命名为initrd.img
   已经在这个目录了,就是ramdisk.img
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息