реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> RO rootfs, корневая ФС только для чтения.
MikleV
сообщение Jun 1 2015, 14:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-05-15
Пользователь №: 86 697



Добрый день!
Хочется сделать rootfs только для чтения и небольшой кусочек с конфигами rw. Физически я это представляю так: Linux и rootfs в NAND и они read only. Далее инит скрипт цепляет фс c EEPROM, с текстовыми конфигами и вытягивает в ОЗУ и монтирует в /tmp (NAND EEPROM и /tmp взяты для примера).
Кто нибудь делал подобное? Как мне ограничить область озу где будут сидеть эти конфиги от перезаписи? Как в инит скрипте их инициализировать? Какие могут возникнуть проблемы ведь дальше программы надо будет запускать с этими конфигами? Как их записывать и понять что они записались?
Чтобы два раза не вставать еще вопросик. Как обычно делают обновление в подобных встроенных системах (я себе представляю это обновлением части rootfs)
Go to the top of the page
 
+Quote Post
alx2
сообщение Jun 2 2015, 04:03
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MikleV @ Jun 1 2015, 20:03) *
Как мне ограничить область озу где будут сидеть эти конфиги от перезаписи? Как в инит скрипте их инициализировать?

Воспользуйтесь tmpfs:
mount -t tmpfs tmpfs /tmp/ram
Как инициализировать - смонтируйте куда-нибудь fs из eeprom, скопируйте содержимое в /tmp/ram, размонтируйте eeprom.
Ограничивать Вам ничего не надо, это забота ядра.

Цитата(MikleV @ Jun 1 2015, 20:03) *
Какие могут возникнуть проблемы ведь дальше программы надо будет запускать с этими конфигами?

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

Цитата(MikleV @ Jun 1 2015, 20:03) *
Как их записывать и понять что они записались?

Не понял... Как записывать кого? Файлы? Открыть файл вызовом open(), записать вызовом write(), закрыть вызовом close(). Успешность каждой из этих операций контролируется по возвращаемым или значениям.

Цитата(MikleV @ Jun 1 2015, 20:03) *
Чтобы два раза не вставать еще вопросик. Как обычно делают обновление в подобных встроенных системах (я себе представляю это обновлением части rootfs)

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

1. Использование пакетов и пакетного менеджера - то есть точно так же как в обычных десктопных системах: есть репозиторий пакетов на сайте в интернете, пакетный менеджер оттуда скачивает и устанавливает обновления. Удобно когда разные экземпляры устройства могут иметь разный набор установленных пакетов, когда общий объем софта достаточно большой, и когда требуется минимизировать (или исключить) время простоя системы в процессе обновления. Раз Вы говорите об обновлении части rootfs, то это - ваш метод. На время обновления rootfs придется, естественно, перемонтировать в режиме rw.

2. Обновление целиком - загрузчик (например u-boot) загружает откуда-то и записывает в ПЗУ готовый образ. Удобно когда общий объем данных небольшой, и когда устройство не содержит уникальных данных. Недостатки - любое даже незначительное обновление требует загрузки всего образа, для любого обновления требуется перезагрузка системы, следовательно, перерыв в работе устройства.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
MikleV
сообщение Jun 2 2015, 05:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-05-15
Пользователь №: 86 697



Спасибо исчерпывающе. Почитал про tmpfs все отлично но есть проблемка обратной записи в EEPROM. При этом получается что после записи каких-то данных в tmpfs(которая у нас типа копия EEPROM) мы должны подмонтировать устройство обратно и записать то что у нас находиться в tmpfs в EEPROM и отмонтировать его (а если я там лог собираю? не нужный потом для записи).

Про пакеты и пакетный менеджер. Получается я должен собрать для своего SoC этот пакетный менеджер, скопировать туда разместить в устройстве небольшую БД установленных пакетов. Мне кажется это "не наш метод". (к слову у меня imx287) Обновление я так предполагаю будет через ВЕБ интерфейс (наподобие роутеров всяких WiFi ных). Неужели для этого все же нужен отдельный загрузчик? Uboot поддерживает WEB сервер на себе или ему передать можно переменные новой загрузки через файл какой-то? Где это можно почитать посмотреть? Я так полагаю на OpenWRT (к слову я пытался там про CGI почитать - ну очень мало)
Go to the top of the page
 
+Quote Post
psL
сообщение Jun 3 2015, 08:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



а не проще ли просто выделить под настройки отдельный раздел на mtd устройстве и смонтировать его как хочется (/etc в rw)?
Go to the top of the page
 
+Quote Post
MikleV
сообщение Jun 3 2015, 10:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-05-15
Пользователь №: 86 697



Может и проще будет действительно. Мне тут нужна консультация. Физически mtd у меня NAND. На данный момент она видится в системе как пара символьных и пара блочных устройств. Т.е. мне ее надо разбить.отформатировать на следующие разделы:
kernel image RO
rootfs RO
/tmp RW
Т.е. бутлет инициализирует питание, ОЗУ, NAND и дает команду вычитывать первый раздел с NAND оттуда грузиться ядро(ну или uboot) с драйвером ФС и командной строкой в которой прописано что rootfs читать с такого-то раздела NAND, монтирует rootfs, используя драйвер jffs уже ядра, запускает init и далее уже где-то в скриптах монтирует в систему /tmp. Т.е. NAND уже должен быть отформатирован чтобы я мог прописать название партиций.

С другой стороны не хочется NAND дергать постоянно на запись. Проще по SPI подключить EEPROM и монтировать ее куда надо.
Go to the top of the page
 
+Quote Post
mobidev
сообщение Jun 3 2015, 11:04
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 22-06-08
Из: Краснодарский край
Пользователь №: 38 488



Цитата(MikleV @ Jun 2 2015, 09:35) *
Про пакеты и пакетный менеджер. Получается я должен собрать для своего SoC этот пакетный менеджер, скопировать туда разместить в устройстве небольшую БД установленных пакетов. Мне кажется это "не наш метод". (к слову у меня imx287) Обновление я так предполагаю будет через ВЕБ интерфейс (наподобие роутеров всяких WiFi ных). Неужели для этого все же нужен отдельный загрузчик? Uboot поддерживает WEB сервер на себе или ему передать можно переменные новой загрузки через файл какой-то? Где это можно почитать посмотреть? Я так полагаю на OpenWRT (к слову я пытался там про CGI почитать - ну очень мало)


Судя по этим предложениям топикстартер не сильно знаком с Linux, может поэтому и много вопросов?


Go to the top of the page
 
+Quote Post
psL
сообщение Jun 3 2015, 11:34
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



С spi eeprom видимо будет удобнее вообще через sysfs работать, т.к. объем небольшой


Цитата(MikleV @ Jun 2 2015, 08:35) *
Обновление я так предполагаю будет через ВЕБ интерфейс (наподобие роутеров всяких WiFi ных). Неужели для этого все же нужен отдельный загрузчик? Uboot поддерживает WEB сервер на себе или ему передать можно переменные новой загрузки через файл какой-то?

На веб-сервер в линуксе грузится архив обновления методом post, скрипт на стороне сервера проверяет целостность архива и распаковывает его, ну а дальше - в зависимости от содержимого архива: либо меняются отдельные файлы, либо перезаписываются образы разделов, либо подкачивается обновление из репозиториев.
В случае перезаписи разделов нужно больше памяти,ну и корень нужен другой в ram
В случае обновления из репозиториев видимо придется как-то изголяться в offline.
Думаю, обновление через веб через загрузчик - это как-то сложно. Обновление через загрузчик удобнее для обновления с каких-то внешних носителей. Типа нажали три кнопки - загрузчик пошел по другой ветке, нашел образы на sd карте, все перепрошил и загрузил.
Go to the top of the page
 
+Quote Post
alx2
сообщение Jun 3 2015, 12:25
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MikleV @ Jun 2 2015, 11:35) *
Про пакеты и пакетный менеджер. Получается я должен собрать для своего SoC этот пакетный менеджер, скопировать туда разместить в устройстве небольшую БД установленных пакетов. Мне кажется это "не наш метод". (к слову у меня imx287)

Почему же? Что именно Вас смущает?
Обновление через менеджер пакетов работает примерно так:
1. Менеджер скачивает с некоего сервера (http/ftp) свежий список пакетов.
2. Сравнивает версии установленных пакетов с имеющимися в списке.
(как альтернативный вариант, вместо пунктов 1 и 2 можно вручную передать на устройство файл пакета, о чем написали выше)
3. Если в списке обнаружены пакеты новее, чем установленные в данный момент, эти пакеты скачиваются, распаковываются и устанавливаются на место старых. Причем установка - это не просто копирование новых файлов на место старых. Пакет может, например, содержать скрипты, выполняющиеся при установке/удалении/обновлении...

Цитата(MikleV @ Jun 2 2015, 11:35) *
Обновление я так предполагаю будет через ВЕБ интерфейс (наподобие роутеров всяких WiFi ных). Неужели для этого все же нужен отдельный загрузчик? Uboot поддерживает WEB сервер на себе или ему передать можно переменные новой загрузки через файл какой-то?

При использовании пакетного менеджера как раз никакая перезагрузка не требуется. Система обновляет себя сама без участия u-boot или какого-либо еще загрузчика.
У меня устройства прекрасно обновляются нажатием в веб-интерфейсе кнопки "Проверить обновления", и затем (если показывает, что обновления есть) "Выполнить обновление"...

А u-boot, конечно же, никакого web-сервера не имеет...

Сообщение отредактировал alx2 - Jun 3 2015, 12:28


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
mobidev
сообщение Jun 3 2015, 13:29
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 22-06-08
Из: Краснодарский край
Пользователь №: 38 488



Цитата(MikleV @ Jun 2 2015, 09:35) *
Uboot поддерживает WEB сервер на себе или ему передать можно переменные новой загрузки через файл какой-то? Где это можно почитать посмотреть?


Небольшой пример по boot есть на http://www.zao-zeo.ru/dokuwiki/doku.php/u-boot

Вообще Вы не описали конфигурацию своей системы, может в Вашем конкретном случае можно грузить через uboot только ядро,
а fs держать например на NFS:
1) http://www.stlinux.com/u-boot/kernel-booting
2) http://www.denx.de/wiki/view/DULG/LinuxNfsRoot

тогда отпадает необходимость апдейта firmware как таковой, но опять же всё зависит от конфигурации вашего случая!
Go to the top of the page
 
+Quote Post
MikleV
сообщение Jun 3 2015, 13:58
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-05-15
Пользователь №: 86 697



Вы сильно не пинайте просто мне приходиться в данный момент быть "и швец и жнец и на дуде игрец". По большой части со всеми этими кусочками я работал на серверных системах. С embedded немного другая жизнь постоянно приходится к аппаратной части привязываться и к BSP. Я пока собираю под задачи ПО и адаптирую код немного под железку. Следующий этап будет написание CGI прослойки для конфигурирования железяки через WEB (пока начну с примитивных текстовых или строковых конфигов). Ну и последний этап - возможность обновления ПО. По CGI и обновлениям я в режиме накопления информации. help.gif
C rpm(а именно он идет в составе моей BSP) я попробую поиграться и насколько я представляю пакетные менеджеры они могут работать как с репозиторием так и с отдельными оффлайн пакетами. В этом случае онлайн репозиторий надо городить либо оборачивать пакеты или группы пакетов скачивать их на устройство и потом разбирать.(вот это более реально в смысле оффлайн)
Про режимы загрузки: NFS конечно очень удобно но боюсь в моем случае в реальном применении этого не будет (максимум ФТП какой нибудь с конфигами xml ными)
Go to the top of the page
 
+Quote Post
Legath
сообщение Jun 4 2015, 07:42
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



Цитата(MikleV @ Jun 3 2015, 16:58) *
Вы сильно не пинайте просто мне приходиться в данный момент быть "и швец и жнец и на дуде игрец". По большой части со всеми этими кусочками я работал на серверных системах. С embedded немного другая жизнь постоянно приходится к аппаратной части привязываться и к BSP. Я пока собираю под задачи ПО и адаптирую код немного под железку. Следующий этап будет написание CGI прослойки для конфигурирования железяки через WEB (пока начну с примитивных текстовых или строковых конфигов). Ну и последний этап - возможность обновления ПО. По CGI и обновлениям я в режиме накопления информации. help.gif
C rpm(а именно он идет в составе моей BSP) я попробую поиграться и насколько я представляю пакетные менеджеры они могут работать как с репозиторием так и с отдельными оффлайн пакетами. В этом случае онлайн репозиторий надо городить либо оборачивать пакеты или группы пакетов скачивать их на устройство и потом разбирать.(вот это более реально в смысле оффлайн)
Про режимы загрузки: NFS конечно очень удобно но боюсь в моем случае в реальном применении этого не будет (максимум ФТП какой нибудь с конфигами xml ными)



nand флешки хорошо дружат с yaffs2. поэтому вы вполне можете иметь три раздела на флешке.
Go to the top of the page
 
+Quote Post
MikleV
сообщение Jun 4 2015, 10:16
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-05-15
Пользователь №: 86 697



Цитата(Legath @ Jun 4 2015, 10:42) *
nand флешки хорошо дружат с yaffs2. поэтому вы вполне можете иметь три раздела на флешке.


BSP шное ядро yaffs2 не поддерживает. Для NAND UBIFS и JFFS2 поддерживается
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jun 15 2015, 20:25
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



А что мешает сделать две партишн и одну монтировать как read only, а вторую как read/write?
Go to the top of the page
 
+Quote Post
MikleV
сообщение Jul 29 2015, 06:36
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-05-15
Пользователь №: 86 697



У меня такой вопрос возник. Ядро на первом этапе само монтирует для себя файловую систему в соответствии с аргументами командной строки. Смая внятная статья на эту тему Статья Т.е. ядро формирует для себя небольшую файловую систему там всего несколько папок создается по умолчанию потом оно в /dev прицепляет то что в командной строке обозначает хардварный диск и потом там ищет и запускает уже init. В моем случае это инит busybox-а и дальше начинается канитель с инициализирующими скриптами. Фактически та часть памяти которую ядро заняло для процесса поиска и запуска init не нужна и может быть освобождена. В какой момент размонтируется то что ядро для себя создало и какими механизмами? Зачем в принципе в командной строке ядра есть опции ro и rw если потом в инициализирующих скриптах можно все перевернуть?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016