制作微型linux

 出于linux是开源的,因此我们可以随便内核中的参数,这次制作一个最基本的操作系统且带网络功能,所有步骤都是用脚本实用。

 1,先解释下Linux启动的流程:

  开机自检post-->bios--> bootloader(mbr)-->kernel(initrd)-->init进程

(1)bios是一个软件嵌套在coms芯片上,通过bios去调整coms一些参数。

(2)bootloader:是一个引导程序,目的在有多个系统时,可以选择进入哪个系统。这里以grub为主。

(3)kernel:内核,linux的内核里面已经编译里许多常用的硬件驱动。而(initrd)的作用是辅助kernel,因有些硬件的驱动程序在kernel没有,这时就要依靠initrd。当然如果kernel能够驱动init进程所在的硬件,initrd也没存在的必要。

(4)init:init进程并不完成具体的工作,只是协调其它进程,也就是其他进程的父进程。这时用户并不能直接操作kernel,因此必须提供一个接口给用户,而linux默认是bash。init二进制程序要能够运行,必须依赖于某些共享动态库。因此必须给程序提供库文件,而库文件根据FHS的规定,一般主要放置在/lib ,/usr/lib这两个目录下。当然bash也是二进制程序,也必须依赖动态共享库。程序当然会提供配置文件。

2,根据上面的解释:当我们自己制作一个linux时,必须包括

(1)bootloader(grub),kernel(initrd),init,bash。

(2)配置文件:grub.conf,/etc/inittab

(3)库文件:用ldd查看二进制程序依赖的库,并复制到对应的目标目录下。

(4)脚本:/etc/rc.d/rc.sysinit(这个脚本对系统做基本的初始化,也是给用户提供一个可操作的环境)

 3,实验步骤:

(1)此实验基于redhat 5.8 enterprise,虚拟机virtualbox。

(2)在已经正常运行的虚拟机中添加一块新硬盘,并分好区。

(3)由于initrd-2.6.18-308.el5里面的设置,sdb1必须挂载在某目录下/boot目录下,而/可以自由决定,在这里我分别挂载在/mnt/boot /mnt/sysroot下

(4)在sdb上创建目录,这些目录在原系统上也存在,当然有些是可以不用创建,但是为了统一,/sys /proc /dev这三个目录是必须要存在。

(5)安装grub

(6)提供kernel与initrd

修改init文件

(7)提供应用程序

bash,ls,mkdir,cp命令的移值完全一样

(8)切换到/mnt/sysroot测试是否正常

(9)建立配置文件

建立grub.conf在/mnt/boot/grub/grub.conf

建立inittab 在/mnt/sysroot/etc/inittab

建立脚本/mnt/sysroot/etc/rc.d/rc.sysinit

建立脚本/mnt/sysroot/etc/rc.d/shutdown

 

到此已经结束,附件为脚本,全程自动化。

 

你可能感兴趣的:(linux,制作微型)