启动和内核管理 | 您所在的位置:网站首页 › centos5和6的区别 › 启动和内核管理 |
启动和内核管理 : 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 –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/ 与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 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=:除了默认额模块之外需要装载至initramfs中的模块 -preload-:initramfs所提供的模块需要预先装载的模块 实例:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 2.dracut命令 dracut [OPTION…] [ []] 实例: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/src2.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 |
CopyRight 2018-2019 实验室设备网 版权所有 |