poniedziałek, 31 maja 2010

Fusów ciąg dalszy

Dotychczasowa wersja linuxowego demona montującego budowane przez nas urządzenie (pisałem o tym: link) w formie systemu plików była napisana w Pythonie i miała bardziej charakteru "proof of concept", zbadania czy to ma sens. Nadszedł jednak dzień w którym zapadła decyzja o przepisaniu demona w Cpp.

Oczywiście postanowiłem skorzystać z biblioteki libfuse. Pomyślana jest ona bardzo podobnie do biblioteki dokan, czy może raczej dokan jest opracowany na podobieństwo libfuse.

Wydawało mi się, że ze względu na to podobieństwo zadanie powinno być dość proste. Okazało się jednak, że biblioteka jest dość kiepsko udokumentowana. W zasadzie co by się nie chciało zrobić, to trzeba najpierw przekopać się przez kod biblioteki.

Jednym z pierwszych problemów na jakie się natknąłem było to, że uruchomienie libfuse poprzez funkcję fuse_main startuje demona i zamyka proces. W efekcie o normalnym debugowaniu możemy zapomnieć. Pod Windowsem też się nie dało, ale tam chociaż można było robić logi w konsoli. Niestety zamknięcie procesu oznacza utratę dostępu do uchwytów konsol.
Wujek google zapytany o "debug fuse" poradził mi aby użyć opcji -d. Przełącznik ten sprawia, że fuse_main nie zamyka procesu i zaczyna wypisywać logi. Daje to również dostęp do konsoli naszym funkcjom.

Drugim dość poważnym problemem jest to, że Linux po jakimś czasie głupieje. Objawia się to tym, że nasz system plików nagle przestaje działać, a naszym oczom ukazuje się niewiele mówiący komunikat o błędzie. Zdezorientowani dodajemy logowanie w podejrzanych miejscach, cofamy ostanie zmiany, zaczynamy szukać na oślep co może być przyczyną. Pół dnia później resetujemy system i wszystko działa jak należy :(


Przy okazji tego "projektu" musiałem przenieść, część kodu z Winodwsa na Linux. Jak na razie odkryłem, że obsługa socketów nie wiele różni się pod tymi systemami. Zobaczymy co będzie z portem szeregowym.

Brak komentarzy: