1.1完成无模块支持的Linux内核订制
1.2生成的新内核在CentOS6.2虚拟机中启动成功,并可登入步入系统
2原理2.1Linux系统启动过程
BIOS->MBR->OSLoader->Kernel->initrd->ApplicationManager->Application
2.2initrd.img的作用
Ø作为临时根文件系统的载体
Ø加载必要的驱动便于使内核可以访问真正的根文件系统
Ø挂载真正的根文件系统
Ø进行根切换操用真正的根文件系统作为根启动
2.3grub.config文件
Ø系统引导程序的配置文件
Ø加载传输控制到操作系统的内核
配置文件说明:
title-引导条目的名称。一般使用操作系统的名称做为标示
root-操作系统内核和引导文件所在的c盘分区。(hd0,0)表示第一块硬碟的第一个分区,(hd0,2)表示第一块硬碟的第3个分区,依次类推。
kernel-系统内核及boot命令用到的参数。
initrd-系统引导程序
2.4剖析
要完成无模块支持的Linux内核的订制就是不使用initrd.img,把系统所必须的c盘驱动和文件系统等的驱动编译到系统的内核中,之后更改系统的配置文件引导系统找到系统内核所在c盘的位置,最后完成系统的引导过程,因而顺利的步入并登入系统。
3过程
3.1配置menuconfig
Ø去勾选模块支持
Ø加载必要的驱动程序:主要是加载c盘的驱动和文件的驱动以及一些一般的设置
3.2编译内核
在内核源码目录执行make命令,编译生成压缩的内核镜像bzImage,适当剪裁后的内核大小为15M
3.3安装内核
把生成的bzImage拷到/boot目录下重命名为vmlinuz-3.2.18
3.4更改配置文件
Ø这儿把“root=UUID=….”手动更改成了/dev/sdb2
Ø没有指定外部模块的位置
3.5重启选择新的内核重启
3.6继续剪裁,剪裁以后的内核和原先的内核做对比
4碰到的问题和解决4.1Linux网路配置
刚开始学习Linux所以网路配置一窍不通,但是对虚拟机的桥连,NAT,host-only等方法也不是很了解,即使虚拟机一开始的时侯手动才能上网,并且后来不能连上网了。
bridge:虚拟网卡和本机化学网卡是一个数学网上,才能联接内网,虚拟机内部和外部要配成和外部主机相同网关的IP
hostonly:虚拟网卡VMnet1是一个数学网上,不能联接内网
NAT:和虚拟网VMnet8是一个数学网上,映射成主机的IP和外部联接,网段只能配成192.168.10.2。
我采用的是桥连的形式内部IP配好以后还需配置网段和DNS服务器
routeadddefaultgw192.168.10.254
在/etc/resolv.conf种添加nameserver8.8.8.8
不过如今还有一点问题就是在实验室用网线连时虽然我的配置文件上面写了BOOTPROTO配成dhcp其实也不能手动分配IPlinux内核定制,并且在304用seedclasswifi的时侯就可以。这个问题暂时还没有解决,每次自动配置也没问题。
4.2KernelPanic
没有意外,第一次编译的时侯也遇见了kernelpanic问题
这儿是root的值没有传对,也怪自己上课没有认真听讲,仔细看了讲义以后才发觉这个问题
把root=UUID删掉改成root=/dev/sda1,不过还是遇见了同样的问题。
这说明内核早已加载成功,只不过内核没有办法辨识c盘中的内容,于是我把配置文件上面关于SCSI驱动所有选项基本上都加起来了,重新编译,还是不行。
前面以为是加的驱动不全,于是在dmesg中各类检索,重新配置重新编译,最后还是不行。直至明天早晨有朋友告诉应当让root=/dev/sdb2。
在网上见到有人说因为Linux内核自身的缘由c盘的设备文件例如/dev/sda/dev/sdb等等情况下会发生混乱,因为是Linux内核自身的问题所以也没有办法解决,不禁泪流满面。
不过仔细想想还是对Linux认识的不够深入,在网上找资料的时侯也没有哪些明晰的方向,所以卡在这个点以后就很难再前进了,加上内核编译的时间有相对而言比较长,所以很容易很是锻练人的耐心啊。不过问题终于是成功的解决了,只是新生成的内核有点大,15M,剪裁的还不够。还须要进一步的配置
4.3Putty下苦恼的Ctrl+S
使用Putty联接LinuxServer的时侯,时常不留神按了Ctrl+S——尤其是在用vim编辑的时侯,总是习惯性的按这个快捷键来保存,而且刹那间整个会话就没有响应了。刚开始的时侯以为是putty死掉了,所以每次都是重新启动,重新联接LinuxServer。也没有意识到是由于按了这个快捷键才遇见的。
实际上在使用putty时ctrl+s中止屏幕输出(即停止回显),我们敲的内容仍然有效,只是看不见而已,这个快捷键的作用是当现实的内容很快时可以用ctrl+s锁定。实际上我们只要按一下ctrl+q就可以解锁了。
4.4SElinux延时
这个问题也只有在启动新的内核失败的时侯会发生,假如启动新的内核,接着去启动CentOS原先的内核都会出现这些现象。
官方给出的解释如下:
3.AstheLinuxrootuser,runtherebootcommandtorestartthesystem.Duringthenextboot,filesystemsarelabeled.ThelabelprocesslabelsallfileswithanSELinuxcontext。
不过这并不影响系统的启动,过了一段时间以后系统手动重启,又恢复正常,只是启动的时间比平时要久一点。
4.5Makelocalyesconfig用不了
自己采用默认的形式稍为的裁剪以后内核大小为15M,之后自己一个一个的去对照每位选项去勾选要不要linux驱动下载,并且因为自己对好多的硬件设备根本就不认识,所以好多东西选择也是很苦恼。并且剪裁的效率其实也很低。
从网上见到可以使用makelocalyesconfig和makelocalmodconfig来精简内核的剪裁linux删除命令,并且我在我的源码目录下输入makelocalyesconfig命令的时侯出现的结果是这样的现象,提示好多的modules找不到,使用makeallnoconfig命令以后还是有这样的现象。没办法我又把原先的linux3.2.18的源码又解压了一份下来,执行makelocalyesconfig就可以了。
虽然第一次用这个命令的时侯是在我自己编的3.2.18的内核上面,是没有加载内核模块的linux内核定制,自然没有办法加载modules,并且我切换到原先的系统的内核的时侯还是没有办法运行makelocalyesconfig命令。所以这个问题现今还没有找到缘由。
4.6编译速渡过慢
不得不提一下本次实验的编译,因为是在虚拟机下边,但是笔记本的配置也不是挺好,所以编译的速率非常的慢,第一次编译的时侯大约编了3个多小时,每次都耗费了大量的时间来编译。笔记本也常常是动不动就是CPU使用率90%几,显存使用率90%几。
一开始不晓得make是可以增量编译,每次都是恶狠狠的makeclean之后make这样起初编译过的模块就又编译了一次。
Make–j4选项,使用了多线程以后编译的速率显著的推进了。
把虚拟机的处理器换成了4核以后速率也有一定程度的提高。
5实验总结
通过此次实验,加深了我对Linux开机过程的理解,让我明白了先前如此简单的开机过程也有如此大的学问在里头,原先在Windows下边总是直接开机,死机就哪些都不管了,所以弄明白了这一系列的流程还是有一点小小的成就感的。
熟悉了Linux的好多常用的指令,和Linux文本交互的的模式:尽管之前也接触过Linux并且那仅仅局限在玩的阶段,真真使用上去还是有好多不晓得的,不过周围如此多朋友一起在努力,效率还是挺高的,不懂的就去man一下,google一把,或则是问问周围的朋友、老师。问题常常才能很快的得到解决。逐渐地认为在Linux下边那样一种交互模式效率挺高的,不像在windows下——图形化的界面其实改善了用户的体验,并且常常专注度显得不高了。
关于学习技巧,钟老师说的对——不要害怕遇到问题,遇见问题越多的人有机会学到更多的知识,我自己曾经总是怕碰到问题,总是对自己没有信心,害怕自己解决不好这个问题,害怕自己会引入更多的问题。虽然如今认为是自己曾经思索问题的方式不对,遇见问题的时侯总是习惯性的直接去找答案,习惯性的去苦恼,而不是理智的思索——为什么会出现这个问题?这个问题是如何形成的,他人见到的问题和我见到的问题有哪些不同,为何他人才能成功解决,而我不能。也就是说我的问题解决不是构建在理智的逻辑之上,而是带有很大的撞大运的成份在上面。这对于技术人员来说,无疑是很可怕的,我们今后要碰到的问题还有好多。假如不能有一个挺好的思维的形式,如何才能以不变应万变?
做实验的过程中不同步骤互相之间的牵扯要少,这样做实验的时侯才能愈发顺利,从简单到复杂,这样逐渐的构建一个完整的知识体系,也有利于问题的解决和学到更多的知识。