Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разработка embedded системы и первые вопросы.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Yury Sokolov
Привет всем,

Имеется дев кит на базе AT91SAM9X25, стоит задача разработать embedded систему способную к апгрейдам, конфигурациям, логированием и т д. В качатсве внешней памяти используется NAND Flash 256Mb имеющая ограниченный цыкл перезаписи плюс запись ведётся постранично. Поэтому вопрос заключается в следующем: Как и где хранить изменяющиеся части корневой файловой системы, а именной /etc /home /var/log ?

На NAND флешке выделяю два раздела под корневую файловую систему. В первый раздел заливаю файловую систему SquashFS c содержимым которое изменяется только при апгрейде – программы, библиотеки (/bin /sbin /lib). Во второй раздел заливаю файловую систему UBI с содержимым /etc /home /var. Логи будут писаться не только системные, но и от приложений.
Есть опасение, что NAND будет быстро умирать от частой перезаписи логов. Какие могут быть пути решения данной проблемы? Или же с использованием UBIfs флешку нереально убить?
vshemm
UBIFS поддерживает wear leveling, что частично решает проблему износа. Конечно, флешку убить все еще можно, но тут ничего не поделаешь.

С точки зрения равномерности износа делить NAND на разделы смысла не имеет, разве что так будет удобнее делать апгрейд неизменяемой части. К тому же, UBIFS поддерживает прозрачную компрессию, поэтому SquashFS существенной выгоды не принесет.

В целом, описанный подход довольно грамотный, так обычно и делают. Но всегда есть нюансы sm.gif
kurtis
Логи можно писать в tmpfs, который в ОЗУ находится. Но тут уже нужно смотреть что за логи, если, грубо говоря, вам нужно температуру измерять, и эта данные нужно где-то хранить, то этот вариант вам не сильно подойдет, а если просто посмотреть что в системе происходит, то tmpfs для вас самое оно. Дальше уже нужно смотреть используете ли вы системные демоны журналирования, или что-то свое делаете. Некоторые из интересующих вас вопросов рассмотрены в книге http://shop.oreilly.com/product/9780596002220.do
Tarbal
Сислог можно сконфигурировать для посылки UDP пакетов вместо (можно и оба сделать одновременно. Как советовали писать в tmpfx) записи на свой диск, а удаленный компьютер будет писать их в свой лог файл. Это легко конфигурируется. Можно по USB подключить флешку и писать на нее. Накроется -- легко поменять.
Yury Sokolov
Цитата(vshemm @ Aug 20 2013, 16:33) *
UBIFS поддерживает wear leveling, что частично решает проблему износа. Конечно, флешку убить все еще можно, но тут ничего не поделаешь.

С точки зрения равномерности износа делить NAND на разделы смысла не имеет, разве что так будет удобнее делать апгрейд неизменяемой части. К тому же, UBIFS поддерживает прозрачную компрессию, поэтому SquashFS существенной выгоды не принесет.

В целом, описанный подход довольно грамотный, так обычно и делают. Но всегда есть нюансы sm.gif



Спасибо за ответы.

В качестве части read only корневой буду использовать UBIFS (маунтить с опцией ro). С логами подумаю может быть на карточку памяти буду писать дабы избежать износа нанда.
По ходу дела столкнулся с проблемой - отделил раздел 8 мб для хранения конфигураций т е каталога /etc, заливаю на него готовый образ UBI (~2Мб), но при маунте получаю ошибку:
# mount -t ubifs -o rw ubi1:partition1 /rw_rootfs/
UBIFS error (pid 587): validate_sb: bad superblock, error 8
mount: mounting ubi1:partition1 on /rw_rootfs/ failed: Invalid argument

С частью read only на которую я отделил 32Мб, файловая система цепляется нормально, тоесть есть ограничение на минимальный размер UBIFS. Нагуглил что эту проблему можно решить используя дополнительную опцию при создании образа - mkfs.ubifs --jrn-size
Разъясните плиз с чем это связано и как правильно, это проблему решить? (размер страницы нанда 128кб)

Или же в эмбедерстве для хранения конфигурации и своих настроек есть какой то другой метод? Возможно для этого стоит использовать jffs2 ?
Dron_Gus
Я обычно для настроек использую env u-boot'а. К нему можно обращаться и из линукса (fw_printenv/fw_setenv).
А подобная ошибка с UBIFS у меня выскакивала, когда я как-то неверно насаживал UBI на MTD. Там есть какая-то хитрость со смещением на размер блока.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.