MiniLinux的制作
一.MiniLinux的制作就要涉及到内核的裁剪和重新编译。 回顾内核的相关知识
内核设计主要分为两种:(内核多为C语言研发)
单内核设计:相当于把所有的功能都集成与一个程序中,通过线程实现。
一个功能的崩溃会导致整个内核无法使用。Linux采用此内核。
微内核设计:每个功能都有一个独立子系统,相互调配使用。
内核各个服务之间的调用涉及进程间的通信,比较复杂,且效率低。Windows采用此内核。
Linux内核虽然是基于单内核的但是,经过这么多年的发展,也具备微内核的一些特征。(体现了Linux实用至上的原则)
Linux内核特点:
1.支持动态装载和卸载内核模块,利于驱动的后期维护
2.支持对称多处理(SMP)
3.内核可以抢占,允许内核运行的任务有优先执行的能力
4.不区分线程和进程
二.关于Linux系统开机启动流程相关知识
CentOS系统开机
CentOS 6开机:
POST-->BootSequence(BIOS)-->BootLoader(MBR)-->kernel(ramdisk)-->rootfs-->/sbin/init
CentOS 7开机:
POST-->BootSequence(BIOS)-->BootLoader(MBR)-->kernel(ramfs)-->rootfs-->/sbin/systemd
CentOS 6和CentOS 7开机有一些不同,见其他文章。
三.关于MiniLinux制作
1.首先内核重新编译
编译前的准备环境:
#yum groupinstall "Development Tools" "Server Platform Development"
下载所需要的内核版本,我所下载的是3.10.105(www.kernel.org)
解压内核至/usr/src 目录中。
软链接内核文件至 /usr/src/linux 中。
#cd /usr/src/linux #切换到内核的目录中
#make allnoconfig #清空编译规则,回归原始的内核状态
#make menuconfig #选择编译的选项,因为是miniLinux我是全部把内核编译进核心,
而不是编译成模块。
编译时选择的基本模块与功能介绍
1.[*] 64-bit kernel #编译64位内核
2.Enable loadable module suppose #支持内核的装载与卸载
[*] module unloding
3.Bus options #相关PCI接口支持
4.Processor type and features #关于处理器版本选择,选择自己处理器合适的
5.Device drivers #关于硬盘,网卡各设备的驱动lspci查看系统设备信息(自己选择)
6.File Systems #文件系统支持(自己选择)
7.Excutable file formates/Emulattions #支持文件可执行文件的格式(自己选择)
8.Networking Support #网络服务支持
#make -j # bzImage #指定几个核心编译,并且只编译内核文件
2.编译后的准备工作
因为是使用虚拟机,所以添加一块新硬盘在虚拟机中。2G左右即可,作为miniLinux的启动虚拟磁盘。
#fdisk /dev/sdb #分区硬盘,我的硬盘名称为sdb
#mke2fs -t ext4 /dev/sdb1 #格式化两块硬盘
#mkdir /mnt/{boot,sysroot} #创建两个目录,作为miniLinux系统的根分区和boot分区
#mount /dev/sdb1 /mnt/boot #挂载boot分区
#group-install --root-directory=/mnt /dev/sdb #安装grub到硬盘中
#mount /dev/sdb2 /mnt/sysroot #挂载系统根分区
#cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot #复制编译的内核至boot分区
#sync #同步到磁盘中
#vim /mnt/boot/grub/grub.conf #新建grub配置文件,grub安装成功后,/mnt/boot目录下存在grub目录
default=0
timeout=3
title MiniLinux(3.10)
root(hd0,0)
kernel /bzImage ro root=/dev/sda init=/sbin/init
做到这一步没有错误,系统就可以跑起来了,但是没法运行。缺少init文件。
3.相关文件的编写
有时间再写,实际上,相关的配置文件,就按照正常的系统的配置文件写,就可以。但是还是会完善这篇文章的。