Ubuntu17.10上模块化编译ext4文件系统

news/2024/12/2 20:34:32/

本文的任务是实现模块化编译ext4文件系统,主要是展示模块化编译文件系统的过程。

电脑上安装的是Windows 10+Ubuntu 17.10,Linux内核版本可以在终端输入uname -a或cat /proc/version查看自己的版本,最初的内核版本为4.13.0。以下为操作步骤:(建议都在root权限下执行命令,不然每一次输入命令都需要密码,比较麻烦,在终端下输入sudo su即可获取root权限)

(1)重新编译内核

首先需要下载Linux内核源码,一般来说下载自己当前正在使用的对应版本的Linux内核源码,可以避免一些不兼容的错误,我这里下载了版本为4.14.12的源码,推荐两种可靠的方式下载源代码,

一种是在Ubuntu上终端下输入apt-get install linux-source-4.13.0(后接版本号),下载的源码会放在/usr/src目录下;另一种是在网站上www.kernel.org上下载对应版本的Linux源代码。然后依照压缩文件后缀名解压文件即可。解压后的源代码我放在了usr/src/linux-4.14.12目录下,这个位置随意就行,如下

在linux-4.14.12目录下,输入make menuconfig。正常情况下会稍后弹出一个配置窗口,如果提示缺乏某些东西,使用apt-get install命令即,如下找到file system项,进入找到ext4,将前缀用空格键修改为M就行了,保存并退出。

 

在该目录下(usr/src/linux-4.14.12)执行make命令,可以使用-jn参数并行编译提高编译速度(n为并行数,推荐为CPU核心数的两倍)编译会花一些时间,取决于CPU性能,笔记本CPU为i7-6820HK,花了半个多小时。然后make modules编译模块,再make modules_install安装模块,再make install安装内核。

在终端下输入reboot重启系统。在grub界面选择Ubuntu高级选项,可以看到安装的新内核,选择新内核启动系统。

(2)文件系统重命名,做出修改

拷贝ext4文件系统的源码,放在其他位置,个人放置在/home下。修改Makefile文件,主要是针对ext4名称的修改,然后在末尾添加两项,如下:

所有ykext4的地方均是修改过的,这里随意命名。还需要指明编译的内核源码的路径,最后添加default和clean项,具体的可以学习Makefile文件的写法。

接下来修改super.c文件搜索找到ext4_fs_type,修改两处,原为ext4,改为ykext4,如下:

最后修改sysfs.c文件,搜索找到ext4_init_sysfs,修改一处,如下:

还修改了file.c,加上了printk函数用于测试新的文件系统。

(3)加载新的文件系统

在/home/ext4/目录下,即拷贝的路径,执行make clean,如Makefile文件中写到的,清除上一次编译产生的文件。最后执行make命令,运行结束时会生成ykext4.ko文件。在该目录下输入insmod ykext4.ko加载文件系统入内核,如果提示错误,可以使用dmesg- c查看错误信息。再输入lsmod可以查看,如下:

(4)挂载新的文件系统

在/dev目录下新建块设备文件YK,转到该目录下输入mknod -m 640 YK b 1 0,意思可以查阅一下mknod命令的使用。然后输入mkfs.ext4 YK格式化块设备文件。再在/mnt 目录下新建挂载点,这里个人建立了一个YK的文件夹,然后输入mount /dev/YK -t ykext4 /mnt/YK。挂载上之后,使用df -T -h可以查看挂载信息。

(5)测试

在/mnt/YK下新建YK.txt,向文件中写入任意内容后,保存退出。再输入dmesg -c命令可以查看打印信息,这里我加上了匹配hello,如下:

运行无误,如果使用dmesg -c,这里会打印出许多信息。要卸载文件系统,先使用umount命令,然后使用rmmod命令即可。

 

关于期间遇见的问题:

1.编译内核出现错误,原因有很多,可能是gcc版本问题,也可能是内部错误,这就不太好解决。另外,注意安装内核开发工具包。

2.编译后重启系统黑屏,过低的内核版本可能会出现这种情况,nvidia专有显卡驱动也可能导致黑屏,可以先卸载显卡驱动。

3.加载文件系统失败,愿因也很多,错误信息不同处理方式也不一样,可能是缺乏依赖项,比如mbcache,jbd2,可能是未动态加载文件系统,或者显示file exists,提示文件已在,表明新的文件系统与现在正在使用的ext4文件系统命名冲突,需要再次检查修改过的文件,重新编译。

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/688160.html

相关文章

RK3568移植AP6256

文章目录 前言一、准备需要的固件和驱动二、放置固件和驱动1.放置蓝牙固件2.放置WIFI固件3.放置WIFI驱动三、修改驱动文件1.修改Kconfig2.修改Makefile3.修改rk_wifi_config.c3.修改bcmdhd目录的相关文件四、原理图五、修改设备树六、图形配置七、加载调试八、相关参考资料、文…

Java中stream流的常见用法

Java中stream流的常见用法 这篇文章主要是记录stream流的用法&#xff0c;因为stream流比较常用&#xff0c;并且一些操作较复杂&#xff0c;记录在此&#xff0c;以后参考。 1、filter用法 主要是用来过滤集合中的元素&#xff0c;较常用。 List<User> list new Arr…

指纹芯片GF5216(汇顶)TEE方案移植(高通8996平台)

指纹移植步骤 指纹移植分为主要如下步骤&#xff1a; 1. 移植Kernel&#xff08;APPS&#xff09;的驱动&#xff1a;主要是创建设备/dev/goodix_fp文件与上电。&#xff08;对于TZ4.0及更高的版本&#xff0c; 不需要在APPS侧配置spi的clock&#xff09; 2. 移植NON-HLOS端T…

AP8851H DC/DC降压 恒压 LED驱动芯片

产品描述 特点 AP8851H 一款宽电压范围降压型 DC-DC 电源管理芯片&#xff0c;内部集成使能 开关控制、基准电源、误差放大器、过 热保护、限流保护、短路保护等功能&#xff0c; 非常适合在宽输入电压范围具有优良 的负载和线性调整度。 AP8851H 芯片包含每周期的峰值…

AP6256 固件

注&#xff1a;完整文件已上传到该平台&#xff0c;找不到的或有别的正基技术问题下方评论留言 #AP6256_NVRAM_V1.1_08252017 Cloned from bcm94345wlpagb_p2xx.txt NVRAMRev$Rev: 498373 $ sromrev11 vendid0x14e4 devid0x43ab manfid0x2d0 prodid0x06e4 macaddr00:90:4c:c5…

堃博医疗创上市以来新低:年内跌幅超八成,市值累计蒸发90亿港元

撰稿|汤汤 来源|贝多财经 近日&#xff0c;港交所上市公司堃博医疗-B&#xff08;HK:02216&#xff0c;下称“堃博医疗”&#xff09;、三叶草生物-B&#xff08;HK:02197&#xff0c;下称“三叶草生物”&#xff09;的股价双双再创新低。其中&#xff0c;堃博医疗的股价于20…

Scala面向对象【下】

1、特质 Scala 语言中&#xff0c;采用特质 trait&#xff08;特征&#xff09;来代替接口的概念&#xff0c;也就是说&#xff0c;多个类具有相同的特质&#xff08;特征&#xff09;时&#xff0c;就可以将这个特质&#xff08;特征&#xff09;独立出来&#xff0c;采用关键…

【分布式存储】聊聊共识和一致性

在分布式存储系统中&#xff0c;对于提高性能、可用性、可拓展性来说都有相关机制可以保证&#xff0c;比如复制、切片等&#xff0c;但是一旦涉及到分布式系统中选主的问题&#xff0c;就比较难&#xff0c;因为网络是不可靠的&#xff0c;并且可能还有拜占庭将军问题。所以如…