Налаштування Малини як реєстратора даних


13

Як зазначається в заголовку, я працюю над простою вбудованою програмою, яка зчитує деяку інформацію з послідовного порту і записує її до файлу, на додаток до відображення трохи статусу на дисплеї.

Я зараз на етапі, схоже, що ведення журналу працює, і я намагаюся налаштувати систему, і у мене є пара питань.

  1. Система призначена для реєстрації даних на USB-накопичувач FAT32, який може бути відключений, підключений до мережі або замінений у будь-який час. Який бажаний метод автоматичного встановлення будь-якого вставленого USB-накопичувача у фіксований каталог? Пакет usbmount, здається, майже це робить, але відсутність обслуговування робить трохи обережнішим.

  2. Я не можу гарантувати живлення та виконувати чисті відключення. На щастя, єдині файли, які слід записати, окрім внутрішньої інформації про ОС, повинні бути журналами. Чи врятує мене файлова система для роботи в ОС від мене, або я можу встановлювати систему лише для читання або обробляти RAM-дисками?

  3. Чи виживе файлова система FAT на USB-накопичувачі і відновиться після відключення живлення та раптових викидів? Чи слід створювати новий файл журналу кожного разу, коли він встановлюється?

  4. Я налаштував X-сервер для автоматичного запуску і разом зі скриптами автоматичного запуску LXDE для запуску відображення стану та відключення менеджера вікон / заставки. Чи є якісь інші проблеми для підтримки постійного відображення?

  5. Лісоруб не матиме доступу до Ethernet і, швидше, потребує точного годинника. Чи підходить модуль RasClock?

Вибачте за довгу посаду та кілька напівзв’язаних питань.

Я звик мати справу з простими вбудованими пристроями, на яких я маю повний контроль над програмним забезпеченням, і завдання правильної настройки реальної операційної системи викликає у мене трохи занепокоєння. З іншого боку, я підозрюю, що я не єдиний (ab-), який використовує Pi для цього типу додатків, тому, сподіваюся, питання не надто конкретні для моєї конкретної ситуації.


Ви описуєте своє робоче серійне рішення USB-> десь, щоб інші потенційні реєстратори даних могли спробувати його? Я хочу отримати додаткову цінність зі свого скрепера / лісоруба / веб-камери Pi. Спасибі!
Tai Viinikka

Відповіді:


7

Система призначена для реєстрації даних на USB-накопичувач FAT32, який може бути відключений, підключений до мережі або замінений у будь-який час.

Від'єднана частина цього є проблематичною. AFAIK, жодна комп'ютерна система ніде не обіцяє вам права виймати USB-накопичувач без попереднього повідомлення в будь-який момент без можливих проблем. Тож вам доведеться подумати над тим, як це обійти.

Я не можу гарантувати живлення та виконувати чисті відключення.

Знову ж таки, раптом вимкнути живлення на (майже приблизно) будь-якій комп'ютерній системі ризиковано. Це зазвичай закінчується добре (хто не зробив цього купу раз, випадково, з - за збою живлення, і т.д.?), Але там , здається, незвичайне кількість людей , які повідомляють про корупцію SD карти з пи. Отже, якщо ви маєте на увазі: "Здебільшого система не буде вимкнута чисто", вам потрібно переосмислити, тому що це буде тупикова стратегія. Зверніть увагу, що вимкнути функцію можна без підключення клавіатури або мережі. Ви можете скористатися подібним методом, щоб викликати чисте відключення USB-палички.

Ви можете додати syncопцію, /etc/fstabщоб обмежити кешування, але man mountпримітки:

У разі носія з обмеженою кількістю циклів запису (наприклад, деякі флешки) "синхронізація" може спричинити скорочення життєвого циклу.

Сюди входять SD-карти, хоча поки ви пам’ятаєте, що з періодичністю перевіряєте (і замінюєте, якщо це доречно) свої носії, можливо, варто коштувати. Я думаю, це вплине на загальну ефективність.

Отже, намагайтеся уникати раптового вилку плагіни або USB-накопичувача, і, звичайно, не розробляйте налаштування, яке залежить від цього. Наприклад, не кажіть ні собі, ні іншим користувачам: "Добре відключати USB-роз'єм, коли захочете", оскільки це не так, і ви не можете зробити це так.

Здійснення відповідних syncдзвінків у вашій програмі (наприклад, у режимі очікування або після значного запису) - хороша ідея.

Якщо у вас є все , що ви хочете встановлений і налаштований , ви потенційно можете змонтувати кореневу файлову систему тільки для читання, якщо ви створюєте окремі розділи для /var, /runі /tmpта змонтувати ці RW; ви також можете створити один такий змонтований розділ і символізувати в ньому каталоги rw.

На raspbian pi, вам не доведеться турбуватися /run, оскільки це вже tmpfs (RAM); /sysі /procтакож є в оперативній пам'яті (але не використовуйте їх ні для чого, крім того, що вони призначені). Якщо система призначена для єдиної мети, і всі ваші дані надходять на USB-накопичувач, /varце єдино проблематично, але це не так, я думаю, критично.


Наша основна проблема полягає в тому, що живлення може відключитися в будь-який час під час аварійної зупинки, що, як я підозрюю, буде частим явищем під час тестування (отже, необхідність розпочати реєстратор). Я перевірю, що ми можемо застосувати резервний акумулятор для Pi, і, можливо, підключити якийсь датчик, щоб виявити втрату живлення. Однак моє життя було б набагато простішим, якби коренева файлова система могла бути встановлена ​​в режимі лише для читання, а USB-пам'ять захищається періодичними флешами тощо.
doynax

@doynax: Можна запустити кореневу файлову систему RO. Я не маю жодного досвіду з цим, але я додав кілька пунктів наприкінці про те, що, на мою думку, є основними проблемами.
золотинки

2

У колишньому житті я працював над драйверами пристроїв, які читали / писали карти пам'яті. Вони можуть бути забиті в середині будь-якої операції, тому навіть резервна батарея чи конденсатор не забезпечать живлення. На основі специфікацій форматування чіпів, я зробив висновок про поведінку, необхідну для мінімальної шкоди, заподіяної "гарячим" видаленням та вставкою.

По суті, те, що вам потрібно зробити, це переконатись, що якщо ви відрізаєте середину запису блоку даних (або контакти білки), ви зможете розпізнати факт. в основному додайте дані з номером блоку (і довжиною, якщо не фіксований розмір), а в кінці додайте crc та (той самий) номер блоку.

Перше записування, яке ви робите, знаходиться в кінці, зі значенням, яке НЕ є наступним номером блоку. Таким чином, якщо запис не завершиться, виникла невідповідність числа блоків, і цей блок даних, як відомо, є сміттям. Потім запишіть свій блок даних з реальним номером блоку, а потім довжиною, а потім вашим CRC, згенерованим улюбленим алгоритмом, і реальним номером блоку знову. (CRC - це захист від контактів, що пошкоджують ваші дані).

Коли живлення відновлюється або картка пам’яті знову вставляється, приймайте лише послідовні блоки до тієї точки, яку починаються та закінчуються номери блоку, або номер CRC неправильний. Видаліть цей блок і відновіть журнал.

Хоча це низький рівень речей. Робити це через файлову систему - це вже інша історія.

Те, що вам справді потрібно, - це зайві копії вашого FAT, і зробіть подібну річ навколо столу FAT. Послідовний номер підкаже, який є останнім, а відповідність передньої / задньої частини та CRC забезпечать цілісність.

Минуло мою сну, тому я сподіваюся, що це досить ясно.


1

Що стосується точного годинника, тут доступно багато дешевих GPS-модулів. Важко знайти більш точний годинник, ніж цей.


Це відмінна пропозиція. Врятуйте нам проблеми встановлення годинника та поводження з акумулятором. Нам просто потрібно буде відслідковувати часовий пояс (і правила DST, я думаю,), і для чистого реєстратора даних універсальний час повинен бути нормальним.
doynax

Чи працює GPS-модуль у приміщенні, коли жодна частина неба не видно і все ще надає перевагу над простим RTC?
Стефан Гурішон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.