Так, файлові системи в Linux можуть бути реалізовані як модулі ядра. Але є також інтерфейс FUSE (Filesystem в USErspace), який може дозволити звичайному процесу в просторі користувачів діяти як драйвер файлової системи. Якщо ви прототипуєте нову файлову систему, то її реалізація спочатку за допомогою інтерфейсу FUSE може полегшити тестування та розробку. Після того, як внутрішня частина файлової системи буде відпрацьована у формі FUSE, ви можете почати реалізовувати її оптимізовану за продуктивністю версію модуля ядра.
Ось основна інформація про реалізацію файлової системи у просторі ядра. Він досить старий (з 1996 року!), Але це, принаймні, повинно дати тобі основне уявлення про те, що потрібно робити.
Якщо ви вирішили перейти до маршруту FUSE, ось libfuse, довідкова реалізація на стороні користувача інтерфейсу FUSE.
Драйвер файлової системи як модуль ядра
По суті, функції ініціалізації модуля драйвера файлової системи потрібно просто викликати register_filesystem()
функцію та надати їй як параметр структуру, яка включає вказівник функції, який ідентифікує функцію у вашому драйвері файлової системи, яка буде використана як перший крок у визначенні вашої файлової системи тип та монтаж. На цьому етапі більше нічого не відбувається.
Коли файлова система монтується, або тип файлової системи визначений, щоб відповідати вашому драйверу, або виконується автоматичне виявлення типу файлової системи, шар віртуальної файлової системи ядра (VFS для короткого) викликає цю функцію. Це в основному говорить: "Ось вказівник на представлення рівня ядра стандартного блокового пристрою Linux. Погляньте на це, подивіться, чи це щось, з чим ви можете впоратися, а потім скажіть, що ви можете з цим зробити".
У цей момент ваш драйвер повинен прочитати все, що йому потрібно, щоб перевірити, чи є правильним драйвером для файлової системи, а потім повернути структуру, яка включає вказівники на подальші функції, які ваш драйвер може виконувати з цією конкретною файловою системою. Або якщо драйвер файлової системи не розпізнає дані на диску, він повинен повернути відповідний результат помилки, і тоді VFS або повідомить про помилку в просторі користувачів, або - якщо виконується автоматичне виявлення типу файлової системи - запитає іншу файлову систему драйвер спробувати.
Інші драйвери ядра нададуть стандартний інтерфейс блочного пристрою, тому драйверу файлової системи не доведеться реалізовувати апаратну підтримку. В основному, драйвер файлової системи може читати і записувати дискові блоки за допомогою стандартних функцій рівня ядра з наданим на нього вказівником пристрою.
Шар VFS очікує, що драйвер файлової системи зробить доступними ряд стандартних функцій для рівня VFS; декілька з них є обов'язковими для того, щоб рівень VFS зробив щось важливе з файловою системою, інші - необов’язкові, і ви можете просто повернути NULL замість вказівника на таку необов'язкову функцію.