怎样制作自己的linux

 要制作一个linux系统,首先我们要了解它的原理,启动的时候,首先是加电自检,然后再BIOS里面设定要读取的那块磁盘的MBR,加载bootloderbootloer加载相对应分区的内核,内核完成自身初始化后,挂载根文件系统,并装载init可执行文件,在inittab文件控制下,完成一系列的任务

    我们先格式化一个磁盘,并分区,这里分两个区,sdb1sdb2把第一个磁盘分区sdb1安装grub,要在sdb2上装内核,安装过grub之后,再把内核也加上,并作相应的配置,就可以启动一个系统了

首先,创建目录/mnt/boot,并把设备sdb1挂载到/mnt/boot下面

mkdir  /mnt/boot

mount  /dev/sdb1  /mnt/boot

下面先安装grub,(其实上篇已经介绍如何安装了,这里仅简述命令)

mkdir /mnt/boot/grub

cp  /usr/share/grub/i386-redhat/*  /mnt/boot/grub

grub

grub>  root (hd1,0)

grub>  setup (hd1)

再创建/mnt/sysroot目录,用来装载内核

mkdir  /mnt/sysroot (这里我们随便起一个目录名,然后把新的分区挂载到上面)

mount  /dev/sdb2  /mnt/sysroot/

ls /mnt/sysroot  查看是否已经挂载好,如有lost+found则表明挂在好新分区

Ls /boot/ 可以看到内核在里面,拷贝内核到/mnt/boot

cp  /boot/vmlinuz-$(uname -r)  /mnt/boot/vmlinuz (后缀名可以自己写)

mkdir  /tmp/linux 在临时目录里创建一个目录,用来寄存initrd文件

cd  /tmp/linux

zcat  /boot/initrd-$(uname –r).img | cpio –id 这个文件是归档压缩的文件,是用cpioy归档的,所以解压后,必须用cpio  -id 才能打开,

vim  init    编辑打开后的init文件

找到/dev/vol0/root  换成/dev/sda2

我们知道,本地磁盘sdb 可以当做另一个新主机的磁盘sda,所以grub已经在sda1上了,内核要在第二个磁盘分区上,所以在init文件中,要把/dev/vol0/root 修改为/dev/sda2

格式化第二个磁盘分区。mkfs –t ext3 /dev/sdb2

     然后再将其归档到指定目录下:

 find . | cpio –o –H newc –quiet | gzip -9 > /mnt/boot/initrd.gz(最后的归档名可以自拟)

     下面我们可以创建一些目录:

cd  /mnt/sysroot

   mkdir –pv  ./{etc/rc.d,bin,sbin,usr,proc,sys,var,tmp,lib,mnt,media,misc,opt,dev}

内核与grub已经有了,下面我们把initbash也拷贝过来

cp  /sbin/init  sbin/

   cp  /bin/bash  bin/

这时候, bashinitgrubinitrd都有了,你是不是以为大功告成了?我们可以用chroot这个命令测试一下,chroot  /mnt/sysroot  此命令是将后面的目录作为根来调用,可以在/mnt/sysroot环境下试验命令,结果…………嘿嘿!不行吧!

   那是因为少了命令所依赖的库文件,可以用ldd 这个命令查看可执行文件依赖的库文件

 ldd  /bin/bash

  ldd  /sbin/init

然后将以/lib开头的库文件拷贝到/mnt/sysroot/lib下,

下面还要配置一些文件:

   先编辑inittab文件,此文件里定义的有:

1 默认运行级别,2 系统初始化脚本指定 3特定级别目录下脚本指定 4定义ctrl+alt+del组合键的功能 5 定义USP电源故障或电源重新恢复是执行的进程 6启动虚拟终端 7 初始化图形界面

Vim etc/inittab

Id :3:initdefault 默认运行级别是3

Si::sysinit:/etc/rc.d/rc,sysinit  siid,运行级别省略是指所有级别,sysinit是系统初始化, 后面是所要运行的脚本,一般格式为:idrunlevelsactionprocess

 

编辑系统初始化脚本,这里我们可以随便写点

Vim  etc/rc.d/rc.sysinit

#!/bin/bash

Echo  –e  “\t Welcome to mylinux”

/bin/bash

保存退出后,修改权限:chmod +x etc/rc.d/rc.sysinit

最后别忘了,还有一个grub的配置文件呢!

Cd  grub/

V im  grub.conf

default=0

timeout=5

title  mylinux

    root(hd0)

    kernel /vmlinuz ro root=/dev/sda2

    initrd  /initrd.gz

保存退出,然后sync ,同步到磁盘数据这时候,算是完成了,可以启动你那个新的linux了。

怎么样,是不是有种小小的成就感了,其实这只是小试牛刀,如果你想了解更多有关linuxknowledge,请继续关注我的博客,会不断更新哦!