Есть ли дистрибутив Linux, который будет легко запускать «встроенный стиль» на Raspberry Pi? [закрыто]

9

Мне нужен дистрибутив Linux, который даст мне следующее:

  • Запустить на малины пи
  • Может надежно пережить потерю мощности (например, через файловую систему только для чтения)

Мне удалось найти некоторую документацию о том, как перевести обычный дистрибутив Linux в режим только для чтения. Я надеялся, что уже будет создан дистрибутив, предназначенный для работы во встроенной среде.

Мне не нужно много пакетов или драйверов, просто достаточно, чтобы Pi работал с USB / Ethernet. Мне не нужен GUI-интерфейс или что-то еще, это будет просто запуск специального сервиса, встроенного в C.

Кто-нибудь знает дистрибутив, который подойдет?

Дэн Харпер
источник
Учитывая, что это для встроенного приложения, две быстрые вещи, которые вы могли бы заметить. Во-первых, если вы решите пойти по пути Linux, посмотрите на использование ядра в реальном времени, чтобы ваша система могла реагировать достаточно быстро. Во-вторых, вы также можете настроить сторожевой таймер на выполнение действий в случае каких-либо программных циклов / ошибок.
Прорыв
Проверьте raspberrypi.stackexchange.com, но я думаю, что этот вопрос там тоже не по теме, так как это вопрос типа покупки,
Кевин Панко

Ответы:

3

Большинство встроенных систем используют собственное ядро. Одним из инструментов, способствующих этому, является 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) есть упоминание о нескольких похожих и альтернативных инструментах для построения встроенных систем.

опилки
источник
2

TinyCoreLinux по умолчанию доступен только для чтения (постоянство не является обязательным): http://www.tinycorelinux.net/ports.html

Avra
источник
Разве вы не видели заголовок "Arm V6 Raspberry Pi" на ссылке, которую я предоставил?
Авр
Кажется, я пропустил это. Upvoted;)
Мастер-подмастерье
1

Имея Seagate Dockstar с консольным доступом, я установил на нее Debian squeeze. В качестве отправной точки, чтобы заставить его работать на root только для чтения, я использовал эту прекрасную статью 1 Джеффа Доозана. Основная стратегия заключается в создании сценария, который при каждой загрузке монтирует необходимые директории для записи в виде tmpfs. Я цитирую сценарий Джеффа 2 здесь (слава Джеффу!)

#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
  echo "Mounting $DIR as tmpfs"
  mount -n -t tmpfs tmpfs $DIR
  if [ -d "$DIR-saved" ]; then
    echo "Restoring $DIR-saved to $DIR"
    tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
  fi
done

echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases

exec /sbin/init

Сохраните строки выше как скрипт с именем / sbin / init-ro на целевых rootfs и сделайте его исполняемым.

chmod 755 /sbin/init-ro

Чтобы использовать этот сценарий во время загрузки, вам нужно немного подготовить системные rootfs (все процитированы из сценария Джеффа 2 (адаптироваться $ROOTк фактическому расположению ваших смонтированных rootfs).

# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf


# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run


# Fixes from http://wiki.debian.org/ReadonlyRoot

rm $ROOT/etc/blkid.tab  > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab

rm $ROOT/etc/mtab  > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab

rm $ROOT/etc/rcS.d/S12udev-mtab

rm -rf $ROOT/var/log/*

После того, как rootfs подготовлены, как описано выше, вы можете смонтировать rootfs только для чтения в / etc / fstab (замените ext2 на используемую вами файловую систему или просто используйте вместо нее rootfs ).

/dev/root  /                 ext2  noatime,ro   0 1

Наконец, вы должны добавить следующее к параметрам вашего ядра (то есть в /boot/cmdline.txt в Raspi), чтобы запустить скрипт до фактического / sbin / init . (Ниже приведен только пример параметров root и rootdelay . Важная часть, которую необходимо добавить к строке в cmdline.txt, - это init=/sbin/init-ro.)

root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro

Но имейте в виду, что для любого программного обеспечения, требующего доступа для записи в rootfs, вы должны смонтировать соответствующие расположения tmpfs или выполнить запись во внешнее хранилище.

Andreas
источник
1

Мои 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 это происходит даже реже, чем на моем ПК.

krowe
источник
1

Если я правильно помню, файловая система только для чтения не будет «защищать» SD-карту. У меня есть 10 Pi, работающих на клиента (текущее время безотказной работы для половины из них более половины), где мощность не так стабильна, как вы ожидаете / хотите. Мне потребовалось некоторое время, чтобы найти источники питания (дешевые зарядные устройства с номиналом 3 А и «дорогие» зарядные устройства для iPad с номиналом 2,3 А), которые могли фактически поддерживать работу Pi более двух дней, до этого у меня возникали всевозможные проблемы с повреждением SD. В том числе с тем, который был использован только для чтения IIRC.

Моя проблема в основном решена сейчас (из-за новых поставок), но для будущих проектов я смотрю на создание корневой файловой системы NFS. Об этом уже есть много уроков, в основном, по обычным изображениям Пи Фа, но довольно легко сделать минимальный дебутстрап и превратить его в корневую файловую систему только для чтения поверх NFS. Соедините это с uboot для Pi и умным сценарием uboot, и ваша SD-карта будет содержать всего несколько мегабайт прошивки RPi, образа uboot и сценария uboot.

mycroes
источник
0

Я слышал хорошие вещи о Puppy Linux для этого. Хотя должен признать, что не пробовал.

Можно настроить, чтобы не записывать обратно на SD-карту.

Chenmunka
источник
-1

На странице загрузки raspberrypi.org доступны четыре изображения :

  • Debian "Wheezy"
  • Мягкий поплавок Debian "Wheezy"
  • Arch Linux ARM
  • QtonPi

А вот единственный, который по умолчанию доступен только для чтения (но его можно изменить при необходимости):

Надеюсь, один из них удовлетворит ваши потребности.

Yedric
источник
По умолчанию ни один из них не доступен только для чтения.
Алекс Чемберлен
@alex, Хороший вопрос.
Едрик
TinyCoreLinux добавлен в список. Это только для чтения по умолчанию.
Авр