【学神-RHEL7】1-19-RHEL7内核编译

本节所讲内容:

源码编译Linux内核

使用Linux内核模块

实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能

 

注意事项:

安装前确保你的硬盘可用空间大于7G,否则编译时,会因为空间不够,提示你安装不成功。另外,安装时为加快速度,把虚拟机内存要调到2.5G以上(越大越好)。

 

RHEL7 编译内核linux-4.3.3.tar

 

查看系统当前的内核版本

[[email protected] ~]#uname -r

3.10.0-229.el7.x86_64

 

执行步骤:

1、到www.kernel.org上下载相应的内核源码包

2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make ,gcc, gcc-c++ ,ncurses-devel和库工具等等 。  开发工具和库

3、解压内核源码包

4、配置内核编译参数

5、编译内核

6、安装编译好的内核与模块

7、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)

8、重新启动系统,测试新内核的工作情况

 

下面具体来看一下,在RHEL7上如何重新编译内核,并升级到linux-4.3.3.tar的详细步骤:

添加一块硬盘20G,并分区:

[[email protected] ~]#fdisk /dev/sdb                                   #把所有的空间都给sdb1   20G

[[email protected] ~]#mkdir /sdb1                                #创建一个挂载点

[[email protected] ~]#mkfs.xfs /dev/sdb1                            #对分区进行格式化

[[email protected] ~]#mount /dev/sdb1 /sdb1/             #挂载

 

1、 到www.kernel.org上下载相应的内核源码包

wget       https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.3.3.tar.xz

 

2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make、gcc、gcc-c++ 、ncurses-devel和库工具等等

确认的方式:

[[email protected] ~]# rpm-qa | grep make

make-3.82-21.el7.x86_64

automake-1.13.4-3.el7.noarch

[[email protected] ~]# rpm -qa| grep gcc

gcc-gfortran-4.8.3-9.el7.x86_64

libgcc-4.8.3-9.el7.x86_64

gcc-c++-4.8.3-9.el7.x86_64

gcc-4.8.3-9.el7.x86_64

[[email protected] ~]# rpm-qa | grep gcc-c++

gcc-c++-4.8.3-9.el7.x86_64

[[email protected] ~]# rpm-qa | grep ncurses-devel

 

发现ncurses-devel没有安装

[[email protected] ~]# yum-y install ncurses-devel

 

3、解压内核源码包

解压内核:

将下载好的内核源代码通过xshell上传/sdb1下

[[email protected] ~]# cd/sdb1/

[[email protected] sdb1]#xz -d linux-4.3.3.tar.xz

[[email protected] sdb1]#tar -xf  linux-4.3.3.tar

[[email protected] sdb1]#du -sh linux-4.3.3            #查看总的源代码为694M

694M      linux-4.3.3

 

Linux内核现在已经很复杂了,到底有没有人在里面放后门,没有人知道。

 

清一下缓存

[[email protected] sdb1]#free -m

              total        used        free      shared buff/cache   available

Mem:           3939         569        1422           9        1947        3059

Swap:          2047           0        2047

[[email protected] sdb1]#echo 3 > /proc/sys/vm/drop_caches

[[email protected] sdb1]#free -m

              total        used        free      shared buff/cache   available

Mem:           3939         531        3235           9         172        3210

Swap:          2047           0        2047

 

#或者,reboot重启一样能清空缓存

 

4、配置内核编译参数 ,生成内核参数配置文件:.config

[[email protected] sdb1]#cd linux-4.3.3/

[[email protected]]# make menuconfig   #通过一个图形界面,来配置内核的参数

NTFS的位置如下图

 

选择“Filesystem”  然后按回车。

 

选择NTFSfile system support  回车,然后光标下移到:NTFS write support .

 

判断配置结果是否支持NTFS的读写功能

[[email protected] linux-4.3.3]# vim/sdb1/linux-4.3.3/.config

CONFIG_NTFS_FS=m

# CONFIG_NTFS_DEBUG is not set

CONFIG_NTFS_RW=y

 

查看一下系统自带的内核能不能支持

[[email protected]]# vim /boot/config-3.10.0-229.el7.x86_64

 

扩展:

如是想查询,某个参数在哪里,可以这样,在这个界面下,输入: /

输入要搜索的内容

 

编译一个真正可用的内核

[[email protected] linux-4.3.3]#cp /boot/config-3.10.0-229.el7.x86_64 /sdb1/linux-4.3.3/.config

下面我们在复制好的.config中只增加一个功能,就是增加对NTFS读写功能。复制完.config后,执行命令:

[[email protected] linux-4.3.3]#pwd

/sdb1/linux-4.3.3

 

[[email protected]]# make menuconfig  

 

选择“Filesystem”  然后按回车。

 

选择NTFSfile system support  回车,然后光标下移到:NTFS write support .

 

保存内核配置信息

保存完,退出

5、编译内核

[[email protected] linux-4.3.3]#make bzImage               #生成内核       ,此内核是经过压缩的内核

这里需要一段时间,取决于你的系统性能。

HOSTCC  scripts/kconfig/conf.o

  HOSTLD scripts/kconfig/conf

此处省略无数字……

 

如果安装的过程中报错openssl……

yum  -y install   openssl-devel

 

6、下面 生成新内核的驱动模块:

[[email protected] linux-4.3.3]# make modules

  CHK     include/config/kernel.release

  CHK     include/generated/uapi/linux/version.h

  CHK     include/generated/utsrelease.h

  CHK     include/generated/bounds.h

这里也是需要一段时间

此处省略无数字节……

 

7、安装编译好的内核与模块
1)安装模块

[[email protected] linux-4.3.3]#make modules_install

这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面

此处省略无数字节

...

2)安装新编译的系统内核

[[email protected] linux-4.3.3]#make install

 

8、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)

[[email protected] ~]# vim /boot/grub2/grub.cfg

设置系统启动时默认的等待时间

配置好的系统内核

 

如何配置默认启动的内核

方法:只需要把内核相关的配置信息调换位置,默认启动的内核配置信息放到最上面

 

8、重新启动系统,测试新内核的工作情况

注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了ZZ。

 

使用新内核启动系统后,查看内核版本:

[[email protected] ~]# uname –r

最后总结一下编译内核的步骤:

xz  -d linux-4.3.3.tar.xz

tar xf linux-4.3.3.tar   #解压文件比较多就不加-v了

make menuconfig

make bzImage

make modules

echo $?

为了确保没有错误,可以用上面的命令来查看是否有错误,如果是0的话,就表示没有错误或警告了

make modules_install

make install

重启,测试

 

 

 学习过程中如果问题,请留言。更多内容请加:
学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589

 

 

时间: 2024-10-10 21:22:38

【学神-RHEL7】1-19-RHEL7内核编译的相关文章

linux内核编译与开发

一.Linux内核简介linux kernel map: linux 系统体系结构: linux kernel体系结构: arm有7种工作模式,x86也实现了4个不同级别RING0-RING3,RING0级别最高, 这样linux用户代码运行在RING3下,内核运行在RING0,这样系统本身就得到了 充分的保护 用户空间(用户模式)转到内核空间(系统模式)方法: ·系统调用 ·硬件中断 linux kernel 体系结构: 虚拟文件系统VFS: VFS(虚拟文件系统)隐藏各种文件系统的具体细节,

Linux入门之CentOS7内核编译三部曲(1)

Linux入门之CentOS7内核编译三部曲(1) 我们知道,一个Linux系统的主要组成是由liunx内核核心和一些支持模块组合而成的.但是在某些场合中,需要某项功能,而当前内核的核心或者模块不支持此功能,那么就需要对内核进行一个升级或者重新编译内核添加相应的功能,以此提供了对此功能的支持. 编译前的准备 认识kernel 所为kernel,就是一种操作系统的核心,当然也是一个文件,而这种核心提供了对一些硬件的支持,一般来说其中包含了一些对常见硬件核心驱动的核心代码.启动系统时会通过加载MBR

linux内核编译,配置本机驱动

1.前言  编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱动,不懂硬件的我们,看到都头大.本人第一次安装gentoo的时候,内核编译了5次,前4次主要失败原因是以太网卡驱动.无线网卡驱动.显卡驱动.声卡驱动都没一次性配置正确.虽然gentoo提供了genkernel命令,可以自动帮你编译内核,但还是想自己手工尝试下. 2.获取本机驱动信息 既然跟内核挂钩

Linux下的内核编译与模块操作

Linux下的内核编译与模块操作 一:实验环境 1):虚拟机 2):linux系统 3):linux系统的硬盘的空余空间要大于7G 4):虚拟机的内存要大于2.5G以上 二:实验目标 1):源码编译Linux内核 2):使用Linux内核模块 3):实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能 三:实验脚本 第一块 --源码编译Linux内核 linux系统与windows系统是两种截然不同的系统,windows系统中的软件都是需要付费的,而linux系统中的

kernel笔记——内核编译与进程管理

内核与操作系统 由于一些商业操作系统设计上的缺陷以及日益庞杂,"操作系统"的概念对很多人而言变得含糊不清.在进一步讨论Linux内核的话题前,我们先区分"内核"与"操作系统"这两个概念. 操作系统:指在整个系统中完成最基本功能和系统管理的部分,包括内核.设备驱动.文件管理工具.系统管理工具.shell命令行或其他用户界面(gnome/KDE等) 内核:是操作系统的核心,完成进程管理.cpu调度.内存管理.中断处理等功能 一般我们编写的应用程序,跑

内核编译安装

以下讲的是内核基础.内核管理.安装编译内核.安装程序anaconda.kickstart. 1.内核基础 对于内核,现在有单内核和微内核设计,现在的内核多采用单内核和高度模块化设计,对于模块化设计,可以进行动态装卸载. 内核一般由三部分组成:内核核心文件.内核对象.ramdisk.内核核心文件,一般为bzImage,经过压缩处理的镜像文件,通常内核核心文件保存在/boot目录下,名称为vmlinuz-VERSION-release.内核对象,即内核额外的功能模块,该类文件放置于/lib/modu

Linux入门之CentOS7内核编译三部曲(2)

Linux入门之CentOS7内核编译三部曲(2) 在linux系统中,编译完了内核,得到了所需的功能,并不能表示就已经能完美完成我们的所需.因为内核只是做一个核心的硬件及核心代码的支持,而注意的模块支持任然是对应版本的内核模块文件.这些文件决定着平时能否使用哪些功能.这次不会介绍如果添加给上次编译的新内核模块功能,主要介绍模块的功能和作用以及其加载和卸载. 查看当前系统以及加载的内核模块命令:lsmod  modinfo lsmod 命令 lsmod - program to show the

谢烟客---------Linux之内核编译及LFS制作

内核组成.内核优化.内核编译步骤:开发环境.硬件信息.展开到源码树.内存特性设定.编译 屏幕:在一个终端上,为多个进程,开启多个使用接口. 何谓交叉编译:目标代码非当前平台 有10天没有学习了,去做了LFS,当然得感谢我"瑞哥",学习Linux的导师,www.mykernel.cn , 要不是他告诉我说,选对发行版本和LFS手册很关键,否则很难一次成功的. 前3天就是不懂,好不容易编译到gcc,呀!失败了,..... 心得:体验就够了,没有必要花时间在LFS制作之上,完全浪费时间. 1

自制linux和内核编译

自制linux和内核编译 1.分区并创建文件系统 fdisk /dev/sdb分两个必要的分区/dev/sdb1对应/boot /dev/sdb2对应根/mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2 2.挂载boot mkdir/mnt/bootmount /dev/sdb1 /mnt/boot 3.安装grub grub-install --root-directory=/mnt  /dev/sdb 4.建立grub.conf: vim /mnt/boot/gr

Linux大脑 "内核" 内核编译(NTFS)

Linux大脑 "内核" 关于它 什么是内核 kernel(内核)是操作系统的核心,相当于人的大脑,掌控所有的硬件设备的控制权,也就是希望计算机帮你完成各项工作,那都需要通过内核的帮助才能完成,当然,如果你想实现的功能内核没有提供,那就必须添加相关的模块到内核中,就类似驱动程序,有了模块的支持我们计算机才能去操控硬件,完成我们想完成的工作 内核其实就是系统上面的一个文件,这个文件包含了驱动硬件的检测程序与驱动模块,内核文件在/boot目录下一个以vmlinuz开头的文件,有时候/boo