Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохранить измениня в системе с ramfs/tmpfs
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
arhiv6
Добрый день. Начал ковырять отладочную плату с ARM9 и изучать Linux во встраиваемых системах. Пока изучаю примеры, которые идут с платой, читаю информацию. Появились некоторые вопросы, например:
1) в системах с ramfs/tmpfs есть возможность сохранить все изменений в файловой системе? Сейчас, если хочу поменять какой-то конфиг или скрипт, приходится пересобирать rootfs и заново целиком переписывать.
2) как правильно хранить настройки, которые периодически меняются (например, какой-то один конфигурационный файл)?
3) посоветуйте, пожалуйста, где можно почитать (блоги, статьи, книжки) про по Embedded Linux?
Olej
Цитата(arhiv6 @ Jun 26 2017, 09:23) *
3) посоветуйте, пожалуйста, где можно почитать (блоги, статьи, книжки) про по Embedded Linux?

Linux по-русски
Linux для программиста

Цитата(arhiv6 @ Jun 26 2017, 09:23) *
2) как правильно хранить настройки, которые периодически меняются (например, какой-то один конфигурационный файл)?

Зачем вам один?
Здесь нет реестров, ульев, здесь не водятся пчёлы ... одним словом "здесь вам не вынь-да" laughing.gif
Основные принципы UNIX (а Linux один из них), сформулированные лет 45 назад:
1. все конфигурации (настройки) хранятся в текстовых файлах
2. в форматах по принципу: <имя_параметра> = <значение>
3. конфигурации каждой подсистемы хранятся в своём отдельном файле конфига
arhiv6
Olej, с философией UNIX-way знаком, одобряю, Вы меня неправильно поняли просто.

Как я себе представляю: в целях экономии ресурса флешки при старте системы образ rootfs разворачивается в ram и вся работа идёт там, т.е. на флешку ничего не пишется. Запись может потребоваться в двух случаях:
1) Вносится изменение в образ rootfs (например, меняется како-то системный скрипт).
2) Сохранение пользовательских настроек (например, для этого есть один конфигурационный файл)

Сейчас я для обоих пунктов вынужден делать полную пересборку rootfs на компьютере и потом переписывать её на флешку на плате. На одной сторонней железке я когда-то встречал другое - при старте системы самописная утилита из последнего сектора флешки вычитывает данные в файл с пользовательскими настройками и когда необходимо - туда же сохраняла; rootfs тоже самописной утилитой обновлять можно было, минуты 4 длилось. А других способов я не знаю - у меня просто опыта нету, вот я и хочу узнать, как такие вещи делаются (какие вообще бывают подходы и как это делать правильно).
AHTOXA
Для этого применяют OverlayFS. Я как-то поднимал такую на openwrt, всё работало. К сожалению, подробностей не помню - сделал и забыл.
gerber
Цитата(arhiv6 @ Jun 26 2017, 15:55) *
Как я себе представляю: в целях экономии ресурса флешки при старте системы образ rootfs разворачивается в ram и вся работа идёт там, т.е. на флешку ничего не пишется. Запись может потребоваться в двух случаях:
1) Вносится изменение в образ rootfs (например, меняется како-то системный скрипт).
2) Сохранение пользовательских настроек (например, для этого есть один конфигурационный файл)

Цель ramfs - вовсе не экономия ресурса флэшки, а стремление сделать систему "неубиваемой", то есть 1) устойчивой к внезапному выключению питания, даже во время записи файлов, 2) самоочищаемой от всяких временных файлов, логов и т. п. , которые могут со временем переполнить небольшой (как правило, в таких системах) носитель.
Запись туда может понадобиться в 2-х случаях (как вы правильно заметили) - 1) на этапе отладки, для правки какого-то скрипта или конфига, 2) в процессе работы системы для сохранения каких-либо данных (настроек), меняемых в процессе работы.
В первом случае, чтобы каждый раз не пересобирать rootfs, нужно вам разобраться, как смонтировать образ rootfs с правами записи. После чего монтируем его с правами rw, вносим изменения в файлы, sync, размонтируем. Если образ - это gzip-архив (даже его имя не оканчивается на .gz), то вносить изменения можно стандартными средствами gzip, вплоть до mc.
Второй случай рушит основную цель ramfs (см. выше). Поэтому сохранение настроек в таких системах продумывается особо, с оглядкой на то, что процесс записи в любой момент может быть прерван. Поэтому "тупо" обычный флэш-носитель, смонтированный при загрузке с правами RW не очень правильное решение. Во всяком случае, софт должен быть готов, что настройки окажутся недоступными, и стартануть с настройками по умолчанию и восстановить хранилище этих настроек.
Tarbal
Скажу банальность, но поскольку вы начинающий, то можете и не знать.
Для разработки часто монтируют файловую систему на NFS. Еще ядро грузят с TFTP. Это два разных момента. Их можно и по отдельности использовать.
Прикол вот в чем.
На самом устройстве нет ни ядра ни файловой системы. В конфигурации загрузчика вы указываете где (IP address комьпьютера) брать ядро и где монтировать файловую систему.
Так ваша система будет не в оперативной памяти вашего устройства, а на удаленном компьютере.

В интернете много рессурсов с объяснениями как делать. Будут вопросы -- отвечу.
vvu
Цитата(arhiv6 @ Jun 26 2017, 09:23) *
Добрый день. Начал ковырять отладочную плату с ARM9 и изучать Linux во встраиваемых системах. Пока изучаю примеры, которые идут с платой, читаю информацию. Появились некоторые вопросы, например:
1) в системах с ramfs/tmpfs есть возможность сохранить все изменений в файловой системе? Сейчас, если хочу поменять какой-то конфиг или скрипт, приходится пересобирать rootfs и заново целиком переписывать.
2) как правильно хранить настройки, которые периодически меняются (например, какой-то один конфигурационный файл)?
3) посоветуйте, пожалуйста, где можно почитать (блоги, статьи, книжки) про по Embedded Linux?


Если еще актуально...
Скорее всего конфиги придется хранить вне файловой системы. Как это делалось в игровых автоматах. На I2C шине сидел контроллер с лампочками/кнопочками и пр., заодно его NVRAM юзалась для конфигов и как storage для апликухи. Вы же можете прямо на шину какую-нибудь 24Сxx подцепить.
Tarbal
Цитата(vvu @ Aug 15 2017, 15:12) *
Если еще актуально...
Скорее всего конфиги придется хранить вне файловой системы. Как это делалось в игровых автоматах. На I2C шине сидел контроллер с лампочками/кнопочками и пр., заодно его NVRAM юзалась для конфигов и как storage для апликухи. Вы же можете прямо на шину какую-нибудь 24Сxx подцепить.


Ну почему же? Можно подлключить флешку, смонтировать ее и на ней все хранить.
vvu
Цитата(Tarbal @ Aug 21 2017, 05:25) *
Ну почему же? Можно подлключить флешку, смонтировать ее и на ней все хранить.


То уже не будет ramfs/tmpfs, как изначально требовалось.
Tarbal
Цитата(vvu @ Aug 22 2017, 19:59) *
То уже не будет ramfs/tmpfs, как изначально требовалось.


Чудес на свете не бывает. В ОЗУ информация не переживает выключения питания.
Я советовал место хранения скриптов, которые можно скриптом переписать в те места ramfs где им место.
krux
а в чем проблема сделать второй раздел на флешке?
в нормальной жизни монтировать его в RO, читать настройки в ramfs, размонтировать.
при необходимости сохранить - cмонтировать в RW, записать, размонтировать.
если уровень паранойи повышен - можно даже сделать разделов два - основной-резервный, с контрольными суммами, и прочим блэкджеком и танцовщицами.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.