一:前言linux
本文主要經過裁剪現有Linux系統,打造一個屬於本身的Linux小系統,讓其可以裝載網卡驅動,並配置IP地址,實現網絡功能。bash
二:原理:網絡
linux系統的啓動流程:
ide
一、首先Linux要經過POST自檢,檢查硬件設備有沒有故障測試
二、若是有多塊啓動盤的話,須要在BIOS中選擇啓動磁盤spa
三、啓動MBR中的bootloader引導程序orm
四、加載內核文件xml
五、執行全部進程的父進程initblog
六、打印歡迎界面進程
在Linux的啓動流程中,加載內核文件時還須要藉助別外兩個文件:
1)initrd,是CentOS5上用內存模擬的磁盤設備
2)initramfs,是CentOS6上用內存模擬的文件系統
在啓程的流程中,init主要是用來作哪些操做的呢?
init經過調用/etc/inittab這個配置文件,而後再去執行/etc/rc.d/rc.sysinit的系統初始化腳本
三:操做步驟:
1:目標磁盤分區:
在系統中添加一個硬盤,並命名爲test,進行分區/dev/sdb1爲100M來作引導程序,/dev/sdb2爲1G用來裝根文件系統,把這兩個分區用mke2fs 進行格式化,而後進行以下操做,把/dev/sdb1掛載到/mnt/boot下,把/dev/dsb2掛載到/mnt/sysroot下:
[root@localhost ~]# mkdir /mnt/{boot,sysroot}
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/
二、安裝grub到目標磁盤
一個系統能啓動,就須要引導,因此咱們首先要安裝一個grub引導程序到咱們的新磁盤上,安裝grub引導程序主要有兩個命令,一個是grub-install,另外一個是setup,這裏最好使用grub-install來安裝。由於:
①grub-install會安裝grub引導第二階段的文件
②setup不會安裝第二階段的引導程序,是安裝引導信息到MBR
第二個須要注意的地方就是--root-directory=後面接的路徑應該是boot目錄所在的地方,而不是/mnt/boot,由於boot目錄在mnt下;目標磁盤是/dev/sdb
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdb
[root@localhost ~]# ls /mnt/boot/
grub lost+found
[root@localhost ~]# ls /mnt/boot/grub/
device.map iso9660_stage1_5 stage1 xfs_stage1_5
e2fs_stage1_5 jfs_stage1_5 stage2
fat_stage1_5 minix_stage1_5 ufs2_stage1_5
ffs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5
[root@localhost ~]#
安裝好了grub會發現grub.conf這個文件不在,後面再補
三、 將內核文件和initrd文件複製到/dev/sdb下的boot目錄中
[root@localhost ~]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinux
[root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img
[root@localhost ~]#
四、建立目標主機根文件系統
[root@localhost ~]# mkdir -p /mnt/sysroot/{bin,lib,media,proc,selinux,tmp,boot,etc/rc.d,lib64,misc,net,root,srv,usr,dev,home,mnt,opt,sbin,sys,var}
[root@localhost ~]# bash a1.sh
請輸入一個命令:bash
[root@localhost ~]# bash a1.sh
請輸入一個命令:ls
[root@localhost ~]# bash a1.sh
請輸入一個命令:cat
[root@localhost ~]# bash a1.sh
請輸入一個命令:ifconfig
[root@localhost ~]# bash a1.sh
[root@localhost ~]# ls /mnt/sysroot/
bin dev home lib64 media mnt opt root selinux sys usr
boot etc lib lost+found misc net proc sbin srv tmp var
[root@localhost ~]# cd /mnt/sysroot/bin/
[root@localhost bin]# ln -sv bash sh
"sh" -> "bash"
[root@localhost bin]# ls -l
總用量 1116
-rwxr-xr-x. 1 root root 904872 8月 27 01:57 bash
-rwxr-xr-x. 1 root root 45224 8月 27 01:57 cat
-rwxr-xr-x. 1 root root 109208 8月 27 01:57 ls
-rwxr-xr-x. 1 root root 77336 8月 27 01:58 mount
lrwxrwxrwx. 1 root root 4 8月 27 01:59 sh -> bash
附:命令移植腳本
#! /bin/bash
#
j="/mnt/sysroot"
read -p "請輸入一個命令:" i
if which $i &> /dev/null;then
a=`which $i`
else
echo " 命令有錯"
fi
b=`dirname $a`
[ -d ${j}${b} ] || mkdir -p ${j}${b}
[ -f ${j}${a} ] || cp $a ${j}${b}
for c in `ldd $a | grep -o "/[^[:space:]]\{1,\}"`;do
z=`dirname $c`
[ -d ${j}${z} ] || mkdir -p ${j}${z}
[ -f ${j}${c} ] || cp $c ${j}${z}
done
五、爲grub提供配置文件grub.conf
[root@localhost ~]# vi /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS
root (hd0,0)
kernen /vmlinux ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
~
[root@localhost ~]# sync (同步)
六、啓動測試
特別提醒:
四:裝載模塊,實現網絡功能
一、查看網卡信息:
[root@localhost ~]# lsmod | grep e1000
e1000 160643 0
二、查看網卡詳細信息:
[root@localhost ~]# modinfo e1000
filename: /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
version: 7.3.21-k8-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: 22ED5F24EA9709C19DA8084
alias: pci:v00008086d00002E6Esv*sd*bc*sc*i*
這裏查詢到了網卡模塊的路徑,把它複製到/dev/sdb的庫文件下:
[root@localhost ~]# mkdir /mnt/sysroot/modules
[root@localhost ~]# cp /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/modules/
3,init程序:
[root@localhost ~]# vi /mnt/sysroot/lib/init
#! /bin/bash
echo -e "\t \033[31m CentOS 6.6 \033[0m"
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /modules/e1000.ko
[ $? -eq 0 ] && echo -e "\t \033[33m e1000 \033[0m"
ifconfig eth0 192.168.10.10/24
ifconfig lo 127.0.0.0/8
mount -n -o remount,rw /dev/sda2 /
/bin/bash
[root@localhost ~]# vi /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS
root (hd0,0)
kernen /vmlinux ro root=/dev/sda2 selinux=0 init=/lib/init
initrd /initramfs.img