Jak mówi tytuł, pracuję nad prostą aplikacją wbudowaną, która odczytuje niektóre informacje z portu szeregowego i loguje je do pliku, oprócz wyświetlania trochę statusu na wyświetlaczu.
Jestem teraz na etapie rejestrowania i wydaje się, że działa, próbuję skonfigurować system i mam kilka pytań.
System przeznaczony jest do rejestrowania danych na pamięci USB FAT32, którą można w dowolnym momencie odłączyć, podłączyć lub wymienić. Jaka jest preferowana metoda automatycznego montowania włożonej pamięci masowej USB do stałego katalogu? Wygląda na to, że pakiet usbmount prawie to robi, ale brak konserwacji sprawia, że jest on nieco ostrożny.
Nie mogę zagwarantować zasilania i przeprowadzać czystych wyłączeń. Na szczęście jedynymi plikami, które należy zapisać, oprócz wewnętrznych informacji o systemie operacyjnym, powinny być dzienniki. Czy system plików dziennika dla systemu operacyjnego uratuje mnie ode mnie, czy powinienem montować system tylko do odczytu lub majstrować przy dyskach RAM?
Czy system plików FAT na pamięci USB przetrwa i wyzdrowieje po przerwach w dostawie prądu i nagłych wyrzuceniach? Czy powinienem utworzyć nowy plik dziennika za każdym razem, gdy zostanie zamontowany?
Skonfigurowałem serwer X, aby uruchamiał się automatycznie i majstrowałem przy skryptach autostartu LXDE, aby uruchomić wyświetlanie statusu i wyłączyć menedżera okien / wygaszacz ekranu. Czy są jakieś inne przeszkody w utrzymywaniu ciągłego wyświetlania?
Rejestrator nie będzie miał dostępu do sieci Ethernet i raczej potrzebuje dokładnego zegara. Czy moduł RasClock jest odpowiednią opcją?
Przepraszamy za długi post i wiele pytań częściowo powiązanych.
Jestem przyzwyczajony do pracy z prostymi urządzeniami wbudowanymi, dla których mam pełną kontrolę nad oprogramowaniem, a zadanie prawidłowej konfiguracji prawdziwego systemu operacyjnego sprawia, że jestem trochę niespokojny. Z drugiej strony raczej podejrzewam, że nie jestem jedynym (ab-) używającym Pi do tego typu aplikacji, więc mam nadzieję, że pytania nie są zbyt szczegółowe dla mojej konkretnej sytuacji.
źródło
Odpowiedzi:
Odłączona część, która jest problematyczna. AFAIK, żaden system komputerowy nigdzie nie obiecuje ci prawa do wyrwania pamięci USB niezapowiedzianej w dowolnym momencie bez potencjalnych problemów. Musisz więc pomyśleć o tym, jak to obejść.
Ponownie odcięcie zasilania (prawie) dowolnego systemu komputerowego jest ryzykowne. To zwykle kończy się dobrze (który nie zrobił to kilka razy, przez przypadek, z powodu awarii zasilania, itp?), Ale nie wydaje się być niezwykła ilość osób zgłaszających korupcję karty SD z pi. Więc jeśli masz na myśli: „Przeważnie system nie zostanie zamknięty w sposób czysty”, musisz przemyśleć, ponieważ będzie to strategia ślepa uliczka. Należy pamiętać, że możliwe jest wyzwolenie zamknięcia bez klawiatury lub połączenia sieciowego. Możesz użyć podobnej metody, aby uruchomić czyste odmontowywanie pamięci USB.
Możesz dodać
sync
opcję,/etc/fstab
aby ograniczyć buforowanie, aleman mount
notatki:Obejmuje to karty SD, ale o ile pamiętasz o sporadycznym testowaniu (i wymianie, w razie potrzeby) swoich nośników, może to być warte zachodu. Myślę, że wpłynie to nieco na ogólną wydajność.
Staraj się więc unikać gwałtownego szarpania wtyczki lub pendrive'a najlepiej jak potrafisz, a na pewno nie projektuj konfiguracji zależnej od tego. Np. Nie mów sobie ani innym użytkownikom: „Odłączanie pamięci USB jest w dowolnym momencie możliwe”, ponieważ tak nie jest i nie można tego zrobić.
Wykonywanie odpowiednich
sync
połączeń w aplikacji (np. W stanie bezczynności lub po znaczącym zapisie) jest dobrym pomysłem.Gdy masz już wszystko, co chcesz zainstalowany i skonfigurowany , można potencjalnie zamontować główny system plików tylko do odczytu, jeśli utworzyć osobne partycje dla
/var
,/run
oraz/tmp
i zamontować te RW; możesz także utworzyć jedną taką zamontowaną partycję i dowiązać do niej katalogi rw.Na raspbian pi nie musisz się martwić
/run
, ponieważ jest to już tmpfs (RAM);/sys
i/proc
są również w pamięci RAM (ale nie używaj ich do niczego poza tym, do czego są przeznaczone). Jeśli system ma jeden cel, a wszystkie dane trafiają do pamięci USB,/var
jest to jedyny problematyczny, ale nie, moim zdaniem, krytycznie.źródło
W poprzednim życiu pracowałem nad sterownikami urządzeń, które czytają / zapisują karty pamięci. Mogą być szarpane w trakcie każdej operacji, więc nawet podtrzymanie bateryjne lub kondensatorowe nie pomoże. Na podstawie specyfikacji formatowania chipów, wywnioskowałem zachowanie wymagane do uzyskania minimalnego uszkodzenia spowodowanego przez „gorące” usuwanie i wkładanie.
Zasadniczo musisz upewnić się, że jeśli zostaniesz odcięty w połowie zapisu bloku danych (lub kontakty są niespokojne), możesz rozpoznać ten fakt. po prostu dodaj dane o numerze bloku (i długości, jeśli nie ma ustalonego rozmiaru) i dodaj na końcu numer bloku CRC i (ten sam).
Pierwszy zapis, który wykonujesz, znajduje się na końcu, a jego wartość NIE jest kolejnym numerem bloku. W ten sposób, jeśli twój zapis nie zostanie ukończony, wystąpi niedopasowanie numeru bloku, a ten blok danych jest znany jako śmieci. Następnie zapisz swój blok danych z prawdziwym numerem bloku, a następnie długością, następnie CRC wygenerowany przez twój ulubiony algorytm i ponownie prawdziwy numer bloku. (CRC ma chronić przed kontaktami, które niszczą twoje dane).
Po przywróceniu zasilania lub ponownym włożeniu karty pamięci akceptuj tylko sekwencyjne bloki do punktu, w którym numery początkowe i końcowe bloku nie są zgodne lub CRC jest niepoprawny. Usuń ten blok i wznów rejestrowanie.
Jest to jednak niski poziom. Robienie tego za pomocą systemu plików to inna historia.
To, czego naprawdę potrzebujesz, to nadmiarowe kopie swojego FAT i rób podobne rzeczy przy stole FAT. Kolejny numer powie Ci, który jest najnowszy, a dopasowanie przód / tył i CRC zapewnią integralność.
Minęła pora snu, więc mam nadzieję, że to wystarczająco jasne.
źródło
Jeśli chodzi o dokładny zegar, dostępnych jest wiele tanich modułów GPS. Trudno znaleźć dokładniejszy zegar niż ten.
źródło