Я разрабатываю встраиваемый продукт, который будет работать под управлением Linux на оборудовании, аналогичном Raspberry Pi, но с внутренней памятью. Мне бы хотелось, чтобы электропитание могло быть отключено от машины и иметь очень низкий риск повреждения. Я думал, что живая версия linux не будет записывать на HDD, поэтому она никогда не будет в середине записи.

Во всех случаях использования, которые я видел, это обычно делается на USB-накопителе. Я хочу установить это на внутреннее хранилище, чтобы оно могло загружаться с него.

Также в идеальном мире было бы легко обновить изображение напрямую, например, создать файл и затем "обновить" изображение на диске, чтобы включить этот файл.

Версия Linux поддерживает что-то подобное? Кроме того, как будет работать установка, чтобы установить непостоянную установку на внутренний диск, а не на флэш-диск?

2 ответа2

2

Я занимаюсь разработкой встроенного продукта ...

Устройства, работающие на встроенном Linux, обычно имеют собственное ядро и пользовательскую корневую файловую систему. Как правило, не стоит пытаться адаптировать существующий дистрибутив Linux к пользовательскому оборудованию и использовать настольную файловую систему общего назначения для выделенного встроенного приложения.
Инструментами для создания собственного ядра Linux и корневых файловых систем являются Buildroot и Yocto.

Версия Linux поддерживает что-то подобное?

"Живая версия linux" - это просто ядро Linux, которое загружается с ramdisk или, что более вероятно, ramfs для корневой файловой системы. Я видел (а также создавал) множество встроенных систем Linux, которые используют ramfs или ramdisk для своих rootfs.
То, что вы предлагаете, не является ни уникальным, ни новым; это хорошо используемая концепция, которая имеет много вариантов реализации.

Загрузочный носитель зависит от вас и от того, что поддерживает оборудование.
Если вы хотите загрузить Linux с initramfs с жесткого диска, то единственная проблема может заключаться в том, чтобы вы научились его создавать.
В зависимости от того, какое оборудование вы используете, не может быть нового кода для разработки (кроме вашего приложения), и сборка такого ядра и rootfs будет связана с загрузкой, настройкой и сборкой существующего исходного кода.

Обновление системы на месте - сложная тема, и существует множество решений. Различные пакетные системы, используемые дистрибутивами, обычно слишком тяжелы / сложны для встроенных систем, особенно тех, которые основаны на флэш-памяти NAND.

2

Во-первых, вы можете довольно легко загрузить «живую» систему, подобную этой, с жесткого диска или другого постоянного хранилища. Просто запишите образ, который вы поместите на флэш-накопитель USB в любое хранилище, и загрузитесь с него. Многие системы типа киосков делают это, как и многие тонкие клиенты.

Тем не менее, это, вероятно, не самый лучший вариант для вашего случая использования. Я бы очень посоветовал взглянуть на то, как Android и ChromeOS обрабатывают свои корневые файловые системы. Оба устройства разработаны с учетом максимальной устойчивости к повреждениям, вызванным неожиданным отключением питания, и оба также обеспечивают защиту от несанкционированного доступа по умолчанию (IOW, вы будете знать, если кто-то изменил данные, когда устройство было выключено). Подобные настройки могут быть достигнуты без особых проблем с пользовательской корневой файловой системой, созданной Buildroot.

В качестве альтернативы этому вы могли бы рассмотреть возможность взглянуть на Alpine Linux. Он предназначен для работы с носителя только для чтения, хотя я не уверен, насколько хорошо он поддерживает вещи, отличные от 64-битных систем x86.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .