设为首页 收藏本站
查看: 905|回复: 0

[经验分享] Linux下的内核编译与模块操作

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-31 09:27:35 | 显示全部楼层 |阅读模式
一:实验环境
1:虚拟机
2:linux系统
3:linux系统的硬盘的空余空间要大于7G
4:虚拟机的内存要大于2.5G以上
二:实验目标
1:源码编译Linux内核
2:使用Linux内核模块
3:实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能
:实验脚本
第一块 --源码编译Linux内核
linux系统与windows系统是两种截然不同的系统,windows系统中的软件都是需要付费的,而linux系统中的软件大多数都是开源免费的。因此直接将U盘或者光盘塞进linux系统中是不能够使用的。那么NTFS是属于windows系统下的一种文件系统,linux系统能够使用吗?linux系统实质上是不能够支持NTFS系统的,但是在linux系统中有很多时候是需要用到NTFS文件系统的,因此linux系统在内核中以模块的形式对微软的NTFS文件系统进行编辑,在我们需要使用的时候,只需要将NTFS文件系统的开
启处开启一下就OK了。相对于个人与企业比较来说,个人使用的情况就比较多了,我们直接将NTFS开启了,微软不会告我们侵权的,而大型的企业就不行,需要使用NTFS文件系统,就必须要向微软付费,不然后果就会很严重了,直接告你侵权。
执行步骤:
1、到www.kernel.org上下载相应的内核源码包
2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make ,gcc, gcc-c++ ,ncurses-devel和库工具等等 。  开发工具和库
3、解压内核源码包
4、配置内核编译参数
5、编译内核
6、安装编译好的内核与模块
7、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
8、重新启动系统,测试新内核的工作情况
下面具体来看一下,在RHEL6上如何重新编译内核,并升级到linux-3.19.8.tar.xz 的详细步骤:
查看当前系统的内核版本
root@xuegod163 ~]#uname -r
2.6.32-431.el6.x86_64
添加一块硬盘20G,并分区:
对新添加的硬盘
[iyunv@localhost ~]#fdisk  /dev/sdb  #分区sdb1,并将所有的空间都给sdb1
[iyunv@localhost ~]#mkdir /sdb1  #创建一个目录,此目录作为挂载点
[iyunv@localhost ~]#mkfs.ext4 /dev/sdb1  #对分区进行格式化
[iyunv@localhost ~]#mount /dev/sdb1 /sdb1  #对分区进行挂载

1:到www.kernel.org上下载相应的内核源码包
[iyunv@localhost ~]# ls  #查看,看到linux的内核3.19.8的压缩包已经下载到根目录下了
anaconda-ks.cfg    linux-3.19.8.tar.xz   模板  文档  桌面
install.log        vmware-tools-distrib  视频 下载
install.log.syslog  公共的                图片  音乐
2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make、gcc、gcc-c++ 、ncurses-devel和库工具等等
3、解压内核源码包

解压内核:

[iyunv@localhost ~]#cp linux-3.19.8.tar.xz /sdb1  #将下载的内核压缩包拷贝到/sdb1
[iyunv@localhostsdb1]# ls
linux-3.19.8.tar.xz lost+found
[iyunv@localhostsdb1]# xz -d linux-3.19.8.tar.xz  #将内核压缩包进行解压
[iyunv@localhostsdb1]# ls
linux-3.19.8.tar linux-3.19.8.tar.xz lost+found
[iyunv@localhostsdb1]# tar xf linux-3.19.8.tar  #再次进行解压
[iyunv@localhostsdb1]# ls
linux-3.19.8 linux-3.19.8.tar lost+found
[iyunv@localhostsdb1]# du -sh linux-3.19.8  #查看总的源代码为642M
642M         linux-3.19.8
[iyunv@localhostsdb1]# free –m  #看到大量的缓存483M
             total       used       free    shared    buffers     cached
Mem:          3009       2104        904          0         68       1552
-/+buffers/cache:        483       2526
Swap:         3999          0       3999
[iyunv@localhostsdb1]# reboot  #清除一下缓存
[iyunv@localhost ~]#mount /dev/sdb1 /sdb1  #由于重新启动了,我们并没有设置开机自动挂载,因此,直接查看/sdb1是看不到任何东西的,所以需要重新挂载一下。
[iyunv@localhost ~]#df -h
/dev/sdb1              20G  1.4G  18G   8% /sdb1
[iyunv@localhost ~]#cd /sdb1
[iyunv@localhostsdb1]# ls
linux-3.19.8  linux-3.19.8.tar  lost+found
#这个时候我们可以看到,内核压缩包的解压包已经出现了
[root@localhostlinux-3.19.8]# make menuconfig  #通过一个图形界面,来配置内核的参数
#打开配置,找到NTFS的位置,使Linux系统支持windows系统下的NTFS文件系统

NTFS的位置如下图
                            wKiom1W5ddzT-CebAAK5sh_CcvQ929.jpg
选择“Filesystem”  然后按回车。
wKioL1W5d9qjcL9DAALo24JjrRE904.jpg
选择DOS,回车
wKiom1W5dfaTefsiAAH_X6MrkVw732.jpg
选择NTFSfile system support  回车,<>中会出现“M” 下面会自动出现两个选项值。
wKioL1W5eASiJa6RAAJL361UYBE106.jpg
光标下移到:NTFS write support (NTFS支持).选择,空格,
这样就编辑好了。
wKiom1W5diCz7iU0AAB0n4Uzg8Y716.jpg
选择exit回车退出。

##现在我们已经编译成功了,成功之后会在sdb1下的内核解压包中产生配置文件,
[root@localhostlinux-3.19.8]# vim /sdb1/linux-3.19.8/.config
wKioL1W5eBuSs1Q5AADb3eTJLkI736.jpg
#可以看到NTFS的配置文件的读写权限已经开启了,Yes是启用了,而linux下内核中默认是不启用NTFS
NTFSDEBUG并没有设置
注:
以上的只是修改了下载下来的linux-3.19.8.tar.xz形式的内核包。在图形界面中,我们可以看出有许多需要修改的地方,但是我们并不知道应该修改那一项,这个时候把linux系统中自带的NTFS文件系统的配置文件拷贝到(vim /sdb1/linux-3.19.8/.config)刚才修改之后内核的配置文件中。如果(vim /sdb1/linux-3.19.8/.config)刚才修改之后内核的配置文件目录中有“.config”的文件就进行修改,没有的话就会重新生成。这样的话,填加的NTFS这样的一个支持功能之后,其他需要使用的内容还是会用系统自带的内核编辑好的内容,不需要对他进行修改。
解释:
A=为下载的内核包的配置文件
B=为系统自带的NTFS配置文件
指:将AB两个配置文件放在同一个目录下,如果A里面有B文件里面以.Config开头的文件就进行修改,如果A里面没有,B里面有,那么A里面就自动生成B有而A没有的文件。
最后在使用NTFS的过程中,就会直接使用B里面的其他内容。
[iyunv@localhost linux-3.19.8]# vim/boot/config-2.6.32-220.el6.x86_64  #查看一下系统中的NTFS的配置文件
wKioL1W5eCbzrNo7AAC-nihbfRg267.jpg
#这是系统自带的NTFS配置文件,自带的配置文件中可以看出NTFS并没有开启,这就说明了linux下的系统是能够使用NTFS文件系统的,但是需要开启之后才能够使用
[root@localhostlinux-3.19.8]# cp /boot/config-2.6.32-220.el6.x86_64 /sdb1/linux-3.19.8/.config  #将系统自带的NTFS文件系统的配置文件拷贝到刚才生成的配置文件目录中。

拓展:
#在这里,我们不知道选择那一项的时候,可以使用另一种方法
[iyunv@localhost linux-3.19.8]# make menuconfig  

wKiom1W5dkXyBPjMAAIu6eBX5wY547.jpg
#选择<select> =选择,搜索。直接按下空格  输入“/
wKioL1W5eEHTur48AADIJnJWGvw970.jpg
#输入你想要搜索的内容
wKiom1W5dmbTw7unAAJb6GpQt6w539.jpg
#这样你只需要按照它给出的步骤输入就OK
下面我们在复制好的.config中只增加一个功能,就是增加对NTFS读写功能。复制完.config后,执行命令:
[iyunv@xuegod163 linux-3.19.8]#pwd
/sdb1/linux-3.19.8
[iyunv@xuegod163 linux-3.19.8]#make menuconfig
wKioL1W5eGKBLwz5AAE9IbB3ph8587.jpg
向下移动光标找到如下内容:




wKioL1W5eH6y6KjGAAE9IbB3ph8380.jpg
wKiom1W5do-wxBmNAAEGmBIrAkI230.jpg
wKiom1W5dpGAmLi8AAFUQgLdlyA626.jpg
wKioL1W5eIKSUEqHAAKEWhFpQdU166.jpg
wKiom1W5dpPD_96yAAE9j7quxeo765.jpg
保存后,按下esc或 选中Exit 进程退出
wKiom1W5dqax6CGcAADj-PB_AOU470.jpg

编译内核
[root@localhostlinux-3.19.8]# make bzImage#生成内核       ,此内核是经过压缩的内核
这里需要一段时间,取决于你的系统性能。
BUILD   arch/x86/boot/bzImage
此处省略无数字节……
Kernel: arch/x86/boot/bzImage is ready  (#1)

6、下面 生成新内核的驱动模块:
[root@localhostlinux-3.19.8]# make modules
这里也是需要一段时间
此处省略无数字节……
  IHEX    firmware/edgeport/down3.bin
  IHEX2FWfirmware/whiteheat_loader.fw
  IHEX2FWfirmware/whiteheat.fw
  IHEX2FWfirmware/keyspan_pda/keyspan_pda.fw
  IHEX2FWfirmware/keyspan_pda/xircom_pgs.fw
7、安装编译好的内核与模块
(1)安装模块

[iyunv@localhost linux-3.19.8]# make modules_install
这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面
此处省略无数字节
...
INSTALL/lib/firmware/whiteheat.fw
  INSTALL/lib/firmware/keyspan_pda/keyspan_pda.fw
  INSTALL/lib/firmware/keyspan_pda/xircom_pgs.fw
  DEPMOD 3.16.2ZZ
(2)安装新编译的系统内核
[iyunv@localhost linux-3.19.8]#make install
sh./arch/x86/boot/install.sh 3.16.2 arch/x86/boot/bzImage \
              System.map "/boot"
ERROR:modinfo: could not find module vsock
ERROR:modinfo: could not find module snd_page_alloc
ERROR:modinfo: could not find module vmware_balloon
ERROR:modinfo: could not find module vmci

8、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
[iyunv@localhost linux-3.0.4]# vim  /boot/grub/grub.conf
wKioL1W5eLjjXDjmAAJSHy0sNBs879.jpg
这里的延迟时间可以改为0,建议不要改。
这里的内核名称可以修改,防止黑客的暴力破解,修改问windows7,黑客看到是win7就会使用windows的破解软解来破解,这样就会破解不开来,也可以装一些监控软件,谁来破解的,都会知道。
9、重新启动系统,测试新内核的工作情况
注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了。
选择处就是上一步的5秒延迟处
使用新内核启动系统后,查看内核版本:
[iyunv@localhost ~]# uname -r
3.19.8


[iyunv@localhost fs]# vim /boot/grub/grub.conf
wKiom1W5dt2TejY9AAFtB6lTDLM956.jpg
#现在可以看到有两个内核,default=1  意思是指启动的时候使用第二个内核,即2.6.32….的,如果将1改为0,那么启动的就直接是3.19.8的内核了。
最后总结一下编译内核的步骤 :
xz  -dlinux-3.16.2.tar.xz
tar xf linux-3.16.2.tar   #解压文件比较多就不加-v了
make menuconfig
make bzImage
make modules
echo $?
为了确保没有错误,可以用上面的命令来查看是否有错误,如果是0的话,就表示没有错误或警告了
make modules_install
make install
重启,测试

第二块

内核,操作系统,软件
wKioL1W5eNyiRHX5AADLyyNYqCQ545.jpg
内核模块操作
内核(模块)管理命令:
模块的作用:把具体功能封装好的程序。   比如,冲电宝。可以给所有手机冲电。

存放内核模块的目路径:
[iyunv@localhost fs]# ls/lib/modules/
2.6.32-220.el6.x86_64  3.19.8
#可以看到有两个内核

[iyunv@xuegod163 ~]# cd/lib/modules/3.19.8/kernel/fs/
[iyunv@xuegod163 fs]# cd fat/
[iyunv@xuegod163 fat]# ls
fat.ko  msdos.ko vfat.ko

插入模块:
insmod
作用:载入模块
[iyunv@localhost fat]# insmod./fat.ko  #相对路径载入内核模块
查看当前系统中加载的模块
#lsmod    列出当前模块
[iyunv@xuegod163 fat]# lsmod |grep fat
fat                    59587  0

删除模块
#rmmod   fat  #删除模块 。跟上模块的名字
[iyunv@localhost fat]# rmmodfat
[iyunv@localhost fat]# lsmod |grep fat
[iyunv@localhost fat]#
#fat内核模块已被删除,可以看出过滤不出模块了
解决依赖关系安装模块
[iyunv@localhost fat]# ls #查看fat下的模块
fat.ko  msdos.ko vfat.ko
[iyunv@localhost fat]# insmod./vfat.ko #插入模块
insmod: error inserting './vfat.ko': -1 Unknown symbol in module
#产生了错误,说这个模块有依赖关系,想要插入这个模块就需要将fat模块先插入才行
在不知道这个模块具有依赖关系的时候,我们使用这个命令直接插入模块,会直接加载具有依赖性的fat模块
[iyunv@localhost fat]# modprobevfat
[iyunv@localhost fat]# lsmod |grep vfat
vfat                   10575  0
fat                    59587  1 vfat
#可以看到两块模块已经插入成功了,***背景中的“1”表示有一个模块对于fat模块具有依赖性的关系
删除模块--(直接连同具有依赖性的模块也一起删除)
[iyunv@localhost fat]# modprobe-r vfat
[iyunv@localhost fat]# lsmod |grep vfat
[iyunv@localhost fat]#
#现在可以看出刚才插入的模块已经被删除了,连同它具有依赖性关系的fat模块也删除了

新添加一个模块后,需要让系统知道:
#depmod
[iyunv@localhost fat]#modprobe vfat
[iyunv@localhost fat]#depmod
注:depmod更新的配置文件,就是这个。
[iyunv@localhost fat]# cd/lib/modules/3.19.8/
[iyunv@localhost 3.19.8]# ls #插入的模块,在这里形成了一个目录
build              modules.ccwmap       modules.isapnpmap  modules.symbols
kernel             modules.dep          modules.ofmap      modules.symbols.bin
modules.alias      modules.dep.bin      modules.order      modules.usbmap
modules.alias.bin  modules.ieee1394map  modules.pcimap     source
modules.builtin    modules.inputmap     modules.seriomap [iyunv@xuegod163 3.19.8]#vim modules.dep
[root@localhost3.19.8]# vim modules.dep #进入目录,查看刚才插入的模块的配置文件
wKiom1W5dv2AzwIGAAEvHRVWgS4525.jpg

查看模块间依赖关系:如fat。从下图可以看出,vfat和msdos模块都依赖fat.ko模块
文件格式

模块的路径                        :   依赖的模块
wKioL1W5ePjglAGlAAEQQLtNW88714.jpg
#即fat.ko模块依赖于fat模块

查看模块信息
#modinfo    查看模块信息
[iyunv@localhost fat]#ls  #查看出有三个模块
fat.ko  msdos.ko vfat.ko
[iyunv@localhost fat]#modinfo vfat   #可以看到模块信息
filename:      /lib/modules/3.19.8/kernel/fs/fat/vfat.ko  #文件的名称及目录
author:         GordonChaffee   #验证性
description:    VFAT filesystem support
license:        GPL
alias:          fs-vfat
srcversion:     3A2520B90FAB5DF5806E200
depends:        fat  #它依赖于fat
intree:         Y
vermagic:       3.19.8 SMP mod_unload modversions

开机自动加载模块
[iyunv@localhost~]#vim/etc/rc.local wKiom1W5dxexK0vKAADQdBdkkAw630.jpg .#直接在最后面输入modprobe fat 命令 退出就OK了  ,和光驱实现开机自动挂载是一样的道理!
第三块
注:
在第一块中的编译内核中,我们安装的包需要太长的时间了,一般情况下我们是不会用这种方法的,因为不仅仅是时间很长的问题,而且还会带来一些不安全的问题,所以会用另一种方法,fuse,这种方法安装是时间就要简短很多了,而且安全性也要相较于前面的方法要高的多。

实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统
安装 fuse:
[iyunv@localhost~]# tar zxvf fuse-2.8.3.tar.gz
[iyunv@localhost~]# ls
  fuse-2.8.3.tar.gz          ntfs-3g-2011.1.15.tgz  fuse-2.8.3         
[iyunv@localhost~]# cd fuse-2.8.3
[root@localhostfuse-2.8.3]# ls
compile       configure.in  example     INSTALL      Makefile.am  README.NFS
[root@localhostfuse-2.8.3]# vim INSTALL
#这里面的内容就是安装的过程

wKiom1W5dzPS7OSdAAIZ2Pv218Q199.jpg

[root@localhostfuse-2.8.3]# ./configure && make && make install  #进行对包的安装
[root@localhostfuse-2.8.3]# echo $? #查看是否安装成功,成功的话,返回值为“0”
0
安装:ntfs-3g
[iyunv@localhost~]# tar zxvf ntfs-3g-2011.1.15.tgzcd ntfs-3g-2011.1.15
[iyunv@localhost~]# cd ntfs-3g-2011.1.15
[root@localhostntfs-3g-2011.1.15]# ./configure && make && make install
[root@localhostntfs-3g-2011.1.15]# echo $?
0

将一个U盘插入电脑
导入U盘
wKiom1W5d1_xlr1NAAHJmTTPfbI570.jpg

[iyunv@localhost 惊羽]# umout /dev/sdc1
[iyunv@ localhost ~]# mount -tntfs-3g  /dev/sdc1 /opt/

开机自动挂载:
[iyunv@localhost~]#  vim /etc/fstab
/dev/sdc1             /opt                 ntfs-3g   defaults        0 0


四:实验结束


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-92581-1-1.html 上篇帖子: centos6.5下postgres-XC集群安装与配置(有standby案例) 下篇帖子: CentOS6.5启动ActiveMQ报错 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表