文章标题

本文档详细介绍了如何从Linux内核源码复制ext2文件系统,改名为myext2,并进行源码修改。通过修改相关头文件,将ext2替换为myext2,并在不同文件中添加新头文件。接着,创建makefile编译myext2模块,挂载并测试新文件系统。最后,调整myext2模块,精简功能。
摘要由CSDN通过智能技术生成

cd ~/linux-4.4.39/fs
进入到文件系统

cp -R ext2 myext2
复制ext2文件系统(包括子文件夹),不加-r只复制文件夹

cd /lib/modules/$(uname -r)/build /include/linux
cp ext2_fs.h myext2_fs.h
cd /lib/modules/(uname -r)/build /include/asm-generic/bitops
cp ext2-atomic.h myext2-atomic.h
cp ext2-atomic-setbit.h myext2-atomic-setbit.h
复制这三个文件

源码文件复制完成

#!/bin/bash

SCRIPT=substitute.sh

for f in * 
do 
if [ $f = $SCRIPT ]
then
        echo "skip $f"
        continue
    fi

    echo -n "substitute ext2 to myext2 in $f..."
    cat $f | sed 's/ext2/myext2/g' > ${f}_tmp
    mv ${f}_tmp $f
    echo "done"

    echo -n "substitute EXT2 to MYEXT2 in $f..."
    cat $f | sed 's/EXT2/MYEXT2/g' > ${f}_tmp
    mv ${f}_tmp $f
    echo "done"

done

使用该脚本将fs/myext2文件夹下的所有文件的ext2和EXT2修改为myext2和MYEXT2
将这个脚本放在myext2文件夹下,先加上可执行权限,再删除*.o文件最后运行这个脚本
/sudo 是为了获取root权限/

 sudo chmod +x substitue.sh
 sudo rm *.o
 sudo bash substitute.sh

chmod +x somfile是给某个文件执行权限, chmode有多种形式:chmode u+x chmode a +x, chmode g+x, chmode o + x.分别代表给user, all, guest, others


然后用gedit把刚刚复制的三个文件中的ext2(EXT2)改成myext2(MYEXT2)


完成修改后,我们还要在其他文件中添加上我们修改后的.h文件。
在以下三个文件中添加
在/lib/modules/$(uname -r)/build /include/asm-generic/bitops.h文件中添加:

#include <asm-generic/bitops/myext2-atomic.h>

在/lib/modules/$(uname -r)/build /arch/x86/include/asm/bitops.h文件中添加:

#include <asm-generic/bitops/myext2-atomic-setbit.h>

在/lib/modules/$(uname -r)/build /include/uapi/linux/magic.h 文件中添加:

#define MYEXT2_SUPER_MAGIC 0xEF53

至此我们的源码修改已经完成,接下来就要把myext2编译成内核模块。
首先需要一个makefile文件

#
# Makefile for the linux myext2-filesystem routines.
#
obj-m := myext2.o 
myext2-y := balloc.o dir.o file.o ialloc.o inode.o \
      ioctl.o namei.o super.o symlink.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd) 
default: 
    make -C $(KDIR) M=$(PWD) modules

编写完Makefile文件后make,并加载

sudo make
insmod myext2.ko

之后再查看是否加载成功

cat /proc/filesystems | grep myext2

cat是用来查看文件和创建文件的,在这里是结合grep(通过正则表达式进行筛选)找到myext2的记录,这里我们已经添加了myext2文件系统


然后再对添加的文件系统进行测试

#dd if=/dev/zero of=myfs bs=1M count=1
#/sbin/mkfs.ext2 myfs
#mount -t myext2 -o loop ./myfs /mnt

dd命令: if=file输入文件名
of=file输出文件名
bs=bytes同时设置读写块的大小count=blocks仅拷贝blocks块
mkfs.ext2
mkfs.ext2 myfs建立一个文件系统
mount挂载命令,挂载:给磁盘分区分配一个盘符,我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个存在的目录

-t 指定文件系统的类型,这里自然就是我们的新建的myext2

-o 用来描述挂载的方式有loop:用来把一个文件当成硬盘分区挂载上系统,ro:只读,rw:读写

这里的意思是将./myfs上的文件系统挂载到/mnt中去


修改文件系统的magic number
位置在:/lib/modules/$(uname -r)/build/include/uapi/linux/magic.h
将MYEXT2_SUPER_MAGIC修改为0x6666


重新make并加载myext2模块
编写一个changeMN.c文件用来修改magicnumber,然后挂载myext2,再运行changeMN进行修改,此时再挂载ext2会失败

精简myext2模块,将一些用不到的功能函数省去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值