Tak, systemy plików w systemie Linux mogą być implementowane jako moduły jądra. Ale istnieje również interfejs FUSE (system plików w USErspace), który może pozwolić zwykłemu procesowi przestrzeni użytkownika działać jako sterownik systemu plików. Jeśli prototypujesz nowy system plików, jego wdrożenie za pomocą interfejsu FUSE może ułatwić testowanie i rozwój. Gdy elementy wewnętrzne systemu plików zostaną opracowane w formie FUSE, możesz rozpocząć wdrażanie zoptymalizowanej pod kątem wydajności wersji modułu jądra.
Oto kilka podstawowych informacji na temat implementacji systemu plików w przestrzeni jądra. Jest raczej stary (od 1996 roku!), Ale powinien przynajmniej dać ci podstawowy pomysł na rzeczy, które musisz zrobić.
Jeśli zdecydujesz się przejść na trasę FUSE, oto libfuse, referencyjna implementacja strony przestrzeni użytkownika interfejsu FUSE.
Sterownik systemu plików jako moduł jądra
Zasadniczo funkcja inicjalizacji modułu sterownika systemu plików musi tylko wywołać register_filesystem()
funkcję i nadać jej jako parametr strukturę zawierającą wskaźnik funkcji, który identyfikuje funkcję w sterowniku systemu plików, która będzie używana jako pierwszy krok w identyfikacji systemu plików wpisz i zamontuj go. Na tym etapie nic więcej się nie dzieje.
Kiedy system plików jest montowany i albo typ systemu plików jest określony, aby pasował do sterownika, lub wykonywane jest automatyczne wykrywanie typu systemu plików, warstwa wirtualnego systemu plików jądra (w skrócie VFS) wywoła tę funkcję. Mówi w zasadzie: „Oto wskaźnik do reprezentacji standardowego urządzenia blokowego systemu Linux na poziomie jądra. Spójrz na to, sprawdź, czy możesz to obsłużyć, a następnie powiedz mi, co możesz z tym zrobić”.
W tym momencie sterownik powinien przeczytać wszystko, czego potrzebuje, aby sprawdzić, czy jest odpowiedni sterownik dla systemu plików, a następnie zwrócić strukturę zawierającą wskaźniki do dalszych funkcji, które sterownik może wykonywać w tym konkretnym systemie plików. Lub jeśli sterownik systemu plików nie rozpoznaje danych na dysku, powinien zwrócić odpowiedni wynik błędu, a następnie VFS zgłosi awarię do przestrzeni użytkownika lub - jeśli wykonywane jest automatyczne wykrywanie typu systemu plików - zapyta inny system plików sterownik, aby spróbować.
Pozostałe sterowniki w jądrze zapewnią standardowy interfejs urządzenia blokowego, więc sterownik systemu plików nie będzie musiał implementować obsługi sprzętowej. Zasadniczo sterownik systemu plików może odczytywać i zapisywać bloki dyskowe przy użyciu standardowych funkcji na poziomie jądra z podanym wskaźnikiem urządzenia.
Warstwa VFS oczekuje, że sterownik systemu plików udostępni szereg standardowych funkcji dla warstwy VFS; niektóre z nich są obowiązkowe, aby warstwa VFS mogła zrobić coś sensownego z systemem plików, inne są opcjonalne i możesz po prostu zwrócić NULL zamiast wskaźnika do takiej opcjonalnej funkcji.