Мне нужен дистрибутив Linux, который даст мне следующее:
- Запустить на малины пи
- Может надежно пережить потерю мощности (например, через файловую систему только для чтения)
Мне удалось найти некоторую документацию о том, как перевести обычный дистрибутив Linux в режим только для чтения. Я надеялся, что уже будет создан дистрибутив, предназначенный для работы во встроенной среде.
Мне не нужно много пакетов или драйверов, просто достаточно, чтобы Pi работал с USB / Ethernet. Мне не нужен GUI-интерфейс или что-то еще, это будет просто запуск специального сервиса, встроенного в C.
Кто-нибудь знает дистрибутив, который подойдет?
linux
linux-distributions
embedded
raspberry-pi
Дэн Харпер
источник
источник
Ответы:
Большинство встроенных систем используют собственное ядро. Одним из инструментов, способствующих этому, является Buildroot , набор сценариев для сборки набора инструментов GNU gcc, библиотеки uClibc вместо (огромного) GNU libc, ядра Linux, BusyBox и других утилит / пакетов для корневой файловой системы встроенной платы. RaspberryPi является относительно новой платой, поэтому его поддержка в Buildroot все еще находится в стадии разработки, но, очевидно, есть проект , другой проект и работа отдельного человека . Вероятно, будет больше по мере наращивания производства RP и улучшения распределения.
Используя Buildroot, вы можете собрать ядро Linux и корневую файловую систему точно так, как вы описали в своем вопросе. В зависимости от скорости вашего интернет-соединения и возможностей вашего ПК для разработки у вас могут быть бинарные файлы от 1 до 4+ часов. Недостатком является то, что полученные двоичные файлы не тестируются и не гарантируют успешную загрузку и выполнение. Системная консоль обязательна для отладки последовательности загрузки. См. Мой ответ для Как получить доступ к моему мини-ПК (RaspberryPi / MK802 / Mele A1000 / VIA APC) через Ethernet / Wi-Fi без монитора? Но, учитывая, что RaspberryPi был спроектирован так, чтобы его нельзя было разложить на кирпичи , этот недостаток не должен быть сдерживающим фактором при создании собственного ядра и RFS.
Относительно «выживания при потере мощности»: Правильный выбор файловой системы обычно может облегчить эту проблему. Уровень устройства MTD плюс файловая система журналирования (например, jffs2) показали себя достаточно устойчивыми из опыта. Для почти абсолютной защиты есть initramfs, который использует
ramfs
(не виртуальный диск фиксированного размера) без переключения на файловую систему R / W.добавление
30 слайдов о возможностях Buildroot уже здесь.
В конце (# 27) есть упоминание о нескольких похожих и альтернативных инструментах для построения встроенных систем.
источник
TinyCoreLinux по умолчанию доступен только для чтения (постоянство не является обязательным): http://www.tinycorelinux.net/ports.html
источник
Имея Seagate Dockstar с консольным доступом, я установил на нее Debian squeeze. В качестве отправной точки, чтобы заставить его работать на root только для чтения, я использовал эту прекрасную статью 1 Джеффа Доозана. Основная стратегия заключается в создании сценария, который при каждой загрузке монтирует необходимые директории для записи в виде tmpfs. Я цитирую сценарий Джеффа 2 здесь (слава Джеффу!)
Сохраните строки выше как скрипт с именем / sbin / init-ro на целевых rootfs и сделайте его исполняемым.
Чтобы использовать этот сценарий во время загрузки, вам нужно немного подготовить системные rootfs (все процитированы из сценария Джеффа 2 (адаптироваться
$ROOT
к фактическому расположению ваших смонтированных rootfs).После того, как rootfs подготовлены, как описано выше, вы можете смонтировать rootfs только для чтения в / etc / fstab (замените ext2 на используемую вами файловую систему или просто используйте вместо нее rootfs ).
Наконец, вы должны добавить следующее к параметрам вашего ядра (то есть в /boot/cmdline.txt в Raspi), чтобы запустить скрипт до фактического / sbin / init . (Ниже приведен только пример параметров root и rootdelay . Важная часть, которую необходимо добавить к строке в cmdline.txt, - это
init=/sbin/init-ro
.)Но имейте в виду, что для любого программного обеспечения, требующего доступа для записи в rootfs, вы должны смонтировать соответствующие расположения tmpfs или выполнить запись во внешнее хранилище.
источник
Мои 2 цента, гораздо проще (и, в конце концов, лучше) сделать надежную резервную батарею для Pi, чем жить с ОС только для чтения. Конечно, это означает, что вам понадобятся некоторые базовые знания в области электроники (и я имею в виду BASIC; мы говорим о 3-4 компонентах). Этот парень сделал модный с несколькими другими: /raspberrypi/1360/how-do-i-build-a-ups-like-battery-backup-system
Если вы делаете это, НЕ используйте LiPo; NiCad - это то, что вы хотите. LiPo не может постоянно заряжаться; Вы были предупреждены.
Кроме того, вы, кажется, очень беспокоитесь о чем-то, что, по моему опыту, является очень незначительной проблемой. Я постоянно перебиваю свои Linux-боксы, и внезапное незапланированное отключение - это само собой разумеющееся, когда меня это не беспокоит. Если вы отключите журналы, то вы редко будете получать жалобы на это.
Чтобы отключить все журналы, вы можете добавить следующую строку в качестве первого правила в /etc/rsyslog.conf:
Даже когда есть проблема, 99,9999% времени (под этим я имею в виду почти каждый раз в моем личном опыте) эта проблема решается при следующем сканировании диска. Когда это происходит, в основном зависит от погоды, ОС заметила, что вы сделали (как ни странно, обычно это не так). Поскольку Pi использует SD-карты, я думаю, что на Pi это происходит даже реже, чем на моем ПК.
источник
Если я правильно помню, файловая система только для чтения не будет «защищать» SD-карту. У меня есть 10 Pi, работающих на клиента (текущее время безотказной работы для половины из них более половины), где мощность не так стабильна, как вы ожидаете / хотите. Мне потребовалось некоторое время, чтобы найти источники питания (дешевые зарядные устройства с номиналом 3 А и «дорогие» зарядные устройства для iPad с номиналом 2,3 А), которые могли фактически поддерживать работу Pi более двух дней, до этого у меня возникали всевозможные проблемы с повреждением SD. В том числе с тем, который был использован только для чтения IIRC.
Моя проблема в основном решена сейчас (из-за новых поставок), но для будущих проектов я смотрю на создание корневой файловой системы NFS. Об этом уже есть много уроков, в основном, по обычным изображениям Пи Фа, но довольно легко сделать минимальный дебутстрап и превратить его в корневую файловую систему только для чтения поверх NFS. Соедините это с uboot для Pi и умным сценарием uboot, и ваша SD-карта будет содержать всего несколько мегабайт прошивки RPi, образа uboot и сценария uboot.
источник
Я слышал хорошие вещи о Puppy Linux для этого. Хотя должен признать, что не пробовал.
Можно настроить, чтобы не записывать обратно на SD-карту.
источник
На странице загрузки raspberrypi.org доступны четыре изображения :
А вот единственный, который по умолчанию доступен только для чтения (но его можно изменить при необходимости):
Надеюсь, один из них удовлетворит ваши потребности.
источник