fs: exfat: Add support for building inside kernel

Change-Id: I963dfd24ffbb488efcbb7a504e9b811f54adcff7
Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
This commit is contained in:
UtsavBalar1231 2022-02-26 20:27:24 +05:30
parent 6676e8e787
commit 01bb8f9a1e
7 changed files with 2 additions and 375 deletions

View File

@ -136,6 +136,7 @@ if BLOCK
menu "DOS/FAT/NT Filesystems"
source "fs/fat/Kconfig"
source "fs/exfat/Kconfig"
source "fs/ntfs/Kconfig"
endmenu

View File

@ -80,6 +80,7 @@ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
obj-$(CONFIG_CODA_FS) += coda/
obj-$(CONFIG_MINIX_FS) += minix/
obj-$(CONFIG_FAT_FS) += fat/
obj-$(CONFIG_EXFAT_FS) += exfat/
obj-$(CONFIG_BFS_FS) += bfs/
obj-$(CONFIG_ISO9660_FS) += isofs/
obj-$(CONFIG_HFSPLUS_FS) += hfsplus/ # Before hfs to find wrapped HFS+

View File

@ -1,188 +0,0 @@
dist: bionic
language: c
notifications:
- email: true
before_script:
# Download the kernel
- sudo apt-get install libelf-dev wget tar gzip python
- wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.1.36.tar.gz
- tar xf linux-4.1.36.tar.gz
- mv linux-4.1.36 linux-stable
- ./.travis_get_mainline_kernel
- cp ./.travis_cmd_wrapper.pl ~/travis_cmd_wrapper.pl
# Prerequisite for xfstests testing
- sudo apt-get install linux-headers-$(uname -r)
- sudo apt-get install autoconf libtool pkg-config libnl-3-dev libnl-genl-3-dev
- sudo apt-get install xfslibs-dev uuid-dev libtool-bin xfsprogs libgdbm-dev gawk fio attr libattr1-dev libacl1-dev libaio-dev
- git clone --branch=exfat-next https://github.com/exfat-utils/exfat-utils
- git clone https://github.com/namjaejeon/exfat-testsuites
- export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
- export PATH=/usr/local/lib:$PATH
- sudo useradd fsgqa
- sudo useradd 123456-fsgqa
script:
# Copy ksmbd source to kernel
- mv linux-stable ../
- mv linux ../
- mkdir ../linux-stable/fs/exfat
- cp -ar * ../linux-stable/fs/exfat/
- cp -ar * ../linux/fs/exfat/
# Compile with 4.1 kernel
- cd ../linux-stable
- yes "" | make oldconfig > /dev/null
- echo 'obj-$(CONFIG_EXFAT_FS) += exfat/' >> fs/Makefile
- echo 'source "fs/exfat/Kconfig"' >> fs/Kconfig
- echo 'CONFIG_EXFAT_FS=m' >> .config
- echo 'CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"' >> .config
- make -j$((`nproc`+1)) fs/exfat/exfat.ko
# Compile with latest Torvalds' kernel
# - cd ../linux
# - yes "" | make oldconfig > /dev/null
# - echo 'obj-$(CONFIG_EXFAT) += exfat/' >> fs/Makefile
# - echo 'source "fs/exfat/Kconfig"' >> fs/Kconfig
# - echo 'CONFIG_EXFAT_FS=m' >> .config
# - echo 'CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"' >> .config
# - make -j$((`nproc`+1)) fs/exfat/exfat.ko
# Run xfstests testsuite
- cd ../linux-exfat-oot
- make > /dev/null
- sudo make install > /dev/null
- sudo modprobe exfat
- cd exfat-utils
- ./autogen.sh > /dev/null
- ./configure > /dev/null
- make -j$((`nproc`+1)) > /dev/null
- sudo make install > /dev/null
- sudo mkdir -p /mnt/scratch
- sudo mkdir -p /mnt/test
- sudo mkdir -p /mnt/full_test
# create file/director test
- truncate -s 10G full_test.img
- sudo losetup /dev/loop22 full_test.img
- sudo mkfs.exfat /dev/loop22
- sudo mount -t exfat /dev/loop22 /mnt/full_test/
- cd /mnt/full_test/
- i=1;while [ $i -le 10000 ];do sudo touch file$i;if [ $? != 0 ]; then exit 1; fi; i=$(($i + 1));done
- sync
- sudo fsck.exfat /dev/loop22
- sudo rm -rf *
- i=1;while [ $i -le 10000 ];do sudo mkdir file$i;if [ $? != 0 ]; then exit 1; fi; i=$(($i + 1));done
- sync
- sudo rm -rf *
- sudo fsck.exfat /dev/loop22
- cd -
- sudo umount /mnt/full_test/
- sudo fsck.exfat /dev/loop22
# run xfstests test
- truncate -s 100G test.img
- truncate -s 100G scratch.img
- sudo losetup /dev/loop20 test.img
- sudo losetup /dev/loop21 scratch.img
- sudo mkfs.exfat /dev/loop20
- sudo mkfs.exfat /dev/loop21
- cd ..
- cd exfat-testsuites/
- tar xzvf xfstests-exfat.tgz > /dev/null
- cd xfstests-exfat
- make -j$((`nproc`+1)) > /dev/null
- sudo ./check generic/001
- sudo ./check generic/006
- sudo ./check generic/007
- sudo ./check generic/011
- sudo ./check generic/013
- sudo ./check generic/014
- sudo ./check generic/028
- sudo ./check generic/029
- sudo ./check generic/030
- sudo ./check generic/034
- sudo ./check generic/035
- sudo ./check generic/036
- sudo ./check generic/069
- sudo ./check generic/073
- sudo ./check generic/074
- sudo ./check generic/075
- sudo ./check generic/076
- sudo ./check generic/080
- sudo ./check generic/084
- sudo ./check generic/091
- sudo ./check generic/095
- sudo ./check generic/098
- sudo ./check generic/100
- sudo ./check generic/112
- sudo ./check generic/113
- sudo ./check generic/114
- sudo ./check generic/120
- sudo ./check generic/123
- sudo ./check generic/124
- sudo ./check generic/127
- sudo ./check generic/129
- sudo ./check generic/130
- sudo ./check generic/131
- sudo ./check generic/132
- sudo ./check generic/133
- sudo ./check generic/135
- sudo ./check generic/141
- sudo ./check generic/169
- sudo ./check generic/198
- sudo ./check generic/207
- sudo ./check generic/208
- sudo ./check generic/209
- sudo ./check generic/210
- sudo ./check generic/211
- sudo ./check generic/212
- sudo ./check generic/215
- sudo ./check generic/221
- sudo ./check generic/239
- sudo ./check generic/240
- sudo ./check generic/241
- sudo ./check generic/245
- sudo ./check generic/246
- sudo ./check generic/247
- sudo ./check generic/248
- sudo ./check generic/249
- sudo ./check generic/257
- sudo ./check generic/260
- sudo ./check generic/263
- sudo ./check generic/285
- sudo ./check generic/286
- sudo ./check generic/288
- sudo ./check generic/308
- sudo ./check generic/309
- sudo ./check generic/310
- sudo ./check generic/313
- sudo ./check generic/323
- sudo ./check generic/325
- sudo ./check generic/338
- sudo ./check generic/339
- sudo ./check generic/340
- sudo ./check generic/344
- sudo ./check generic/345
- sudo ./check generic/346
- sudo ./check generic/347
- sudo ./check generic/354
- sudo ./check generic/376
- sudo ./check generic/393
- sudo ./check generic/394
- sudo ./check generic/405
- sudo ./check generic/406
- sudo ./check generic/409
- sudo ./check generic/410
- sudo ./check generic/411
- sudo ./check generic/412
- sudo ./check generic/418
- sudo ./check generic/428
- sudo ./check generic/437
- sudo ./check generic/438
- sudo ./check generic/441
- sudo ./check generic/443
- sudo ./check generic/448
- sudo ./check generic/450
- sudo ./check generic/451
- sudo ./check generic/452

View File

@ -1,65 +0,0 @@
#!/usr/bin/perl
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2019 Samsung Electronics Co., Ltd.
#
use strict;
sub tweak_sysctl()
{
`sudo sysctl kernel.hardlockup_panic=0`;
`sudo sysctl kernel.hung_task_panic=0`;
`sudo sysctl kernel.panic=128`;
`sudo sysctl kernel.panic_on_io_nmi=0`;
`sudo sysctl kernel.panic_on_oops=0`;
`sudo sysctl kernel.panic_on_rcu_stall=0`;
`sudo sysctl kernel.panic_on_unrecovered_nmi=0`;
`sudo sysctl kernel.panic_on_warn=0`;
`sudo sysctl kernel.softlockup_panic=0`;
`sudo sysctl kernel.unknown_nmi_panic=0`;
}
sub execute($$)
{
my $cmd = shift;
my $timeout = shift;
my $output = "Timeout";
my $status = 1;
$timeout = 8 * 60 if (!defined $timeout);
tweak_sysctl();
eval {
local $SIG{ALRM} = sub {
print "TIMEOUT:\n";
system("top -n 1"), print "top\n";
system("free"), print "free\n";
system("dmesg"), print "dmesg\n";
die "Timeout\n";
};
print "Executing $cmd with timeout $timeout\n";
alarm $timeout;
$output = `$cmd`;
$status = $?;
alarm 0;
print $output."\n";
print "Finished: status $status\n";
};
if ($@) {
die unless $@ eq "Timeout\n";
}
}
if (! defined $ARGV[0]) {
print "Usage:\n\t./.travis_cmd_wrapper.pl command [timeout seconds]\n";
exit 1;
}
execute($ARGV[0], $ARGV[1]);

View File

@ -1,37 +0,0 @@
#!/bin/sh
#
# A simple script we are using to get the latest mainline kernel
# tar ball
#
wget https://www.kernel.org/releases.json
if [ $? -ne 0 ]; then
echo "Could not download kernel.org/releases.json"
exit 1
fi
VER=$(cat releases.json | python2.7 -c "import sys, json; print json.load(sys.stdin)['latest_stable']['version']")
if [ $? -ne 0 ]; then
echo "Could not parse release.json"
exit 1
fi
if [ "z$VER" = "z" ]; then
echo "Could not determine latest release version"
exit 1
fi
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-"$VER".tar.gz
if [ $? -ne 0 ]; then
echo "Could not download $VER kernel version"
exit 1
fi
tar xf linux-"$VER".tar.gz
if [ $? -ne 0 ]; then
echo "Could not untar kernel tar ball"
exit 1
fi
mv linux-"$VER" linux

View File

@ -2,39 +2,7 @@
#
# Makefile for the linux exFAT filesystem support.
#
ifneq ($(KERNELRELEASE),)
obj-$(CONFIG_EXFAT_FS) += exfat.o
exfat-y := inode.o namei.o dir.o super.o fatent.o cache.o nls.o misc.o \
file.o balloc.o
else
# Called from external kernel module build
KERNELRELEASE ?= $(shell uname -r)
KDIR ?= /lib/modules/${KERNELRELEASE}/build
MDIR ?= /lib/modules/${KERNELRELEASE}
PWD := $(shell pwd)
export CONFIG_EXFAT_FS := m
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
help:
$(MAKE) -C $(KDIR) M=$(PWD) help
install: exfat.ko
rm -f ${MDIR}/kernel/fs/exfat/exfat.ko
install -m644 -b -D exfat.ko ${MDIR}/kernel/fs/exfat/exfat.ko
depmod -aq
uninstall:
rm -rf ${MDIR}/kernel/fs/exfat
depmod -aq
endif
.PHONY : all clean install uninstall

View File

@ -1,53 +0,0 @@
## exFAT filesystem
This is the exfat filesystem for support from the linux 4.1 kernel
to the latest kernel.
## Installing as a stand-alone module
Install prerequisite package for Fedora, RHEL:
```
yum install kernel-devel-$(uname -r)
```
Build step:
```
make
sudo make install
```
To load the driver manually, run this as root:
```
modprobe exfat
```
## Installing as a part of the kernel
1. Let's take [linux] as the path to your kernel source dir.
```
cd [linux]
cp -ar exfat [linux]/fs/
```
2. edit [linux]/fs/Kconfig
```
source "fs/fat/Kconfig"
+source "fs/exfat/Kconfig"
source "fs/ntfs/Kconfig"
```
3. edit [linux]/fs/Makefile
```
obj-$(CONFIG_FAT_FS) += fat/
+obj-$(CONFIG_EXFAT_FS) += exfat/
obj-$(CONFIG_BFS_FS) += bfs/
```
4. make menuconfig and set exfat
```
File systems --->
DOS/FAT/NT Filesystems --->
<M> exFAT filesystem support
(utf8) Default iocharset for exFAT
```
build your kernel