关键词:
大纲:
源码编译Linux内核
使用Linux内核模块
实战:编译一个NTFS内核模块,实现Linux挂载NTFS文件系统并实现读写功能
===================================================================
一、源码编译Linux内核
通常我们想对内核进行升级时,可通过下载源码包,编译内核的方式,对内核进行升级
源码包的下载地址在:www.kernel.org
我们可以直接在linux系统中直接下载,如下命令:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz
也可以在windows中下载好后,上传到Linux中。自己选择吧
查看当前系统内核版本:
uname –r
注意:在编译内核时,必须保证磁盘有7G以上空间,切各种工具(gcc、gcc-c++、make等)和库(ncurses-devel、openssl-devel)已安装(不然是会报错的,浪费时间)
第一步:为了保证磁盘空间够用,对虚拟机进行如下设置:
1、添加一块磁盘
2、设置内存在2.5G以上(根据自己主机配置,内存太小,编译时会很慢的)
第二步:对添加的磁盘进行分区格式化,并挂载(这里就不写步骤了)
第三步:使用xftp工具,将下载的源码包上传到虚拟机中,并移动到/sdb1目录下
第四步:解压缩源码包
切换到到/sdb1目录下
看到xz结尾的文件,我们可以使用xz命令对其进行解压(xz –help #查看帮助信息,懂点英文还是有好处的,省去不少麻烦)
xz -d linux-4.7.2.tar.xz
解压出来的文件是.tar包,执行如下命令
tar -xf linux-4.7.2.tar
或直接使用命令:
tar –Jxf linux-4.7.2.tar.xz
详情如下:
进入解压后的目录,查看所有文件
第五步:编译工具及库是否以安装
为防止浪费时间,保证编译过程顺利,直接检查gcc,gcc-c++,make和库ncurses-devel、openssl-devel是否已安装,执行如下命令:
[root@localhost linux-4.7.2]# rpm -qa | grep gcc
[root@localhost linux-4.7.2]# rpm -qa | grep gcc-c++
[root@localhost linux-4.7.2]# rpm -qa | grep make
[root@localhost linux-4.7.2]# rpm -qa | grep ncurses-devel
[root@localhost linux-4.7.2]# rpm -qa | grep openssl-devel
若未安装,可使用rpm或yum命令进行安装
[root@localhost linux-4.7.2]# yum -y -install ncurses-devel openssl-devel
执行结果:
第六步:清空缓存
为了保证在编译内核过程中,快捷和内存容量问题,我们需要先清空一下缓存
使用free -m命令可以查看内存信息
这时,我们发现缓存太多了,剩余空间很少,这是为了保证缓存中重要的数据不会丢失,先执行一下同步命令,将缓存信息同步到硬盘,命令—>sync
清除缓存,其实就是修改文件。Linux系统中,将是否需要对缓存文件清除的配置文件存放在/proc/sys/vm/drop_caches中。我们可以cat查看一下。具体设置如下:
cat /proc/sys/vm/drop_caches
buff ---> 1
cache ---> 2
buff/cache ---> 3
我们向配置文件中输入3,让系统清除缓存,然后在查看内存信息,详情如下;
[root@localhost linux-4.7.2]# free -m
[root@localhost linux-4.7.2]# sync
[root@localhost linux-4.7.2]# cat /proc/sys/vm/drop_caches
[root@localhost linux-4.7.2]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost linux-4.7.2]# free -m
第七步:配置内核功能,使其支持ntfs 检查
执行命令 make menuconfig #注意,最好在虚拟机中的图形化界面运行
#在xshell中运行可能会不成功,我是在xshell中执行的这条命令,应该与窗口大小有关!
选中File systems选项,回车进入
然后,选中DOS/FAT/NT Filesystems选项,回车进入,如下图:
然后,选中NTFS file system support选项,空格选中,会发现前面多了个M,然后移动光标,空格设置NTFS write support,会发现前面多了个* ,如下图:
然后,使用TAB键,切换到下方功能菜单,移动光标选中Save回车
这是会出现如下,对话框(他是在告诉你,将会把你的配置信息,保存到.config文件中,直接回车,OK即可):然后,我们一直选中Exit,回车退出即可!
这是查看文件会发现,多了一个.config文件
由于内核的配置选项太多,过于繁琐,为了避免错误,方便快捷,可以直接将我们原系统内核中的配置文件保存到当前目录下,覆盖.config,然后再次执行本步骤操作即可。
操作如下:
然后,再次执行make menuconfig依次按照本步骤来即可
注意:操作方法通过上下键,移动光标,使用TAB键切换窗口,空格或回车键选中等
(详情见下图)
第八步:检查配置结果
为了保证编译出的内核,是支持NTFS格式的,我们可以查看.config文件,看看其是否以设置成功。
vim /sdb1/linux-4.7.2/.config
输入:/NTFS #查找对应关键字,结果如图:
从这里我们可以发现,确实已经设置成功了,如果你还是不敢确定,可以查看/boot/config…中的文件,确认一下,是否一样,老配置文件如图:
第九步:开始编译并安装内核(这是一个很漫长的过程!!!)
编译内核的步骤为:
生成内核---> 生成模块---> 安装模块--->安装内核,命令如下:
[root@localhost linux-4.7.2]# make bzImage #生成内核
[root@localhost linux-4.7.2]# make modules -j 4 #生成模块
[root@localhost linux-4.7.2]# make modules_install #安装模块
[root@localhost linux-4.7.2]# make install #安装内核
每执行完一条命令,我们可以使用如下命令,检查上一条命令是否执行成功:
[root@localhost linux-4.7.2]# echo $?
总结:
使用新内核启动系统后,查看内核版本:
[root@localhost ~]# uname –r
最后总结一下编译内核的步骤 :
xz -d linux-4.4.tar.xz
tar xf linux-4.4.tar #解压文件比较多就不加-v了
make menuconfig
make bzImage
make modules -j 4
echo $?
为了确保没有错误,可以用上面的命令来查看是否有错误,如果是0的话,就表示没有错误或警告了
make modules_install
make install
重启,测试
注意:
如果我们不知道怎么编译安装内核,可以查看解压后,目录下生成的README文件,这里会有详细的步骤的!!!
vim /sdb1/linux-4.7.2/README
如下图:
=============================================================================
内核模块操作
Linux内核模块是一种可被动态加载和卸载的可执行程序。
通过内核模块扩展内核功能,内核模块通长用于设备驱动,文件系统等。
如果没有内核模块,需要向内核添加功能就需要自发代码、重新编译内核、安装新内核等步骤。
内核模块存放的位置:/lib /lib64 (与windows中的dll文件类似--->通用的模块)
查看我们刚添加的ntfs模块
ls /lib/modules/4.7.2/kernel/fs
模块操作:insmod(插入模块)、modprobe(模块管理高级方案)、lsmod(查看模块)、rmmod(删除模块)、depmod(查看模块依赖)、modinfo(查看模块信息)
insmod命令和modprobe的区别就像#rpm命令和yum命令的区别一样
insmod命令不会自动查找依赖关系(需要我们手动解决)
而modprobe命令会查找模块的依赖关系,并将依赖模块安装
实例如下图:(insmod需要指定文件全名和路径,而modprobe只需给出名称即可)
加载模块、查看效果后卸载
cd /lib/modules/4.4.0/kernel/fs
cd fat/
insmod fat.ko #插入模块
lsmod | grep fat #查看模块
rmmod fat #删除模块
lsmod | grep fat
modinfo #查看某个模块信息
modinfo /lib/modules/4.7.2/kernel/fs/fat/vfat.ko
内容详解:
filename: /lib/modules/4.7.2/kernel/fs/fat/vfat.ko #文件名称及路径
author: Gordon Chaffee #作者
description: VFAT filesystem support #模块描述信息
license: GPL #模块支持GPL协议
alias: fs-vfat #模块别名
srcversion: D5ADDB2AED00B04F5FF993F #软件版本号
depends: fat #依赖关系
intree: Y
vermagic: 4.7.2 SMP mod_unload modversions
depmod #查看模块依赖关系
我们也可以查看配置文件来查找模块依赖关系,命令如下:
vim /lib/modules/4.7.2/modules.dep
实战:
ntfs-3g下载地址:
http://www.tuxera.com/community/ntfs-3g-download
第一步:添加磁盘 ,并对其进行分区
不要格式化,因为工具还没有安装呢!!!
mkfs. #连按两次tab键
rpm –qa |grep fuse
rpm –qa | grep ntfs
上传ntfs-3g源码包,进行解压,并编译安装:
tar –zxf –C /usr/src ntfs-3g_ntfsprogs-2016.2.22.tgz
cd /usr/local/ntfs-3g
./configure --prefix=/usr/local/ntfs-3g
echo $?
make -j 4
make install
/usr/local/ntfs-3g/sbin/mkntfs
安装完成以后,输入mkfs. #连按两次TAB,看看ntfs是不是出现了?
格式化、创建挂载点,并格式化
fdisk /dev/sdc
mkfs.ntfs /dev/sdc1
blkid /dev/sdb1 #查看
mount -t ntfs-3g /dev/sdb1 /ntfs
centos7下添加文件系统ntfs支持,添加windows系统引导
...Windows系统,也不能显示windows默认的ntfs文件系统第一步:安装epel-release源yum-yinstallepel-release第二步:安装ntfs-3gyum-yinstallntfs-3g第三步:更新引导文件grub2-mkconfig-o/boot/grub2/grub.cfg如果出现类似FoundWindowsVista(loade 查看详情
什么是ntfs?
...览器不支持HTML5视频zymedia(\'video\')参考技术ANTFS是WindowsNT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,提供长文件名、数据保护和恢复,能通过目录和文件许可实现安全性... 查看详情
我在linux中怎样才能使用windows分区呢?
...持不是默认的,也就是说你想要使用ntfs的话,需要重新编译内核。鉴于重编内核对于新手的复杂性,这里只讲解使用fat32分区的方法下面给出上述问题的两种解决方案:1.在安装系统(linux),进行到分区选择挂载点时,你可以... 查看详情
什么是ntfs
...比FAT16小,从而有效地节约了硬盘空间。NTFS:微软WindowsNT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。随着以NT为内核的Windows2000/XP的普及,很多个人用户开始用到了NTFS。N... 查看详情
centos挂载ntfs文件系统(代码片段)
...ux双系统,都读不出来。经过搜索阅读centoswiki得知,可以安装ntfs-3g来使centos支持挂载ntfs文件系统。<!>Whileolderntfsdriverswerepronetoeatyourdatainr/w-mode,ntfs-3gseemstober/wsafe.Seethen 查看详情
如何编译linux版本
参考技术A编译安装内核下载并解压内核解压内核:tarxflinux-2.6.XX.tar.xz定制内核:makemenuconfig参见makefilemenuconfig过程讲解编译内核和模块:make生成内核模块和vmlinuz,initrd.img,Symtem.map文件安装内核和模块:sudomakemodules_installinstall... 查看详情
深究ntfs文件系统
...加密(EFS加密右键高级设置)–磁盘配额–NTFS文件系统支持大分区(在MBR磁盘最大支持2T,在GPT磁盘支持的分区更大)–NTFS文件系统支持大文件(大于4G)–NTFS下可创建超过2TB的磁盘(注:硬盘可创建超过其本身大小的虚拟磁... 查看详情
ubuntu支持的文件格式
...件、可执行文件都是使用ELF文件格式来存储的。程序经过编译之后会输出目标文件,然后经过链接可以产生可执行文件或者共享对象文件。Linux下面使用的ELF文件和Windows操作系统使用的PE文件都是从Unix系统的COFF文件格式演化来... 查看详情
centos安装ntfs-3g读写windows10的移动ntfs磁盘(代码片段)
Centos7默认不能挂载NTFS文件系统,而我们常用的windows7、8、10等windows系统多用NTFS文件系统,这里我们就需要一个第三方的工具才能挂载NTFS文件系统,就是ntfs-3g。NTFS-3G是一个开源的软件,可以实现Linux、FreeBSD、MacO... 查看详情
centos7源码编译安装内核4.14.12
为什么要编译内核需要新功能的支持:在生产环境中,突然会需要使用一些新的功能,但是原有的内核并不支持此功能,这是就需要重新编译出一个新的内核来提供对此新功能的支持,比如虚拟化、iptables功能必须要在2.4.X以上... 查看详情
我在win7下装linux,可是linux的镜像文件太大,4g多,装不进fat32盘中
...中的两个xx文件提出来也放到里面,在后用easyBCD引导启动安装。 查看详情
苹果mac系统用不了ntfs移动硬盘?
...os9一下系统,需要在苹果机上装个软件,方法同楼上,既安装NTFSMounter。2、ox系统的话,只需在ox下把硬盘格式化成为dos格式即可macintosh和windows通用。方法是:在系统盘---应用程序文件夹----实用工具文件夹打开磁盘工具,左边点... 查看详情
mac电脑支持ntfs文件系统write的方法
http://www.howtogeek.com/236055/how-to-write-to-ntfs-drives-on-a-mac/亲测第二种方法: PaidThird-PartyDrivers–TheEasiest,ButIt’llCostYou 可行。 查看详情
怎样解决centos无法读取ntfs格式硬盘问题
...源码目录,cd ntfs-3g。4、进行NTFS基本配置./configure,编译源码文件,make,如下图所示。5、fdisk-l查看所要挂载的U盘盘符,eg./dev/sdb1。6、然后将U盘(/dev/sdb1)挂载到/mnt下,即可进行文件复制。7、最后设置开机自动挂载U盘,vi... 查看详情
新存储结构(thinlvm)下flashcache效率测试
flashcache有两种安装方式:1.普通的编译安装,目前似乎不支持3.x内核2.动态内核模块编译(DMKS),这种方式相对简单,而且支持3.x高版本内核。 普通编译安装1.首先安装必要的工具:编译flashcache的时候需要内核头文件,这里... 查看详情
ntfs文件系统的简述
NTFS文件系统的设计思想基于稳定性、和安全性并支持大容量存储设备的文件系统:1.它提供日志可以增加文件系统的容错率,可以有效的保护系统的安全。NTFS是一个可恢复的文件系统。在NTFS分区上即使强制关机后,一般也不需... 查看详情
[第一节]wsl2内核编译/安装内核头文件/驱动调试(代码片段)
[第一节]WSL2内核编译/安装内核头文件/驱动调试WSL2下编写内核模块-简书(jianshu.com)1.查看当前系统的内核版本号lim@TIM:~$uname-r5.4.72-microsoft-standard-WSL22.下载内核源码去github下载对应的linux内核源码包wgethttps://github.com/microsoft/WSL2-Li... 查看详情
ntfs格式是啥
我下载FIFA09.说“安装分区需要NTFS格式!”怎么弄啊ntfs和fat32、fat一样、它是一种文件系统,可以针对不同的分区把它格式化成不同的文件系统,fat现在基本上没了,而是fat32格式的系统所支持的最大单个文件容量为4G,如果单个... 查看详情