LINUX.ORG.RU

обновление образа корневой файловой системы из под уже запущенной OS

 


0

1

Имеется плата VAR-SOM-MX6 (проц i.MX 6 Quad, Cortex-A9 MPCore ) со встроенным linux. Образ загрузчика (u-boot), файловой системы и ядра записан в nand flash (ubi драйвер, ubifs).

Посталена задача полного обновления (uboot, ядро, образ fs) методом втыкания (и только) usb флэшки.

пока я вижу две возможности: 1. Через u-boot (пока не разбирался, но вроде доступ к usb там имеется) 2. Через перезапись из под запущенной os. Возможен ли этот фокус, т. е. перезаписать корневую файловую систему «налету»


в смысле тебе надо uboot тоже обновить? при неудачном обновление можешь получить кусок металла :-) Кстати Uboot там встроен на spi-флешку которая 2мб, даже не знаю зачем тебе его обновлять. В общем определись если необходимо обновлять Uboot, то это намного сложнее, если Uboot трогать не надо то проще.

==> usb start
(Re)start USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
==> usb tree
USB device tree:
1 Hub (480 Mb/s, 0mA)
| u-boot EHCI Host Controller
|
+-2 Hub (480 Mb/s, 2mA)
|
+-3 Hub (480 Mb/s, 2mA)
|
+-4 Mass Storage (480 Mb/s, 200mA)
UFD 2.0 Silicon-Power4G 201201SP00320707C10C07820F95

usb read addr blk cnt - то есть этой командой ты копируешь с флешки (должен знать где у тебя ядро и где у тебя rootfs) в память по адресам addr1 addr2, после этого оттуда копируешь в аддреса где лежат твои образы uImage и rootfs (которые используются при загрузке устройства) их адреса ты можешь посмотреть в bootcmd. как то так.

splinter ★★★★★
()
Последнее исправление: splinter (всего исправлений: 1)

Делаешь tmpfs, делаешь на нём минимальную rootfs, делаешь remount / на tmpfs, после чего уже пишешь все разделы на флеше. как-то так.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Возможен ли этот фокус, т. е. перезаписать корневую файловую систему «налету»

Более чем.

devl547 ★★★★★
()
Ответ на: комментарий от Dennis7

с той, которая доступна этот фокус, вроде, не проходит

EM
() автор топика
Ответ на: комментарий от splinter

т.е. эти действия выполняются из uboot?

насчет куска металла... вроде можно (посмотрел даташит) с SD грузиться (rescue SD прилагается производителем со всеми образами).

EM
() автор топика
Ответ на: комментарий от EM

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

splinter ★★★★★
()
Ответ на: комментарий от splinter

таково задание. я только начал с этим работать... а в чем проблема? я, в свое время, занимался с blackfin-овской платой, дык я с uboot довольно просто обращался.

U-Boot 2009.08-00696-g8dc7216 (Jan 01 2014 - 21:30:14)

EM
() автор топика

Из под u-boot'а можно перезаписать всё, в т.ч. и сам u-boot. Из линукса перезаписать переменные окружения юбута, чтобы при следующей загрузке запускался скрипт, который читает usb, перезаписывает образы, и возвращает загрузку в обычный режим.

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от UVV

Есть какие-то утилиты для парсинга, где-то видел. Адрес области с переменными известен, лежит в отдельном блоке на нанде, можно прочитать, изменить и записать.

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от UVV

Как вот это делать будешь?

С этим проблем нет http://elinux.org/U-boot_environment_variables_in_linux

мне больше интересно - как он собирается u-boot из u-boot в nand переписать на i.mx6 :) для nand вариант реально только один - делать все из под linux.

anonymous
()
Ответ на: комментарий от anonymous

А в чем проблема? Из нанда юбут не работает, он грузить себя в ОЗУ (на iMX вроде в платформ-кэш). А из ОЗУ можно переписывать вся что угодно.

Puzan ★★★★★
()
Ответ на: комментарий от Puzan

А в чем проблема?

Особенность платформы i.mx6, там нужно прописывать для rom-boot увесистый заголовок, в убут это не реализовано - для linux есть специальная утилита для записи образа загрузчика в nand, на любой другой носитель c LBA можно без проблем записать и из убута.

anonymous
()
Ответ на: комментарий от anonymous

А, я наверное понял. Тогда почему нельзя raw образ туда запихнуть, вместе с заголовком?

Puzan ★★★★★
()
Ответ на: комментарий от Puzan

Если честно, не понял.

В NAND програмно доступен сам физический накопитель. Это с одной стороны хорошо (полный контроль над данными) а с другой плохо - нужно програмно обрабатывать пропуск «битых» блоков, знать геометрию носителя. Чтобы загрузчик который находится ROM смог правильно обработать данные которые записаны на носитель ему нужно сообщать информацию - где и как записаны данные. На носителях с контроллерами (FTL) - SD, mmc, SSD програмно доступна логическая структура носителя(ей) - LBA c линейной адресацией, аппапратный контроллер заботится о всех тонкостях работы с физическим накопителем. На i.mx6 нужно создавать специальную таблицу в NAND с кучей загрузочной информации.

https://community.freescale.com/thread/318332

anonymous
()
Ответ на: комментарий от anonymous

Ну так можно образом записать, вместе с заголовками, параметры то все известны. С битыми блоками только не получится.

Второй вариант - переписать u-boot из линукса, перезапуститься, и из u-boot'а переписать корневую фс.

Или использовать tmpfs, как предложили выше. Это наверное будет проще.

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от Puzan

Второй вариант - переписать u-boot из линукса

Да нет тут никакого второго варианта - это (пока) первый и единственный для NAND на i.mx6.

перезапуститься, и из u-boot'а переписать корневую фс.

а потом говорят что гланды через жопу неудобно удалять :)

anonymous
()
Ответ на: комментарий от EM

А как это первый раз делается?

Так и делается - загружается Linux любым способом и прошивается NAND, штатный вендовый Mfgtool через USB-OTG порт загружает образ Linux с initramfs. В ядре Linux у них есть специальное расширение протокола для USB

http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/drivers/usb/...

в initramfs утилитка uuc которая принимает файлы и команды, загрузчик в NAND запиывается утилитой kobs-ng.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.