启动和内核管理 :
CentOS 5和6的启动流程
服务管理
Grub管理
自制Linux
启动排错
编译安装内核
-
CentOS 5和6的启动流程
Linux系统的组成部分:内核+根文件系统
内核(kernel):进程管理,内存管理,完了协议栈,文件系统,驱动程序,安全功能
根文件系统(rootfs):程序和glibc
库:函数集合,function,调用接口(头文件负责描述)
过程调用:proceduce,无返回值
函数调用:function
程序:二进制执行文件
运行的系统环境可分为两层:内核空间,用户空间
用户空间:应用程序(进程或线程)
内核空间:内核代码(系统调用)
内核设计流派:
单内核设计(monolithic kernel):把所有功能集于同一个程序;
Linux
微内核设计(micro kernel):每种功能使用一个单独的子系统实现
Windows,solarls
Linux内核特点:
支持模块化:.ko(内核对象kernel object)
如:文件系统,硬件驱动,网络协议…
支持内核模块的动态装载和卸载
组成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根文件系统
CentOS5/boot/initrd-VERSION-release.img
CentOS6,7:/boot/initramfa-VERSION-release.img
模块文件:/lib/modules/VERSION-release
CentOS系统的启动流程:
1.PSOT:加电自检,是BIOS功能的一个主要部分。负责完成对CPU,主板,内存,硬盘子系统,
显示子系统,串并行接口,键盘。CD-ROM光驱等硬件情况的检测
ROM:BIOS,Basic Iuput Output System,保存着有关计算机系统最重要的基本输入输出
程序,系统信息设置,开机加电自检程序和系统启动自举程序等
RAM:CMOS互补金属氧化物半导体,保存各项参数的设定
2.Boot Sequence:
按次序查找引导设备,第一个引导程序的设备为本次启动设备
bootloader:引导加载器,引导程序
Windows:ntloader,仅是启动OS
Linux:
LILO:Linux LOader
GRUB:Grand Uniform Bootloader
centos 5:GRUB 0.x==>Grub Legacy(现名)
centos 7: GRUB 1.x==>Grub2(现名)
功能(Linux):提供一个菜单,运行用户选择要启动的系统或不同的内核版本;把用户选定的
内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。
MBR:Master Boot Record
512bytes:
446bytes:bootloader
64bytes:分区别
2bytes:55AA
GRUB:
primary boot loader:1st stage 1.5 stage
secondary boot loader:2nd stage,分区文件
stage1:/boot/grub中的stage1的文件大小为512字节,它是引导扇区中引导程序(前446字节为引导程序)的备份文件,
功能是用来装载 stage1.5或stage2
stage1.5:因为stage2较大,通常都是放在一个文件系统当中的,但是stage1并不能识别文件系统格式,所有才需要stage1.5
来引导位于某个文件系统当中的stage2,根据文件系统格式的不同,stage1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5
分别识别的ext和fat的文件系统格式,我的系统上stage1_5如下:
但是,当stage1加载1.5时,原则上是不认识ext文件系统的,应该也是无法找到1.5程序的,而实际上在安装
grub时,程序已经把1.5程序写到磁盘最前面的32k中,因为紧连着MBR的一段磁盘空间通常是空白无用的,
grub就把1.5程序写到这个地方,这个地方没有文件系统,stage1程序可以直接去加载1.5
stage2:grub能让用户以选项方式将OS加载,改变参数,修改选项等,这些都是stage2程序的功能。stage2可以去
获取grub.conf等文件内容
3.kernel
自身初始化:
1.探测可识别的所有硬件设备
2.加载硬件驱动程序;(有可能会借助ramdick)
3.以只读方式挂载根文件系统
4.运行用户空间的第一个应用程序:/sbin/init
init程序的类型:
CentOS 5-:SysV init
配置文件:/etc/inittab
CentOS 6 :Upstart
配置文件/etc/inittab
/etc/init/*conf
CentOS 7 :Systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
ramdisk:
Linux内核的特性之一:使用缓冲和缓存来加速磁盘上的文件访问
ramdisk—>ramfs 提高速度
CentOS 5:initrd,
工具程序:mkinitrd
CentOS 6 7:initramfs
工具程序:dracut,mkinitrd
总结:
系统初始化流程(内核级别):POST–>Boot Sequence(BIOS)–>BootLoader(MBR)–>kernel(ramdisk)–>rootfs(只读readonly)–>/sbin/init()
/sbin/init:
CentOS 5-:SysV init
运行级别:为系统的运行或维护等目的而设定的机制
0-6:7个级别
0:关机。shutdown
1:单用户模式(single user),root用户,无须认证;维护模式
2:多用户模式(multi user),会启动网络功能,但不会启动DNS,维护模式
3:多用户模式(multi user),完全功能模式;本文界面
4:预留级别;目前无特别使用目的,但习惯同3级别功能使用
5:多用户模式(multi user),完全功能模式;图形界面
6:重启模式,reboot
默认级别:3,5
级别切换:init #
查看级别:runlevel ; who -r
命令显示的第一个数字为上一次的运行级别,第二个数字为当前运行级别
配置文件:/etc/inittab
每行定义一种action以及与之对应的process
id:runlevels:action:process
id:一个任务的标识符
runlevels:在哪个级别启动此任务;#,###,也可以为空,表示使用默认级别
action:在什么条件下启动此任务
process:任务
action:
wait:等待切换此任务所在的级别时执行一次
respawn:一旦此任务终止时,就自动重新启动之
initdefault:设定默认运行级别;此时process省略
sysinit:设定系统初始化方式,此处一般指定/etc/rc.d/rc/sysinit
例如;
l0:0:wait:/etc/rc.d/rc3
表示去启动或关闭/etc/rc.d/rc3.d/目录下的服务器脚本所控制服务;
K*:要停止的服务;K##*。优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭依赖的服务
S*:要启动的服务;S##*。优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动
rc脚本:接受一个运行级别数字为参数
脚本框架:
for srv in /etc/rc.d/rc#.d/K*;do
$srv stop
done
for srv in /etc/rc.d/rc#.d/S*;do
$srv start
done
/etc/init.d/*(/etc/rc.d/init.d/*)脚本执行方式;
#/etc/init.d/SRV_SCRIPT{start|stop|restart|status}
#service SRV_SCRIPT{start|stop|restart|status}
chkconfig命令:管控/ect/init.d/每个服务器各级别下的启动或关闭状态
查看:chkconfig –list [name]
添加:chkconfig –add name
能被添加的服务的脚本的定义格式之一
#!/bin/bash
#chkconfig:LL NN NN
#Description:info
删除:chkconfig -del name
修改指定的链接类型:
conkconfig [–level LEVELS] name <on|off|reset>
–level LEVELS:指定要控制的级别,默认为2345
创建服务脚本
将以前写的一个脚本稍微修改下,变成一个服务脚本,
将此脚本移至/etc/init.d目录下
#!/bin/bash #chkconfig:35 98 12 file=/var/lock/subsys/pingxiong start(){ if [[ -f $file ]];then echo "$file is exsit" else touch $file&&echo "start finshed" fi } stop(){ if [[ -f $file ]];then rm -rf $file &&echo "stop finshed" else echo "No such file" fi } status(){ if [[ -f $file ]];then echo "$file is running" else echo "$file is stoped" fi } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "you should input {start|stop|restart|status}" esac
使用chkconfig命令添加此脚本
添加成功后在/etc/rc.d目录下已自动增加了相应的软链接文件
服务器启用和关闭的优先级也自动对应(12 98)
可以用service pingxiong {start|stop|restart|status}启用或关闭
这个简单的脚本就算成功了(虽然没什么用)
xinetd管理的服务
service命令:手动管理服务
service服务 start|stop|stop|restart
瞬态(Transient)服务被xinetd进程所管理
进入的请求首先被 xinetd代理
配置文件:/etc/xinetd.conf,/etc/xinetd/<service>
与libwrap.so文件链接
用chkconfig控制的服务
chkconfig SERVICE on|off
注意:正常级别下,最后启动的一个服务S99local没有链接值/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc/.local(/etc/rc.;local)
脚本;因此,不便或不需写为服务脚本的程序期望能开机启动运行时,直接放置于此脚本文件即可
tty1:2345:respawn:/usr/sbin/mingetty tty1
….
tty6:2345:respawn:/usr/sbin/mingetty tty6
1.mingetty会调用login程序
2.打开虚拟终端的程序除了mingetty之外,还有诸如getty等
系统初始化脚本;/etc/rc.d/rc.sysinit
1.设置主机名
2.设置欢迎信息
3.激活udev和selinux
4.挂载/etc/fatab文件中定义的所有文件系统
5.检测根文件系统,并以读写方式重新挂载根文件系统
6.设置系统时钟
7.根据/etc/sysctl.conf文件的设置,来设置内核参数
8.激活lvm和软raid设备
9.激活各swap设备
10.加载额外设备的驱动程序
11.清理操作
总结:(用户空间的启动流程):/sbin/init(/etc/inittab)
设置默认运行级别–>运行系统初始化脚本,完成系统初始化–>关闭对应级别下需要停止的服务,启动对应级别下需要启动的服务
–>设置登录终端[–>启动图形终端]
CentOS 6 :
init程序:upstart,但依然为/sbin/init。其配置文:
/etc/init*.conf/inittab(仅用于定义默认运行级别);
注意:*.conf巍峨哦upstart风格的配置文件
CentOS 7 :
init程序:systemd;配置文件:/usr/lib/systemd/system/*, /etc/systemd/system/*
完全兼容SysV脚本机制;因此,service命令依然可用不过,建议使用sysytemctl命令来控制服务
sysytemctl {start….} name [.service]
示例:破解CentOS5 和6 的root口令
我们以往老师给我们的redhat 5为例
1.进入开机界面时按回车进入到如下界面
2.键入a键进入选择修改内核参数,进入到如下界面
3.在命令行中输入空格加数字1,出现如下界面
4.无须输入帐号密码进入系统中,且为root用户登录的,将密码修改为自己的密码,然后重启系统
5.成功登录进了redhat 5 系统(密码破解成功)
grub legacy
CentOS 6启动流程:
POST–>Boot Sequence(BIOS)–>Boot Loader–>kernel(ramdisk)–>rootfs–>switchroot–>/sbin/init
–>(/etc/inittab,/etc/init/*.conf)–>设置默认运行级别–>系统初始化脚本rc.sysinit–>关闭或启动对应级别的服务
–>启动终端[–>图形终端]
GRUB:Grand Uniform Bootloader
centos5: GRUB 0.x ==>Grub Legacy(现名)
centos7 :GRUB 1.x===>Grub2(现名)
grub legacy:
stage1:mbr
stage1.5:mbr之后的扇区,让stage1中的bootloader能识别是stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub)
配置文件:/boot/grub/grub.conf <— /etc/grub.conf
stage及内核等通常放置于一个基本磁盘分区;
功用:
1.提供菜单,并提供交互式接口
e:编辑模式,用于编辑菜单
c:命令模式,交互式接口
2.加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
3.为菜单提供了保护机制
为编辑模式进行认证
为启用内核或操作系统进行认证
如何识别设备:
(hd#,#)
hd#:磁盘编号,用数字表示;从0开始编号
#:分区编号,用数字表示;从0开始编号
(hd0,0):第一个磁盘的第一个分区
grub的命令行接口
help:获取帮助列表
help keyword:详细帮助信息
find (hd#,#0) /path/to/somefile
root (hd#,#)
kernel /path/to/kernel_file:设定本次启动时用到的内核文件;额外还可以添加许多内核支持的的cmdline参数
例如:max_loop=100 selinux=0 init=/path/to/init
initrd /path/to/initramfs_file:设定为选定的内核提供额外文件的ramdisk
boot:引导启动选定的内核
手动在grub命令行接口启动系统
第一步:在此界面键入c键,
第二步:在命令行中输入命令
grub> root(hd#,#)
grub>kernel /vilinuz-version-release ro root=/dev/device
grub>initrd /initramfs-version-release.img
grub>boot
第三步:进入到登录界面
grub legacy配置文件
/boot/rgub/grub.conf
我的grub legacy配置文件做过修改了,和原装的有一些配置没了
参数如下:
default=#:设定默认启动的菜单项;菜单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜单背景图片文件路径
hiddenmenu:隐藏菜单
password [–md5] STRING:启动菜单编辑认证
tutle TITLE:定义菜单项“标题”,可出现多次
root(hd#,#):grub查找stage2及kernel文件所在设备分区;为”grub“的根
kernel:/PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd:/PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件
password [–md5] STRING:启动选项的内核或操作系统是进行认证
grub加密
grub-md5-crypt命令
破解root口令:
启动系统时,设置其运行级别为1
进入单用户模式:
1.编辑grub菜单(选定要编辑的title,而后使用e命令)
2.在选定的kerne后附加1,s,S或single都可以
3.在kernel所在行,键入”b“命令
和上面的破解案例的效果是一样的,这里就不演示了
grub安装
安装grub:
1.grub-install
安装grub stage1和stage1.5到/dev/DISK磁盘上,并复制GRUB相关文件到DIR/boot目录下
grub-install -root-directory=DIR /dev/DISK
2.grub
grub> root (hd#,#)
grub> setup(hd#)
实验1:破坏stage1,然后修复
1.要破坏stage1,只需要破坏第一磁盘的第0扇区的前446字节即可
2.reboot重启系统,因为引导程序被破坏了,所以系统直接进入了光盘引导界面,我们选择救援模式(Rescue installed system)
3.在进入到就救援模式系统中,会有一些列的选项,例如选择语言,是否开启网络等等,这里就
一一截图了,一系列选项选完了进入到如下界面
4.因为此时是光盘引导登录的,要到root环境下,需要切换到/mnt/sysimage
5.安装grub,可将grub stage1安装到磁盘上,如出现以下Unknown partition table signature
不要慌(第一次遇到慌得要死,到处找错误….),这是正常现象,耐心等待即可!
6.输入exit两次,退出选择重启
7.到了登录界面,修复成功
实验2:破坏stage1.5,然后修复
-
前文有讲到stage1.5在第一磁盘的第0扇区的前32k中,而MBR占用了前面的512字节,
所以需要破坏512字节后的内容即可
2.reboot重启,stage1.5被破坏了,系统界面如下,我们切换到光盘引导界面
3.选择Rescue installed system
4.默认选择英文
5.默认选择us键盘
6.是否开启网络接口,可根据自己的实际情况选择,我这里选择不开网络接口
7.进入到Rescue界面,选择Continue
8.系统挂载在/mnt/sysimage下,如果要进入到root环境,运行chroot /mnt/sysimage命令
9.系统已挂载在/mnt/sysimage下
10.三种选项:shell 进入命令行模式;fakd是诊断模式;reboot重启电脑;我们这里选择shell
11.进入shell界面,切换到root环境
12.安装grub,可将grub stage1安装到磁盘上,使用命令:grub-install /dev/sda
13.输入两次exit退出,选择reboot重启
14.进入登录界面,修复成功
实验3:删除boot目录
-
删除/boot目录下内容,然后卸载/boot,然后删除/boot目录
2.进入如下界面。
3.重启选择光盘引导进入救援模式,上面两个例子,已经详细讲述了这么进入救援模式,限于篇幅,
在这里就不重复写了,直接进入到救援模式界面(详细步骤参照上面案例)
4.因为这里删除的stage2,所以只使用grub安装时无法修复的,内核也修要重新安装,要安装内核需要先挂载光盘
在安装内核的时候加上–force选项强制安装
5.内核安装好了 ,安装grub
6.编辑/boot/grub/grub.conf文件,保存退出
7.键入exit两次,选择reboot重启系统
8.进入登录界面,登录成功
实验四:删除/boot目录和/etc/fatab文件,然后修复系统!
1.删除/boot和/etc/fstab,然后重启系统
2.进入到救援模式,详细步骤就不写了因为/etc/fstab删了,各分区没有自动挂载,所有我们首先要挂载分区
但是我们的分区使用逻辑卷做的,所以要先找到逻辑卷并启用!
3.在生产环境中,我看你不知道显示的分区中,那个是/,/boot,/usr…所有我们首先将这些分区随便挂载在一个目录下,然后通过目录访问
磁盘分区内容来判断此分区究竟是什么分区,然后在/根分区里面编辑/etc/fatab文件,内容如下,任何reboot重启
4.然后就是安装内核和grub了
5.编辑/boot/grub/grub.conf文件,编辑内容如下:
6.exit退出,reboot重启,修复中……
7.修复成功
自制Linux系统
1.分区并创建文件系统
2.挂载分区
3.安装grub(注意安装位置,root位置)
4.恢复内核和initramfs文件
5.建立grub.conf /mnt/boot/grub/grub.conf
备注:此处的root=/dev/sda2是因为此磁盘会单独作为一个Linux的磁盘,到时候会自动读取为/dev/sda
二,/dev/sda1为boot分区,所有root=/dev/sda2
5.创建一级目录
6.:
复制bash 和相关 库文件
复制相关命令及相关库文件
如:ls,cat, vim,reboot,hostname,bash等 利用之前的脚本
7.新建一个虚拟机,将/dev/sdb当作此虚拟机的磁盘,启动系统,如下
一个超简易的linux就完成了!!大部分命令都是可以使用的!
如果系统出现了什么故障,导致无法启动,或者一些配置文件的丢失,损坏,
都可进入到救援模式中,
系统在引导期间,很重要的一个过程就是init 进程读取其配置文件/etc/inittab ,
启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/etc/inittab 误删除
或修改错误,Linux 将无法正常启动。此时,只有通过救援模式才可以解决此类问题。
有备份文件的回复方法
没有备份文件的恢复办法
有备份文件的恢复办法:
进入救援模式,执行chroot 命令后,如果有此文件的备份(强烈建议系统中的重要数据目录
,如/etc 、/boot 等要进行备份),直接将备份文件拷贝回去,退出重启即可。如果是
配置文件修改错误,如比较典型的/boot/grub/grub.conf及/etc/passwd 的文件修改错误
,也可以直接修正恢复。假设有备份文件/etc/inittab.bak ,则在救援模式下执行:
sh-3.1# chroot /mnt/sysimage
sh-3.1# cp /etc/inittab.bak /etc/inittab
没有备份文件的恢复办法
如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复
,首先查找到/etc/inittab 属于哪一个RPM包
# chroot /mnt/sysimage
# rpm -qf /etc/inittab
initscripts-9.03.49-1.el6.centos.x86_64
退出chroot 模式 :
# exit
挂载存放RPM 包的安装光盘(在救援模式下,光盘通常挂载在/mnt/source 目录下):
# mount /dev/sr0 /mnt/source
CentOS6 系统的RPM 包存放在光盘Package 目录下,要修复的硬盘系统的根目录在
/mnt/sysimage 下,需要使用–root 选项指定其位置。覆盖安装/etc/inittab 文件
所在的RPM 包:
# rpm -ivh –replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm
其中的rpm 命令选项“–replacepkgs”或者–force 表示覆盖安装,执行完成
后,即已经恢复了此文件
如果想只提取RPM 包中的/etc/inittab 文件进行恢复,可以在进
入救援模式后,执行命令 :
# rpm2cpio /mnt/source/Packages/initscripts-9.03.49-
1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab
# cp etc/inittab /mnt/sysimage/etc
注意此命令执行时不能将文件直接恢复至/etc 目录,只能提取到当前目录下,
且恢复的文件名称所在路径要写完整 的路径 。提取文件成功后,将其复制到根分
区所在的/mnt/sysimage 目录下相应位置即可
linux内核的组成部分:
1.kernel:内核核心,一般为bzlmage,通常位于/boot目录,名称为vmlinuz-VERSION-release
2.kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/
内核模块内核核心版本一定要严格匹配;
[ ] :N
[ M]:Module
[*] :Y,编译进内核核心
内核:动态装载和卸载
3.ramdisk:辅助性文件,并非必须,这取决于内核是否直接驱动rootfs所在的设备;
目标设备驱动,例如SCSI设备的驱动
逻辑设备驱动,例如LVM设备的驱动
文件系统,例如xfs文件系统
ramdisk:是一个简装版的根文件系统;为了让内核找到真正的根文件系统
内核信息查看:
uname命令
-r:内核的release号
-n:显示当前主机名
-a:显示所有信息
模块信息获取和管理:
lsmod:显示模块信息
来自cat /proc/modules 信息
modinfo命令:显示一个内核模块的信息
-F file:仅显示指定自动的信息
-n:显示文件路径
modprobe命令:模块的动态装载和卸载
格式:modproe [-r] module_name(带r选项是卸载,不带是装载)
depmod命令:内核模块依赖关系文件的生成工具;
模块的装载和卸载的另一组命令:
insmod命令:
insmod [filename] [module options…](完整路径)
例:insmod 'modinfo -n btrfs'
rmmod命令:
rmmod [module_name]
例:rmmod btrfs
ramdisk文件的管理:
1.mkinitrd命令
为当前使用中的内核重新制作ramdisk文件
–with=<module>:除了默认额模块之外需要装载至initramfs中的模块
-preload-<module>:initramfs所提供的模块需要预先装载的模块
实例:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
2.dracut命令
dracut [OPTION…] [<image> [<kernel version>]]
实例:dracut /boot/initramfs-$(uname -r ).img $(uname -r )
内核信息输出的伪文件系统:
/proc:内核状态和统计信息的输出接口;同时还提供一个配置接口。/proc/sys;
参数:
只读:信息输出;例如/proc/#/*
只写:可接受用户指定一个“新值”来实现对内核某功能或特性的配置;/proc/sys/
/proc/sys:
net/ipv4/ip_forward相当于net,ipv4.ip_forward
1.sysctl命令
专用于查看或设定/proc/sys命令下参数的值;
sysctl [options] [varilable=value]
查看:
#sysctl -a
#sysctl variable
cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
修改其值:
#sysctl -w variable=value
2.文件系统命令(cate,cho命令)
查看:
cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
修改:
echo “ VALUE” >/proc/sys/PATH/TO/SOME_KERNEL_FILE
注意:上述两种方式的设定仅当前运行内核有效;
配置文件:/etc/sysctl.conf, /etc/sysctl.d/*.conf
立即生效的方式: sysctl -p [/PATH/TO/CONFIG_FILE]
内核参数:
net.ipv4.ip_forward:核心转发
vm
kernel.hostname:主机名
net.ipv4icmp_echo-ignore_all:忽略所有ping操作
/sys目录:
sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的可设置参数;对此些参数的修改,即可定制硬件设备工作特性
udev:通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件
udev是用户空间程序,专用工具:devamdin,hotplug;
udev为设备创建设备文件时,会读取其实现定义好的规则文件,一般在/etc/udev/rules.d/目录下。以及/usr/lib/udev/rules.d/目录下
内核编译
程序包的编译安装:
./configure ,make,make install
编译内核前提:开发环境(开发工具,开发库),头文件:/usr/include
前提:
1.准备好开发环境
2.获取目标主机上硬件的相关信息
3.获取到目标主机系统功能的相关信息,例如要启用的文件系统
4.获取内核源代码
1.准备开发环境
centos 6 7:
包组:
Devrlopment Tools
Server platfrom Development
centos 7:
包组:
Devrlopment Tools
Server platfrom Development
具体命令
yum groupinstall "Development tools" "Server Platform Development"
2.获取目标主机上的硬件上的相关信息
CPU:
cat /proc/couinfo
lscup
x86info -a (查看更详细的信息,但是此命令需要安装),如下
yum install x86info
PCI设备:
lspci命令:
-v:显示详细信息
-vv:显示更详细信息
lsusb命令:
-v:显示详细信息
-vv:显示更详细信息
lsblk命令
了解全部硬件设备信息
hal -device
3.不做深入了解
4.内核编译过程
步骤如下:
1.tar xf linux-3.18.41.tar.xz -C /usr/src
2.cd /usr/src
3.ln -sv linux-3.18.41 linux
4.cd linu
5.make menuconfi 配置内核选项
6.make 编译内核,可使用-j指定编译线程数量
7.make modules_install 安装内核模块
8.make install 安装内核
重启系统,选择使用新内核
详细如下:
1.下载一个新内核,然后解压到指定目录下,通常在/usr/src目录
tar xf linux-3.18.41.tar.xz -C /usr/src
2.cd /usr/src,进入到此目录
3和4 . 给生成的目录创建软链接文件,进入到此目录
ln -sv linux-3.18.41 linux
5.配置内核选项
如果不知道编译内核时要选择那些选项,可参照/boot/config-2.6.32-642.el6.x86_64
cp /boot/config-2.6.32-642.el6.x86_64 .config
配置内核选项有很多选项,后面会做详细解说,此次博客简单了解,如下
6.因为编译内核时间太长,未免出现意外,我们使用screen命令,之前博客有提到,这里不做详细说明
我们在终端是使用screen命令,然后在会话中执行make命令编译,即使此终端意外断开,再次连接终端后,
进入screen中,编译不会断开,会保持编译中状态中…
命令如下:
screen make
7.安装内核模块
执行命令
make modules_install
最后竟然报错了 ,在网上查找时,说是内存不够,然后就增加了一个swap分区,并启用,看是否能够正常安装内核模块?
重新安装内核模块结果如下,没有报错,看来就是内存的原因了
8.安装内核,然后reboot重启,新内核无法读取,只显示了原内核,发现/boot/grub/gurb.conf文件中没
有自动生成新内核条目,以下为手动添加,在重启,新内核显示了,且内核版本为3.18.41,内核编译成功
以上出现的问题还需研究!!
原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/45873