制作linux小系统--linux启动详解

1、添加宿主机一个5G大小的硬盘,注意在添加新硬盘的时候必须选择“Store virtual disk as a single file”,否则,也会出现内核恐慌kennel panic。


2、创建两个分区,一个大小为200M的分区用于挂载到/mnt/boot目录下,一个大小为4G的分区挂载到/mnt/sysroot下用作系统的根分区。
fdisk /dev/sdb
partprobe /dev/sdb #重读分区表
3、格式化分区
mke2fs -j /dev/sdb1   #200M
mke2fs -j /dev/sdb2   #4G

4、挂载分区
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/ssyroot

5、安装grub到/mnt/boot下,请使用grub-install方式安装,这种安装会安装两段grub程序。
grub-install --root-directory=/mnt /dev/sdb
#这个缺少grub.conf文件,待会回来补充

6、将内核和initrd复制到/mnt/boot目录下
cp /boot/vmlinuz-2.6.18-194.el5 /mnt/boot/vmlinuz
cp /boot/initrd-2.6.18-194.el5.img /mnt/boot/initrd

7、创建根分区所需要的目录文件
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}

8、移植命令和库文件到目标根文件系统中
1)移植bash命令
cp /bin/bash /mnt/sysroot/bash
cd !$
ln -sv bash sh
2) 移植init命令
cp /sbin/init /mnt/sysroot/init

3)移植bash命令的库文件
ldd /bin/bash  #查看bash命令所需要的库文件
   linux-gate.so.1 =>  (0x009db000)   #这个是开头的库文件,不需要cp,其他的都cp到/mnt/sysroot/lib目录下
   libtermcap.so.2 => /lib/libtermcap.so.2 (0x0092d000)
   libdl.so.2 => /lib/libdl.so.2 (0x008fe000)
   libc.so.6 => /lib/libc.so.6 (0x007b6000)
   /lib/ld-linux.so.2 (0x00798000)
4)移植init命令的库文件
    ldd /sbin/init
   linux-gate.so.1 =>  (0x0092c000)
   libsepol.so.1 => /lib/libsepol.so.1 (0x00967000)
   libselinux.so.1 => /lib/libselinux.so.1 (0x009af000)
   libc.so.6 => /lib/libc.so.6 (0x007b6000)
   libdl.so.2 => /lib/libdl.so.2 (0x008fe000)
   /lib/ld-linux.so.2 (0x00798000)
9、为init提供配置文件和初始化脚本
1)cd /mnt/sysroot/etc/
vim inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit

2)提供rc.sysinit脚本
#!/bin/bash
#
echo -e "\t Welcome to my linux"
/bin/bash

   为上面两个脚本赋予x权限
chmod +x inittab
chmod +x rc.sysinit

10、为grub提供配置文件grub.conf
vim grub.conf
default=0
timeout=5
title fish soft-linux
root (hd0,0)  #标识内核所在分区
kernel /vmlinuz-soft ro root=/dev/sda2
initrd /initrd-soft.img
~                          
11、目标机也就是添加硬盘然后移动测试

使用之前在宿主机上添加的那块硬盘


12补充点:编辑initrd
gzip -9 1.xpm
cp 1.xpm.gz /mnt/boot/grub
vim grub.conf
splashimage=(hd0,0)/1.xmp.gz


cd /tmp/myboot
zcat /boot/initrd-2.6.18-194.el5.img |cpio -id  #展开initrd
vim init
mkrootdev -t ext3 -o defaults,ro /dev/sda2

find . | cpio -o -H newc --quiet | gzip -9 > /mnt/boot/initrd-soft.img #cpio -o表示归档,重新压缩成gz格式的initrd


注:这里只是形成一个简单的,粗糙的linux

你可能感兴趣的:(制作小linux)