Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чем и как прочитать образ из NAND?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
no_d@t@
Может быть туплю, сильно не пинайте sm.gif

Итак вопрос: собрал свою плату на процессоре Sitara AM1705, в NAND по UART записал U-boot, затем из под U-boot прошил в NAND ядро Linux, файловую систему, затем из под Linux записал в NAND свое приложение, протестировал работоспособность.
Теперь мне нужно прочитать из NAND полученный образ (U-boot + Linux + rootFS + приложение) и записать этот образ в другие платы. Типовая вобщем-то задача.
Каким образом можно вычитать образ из NAND?
Подозреваю, что мне потребуется Code Composer Studio и JTAG?
Или как-то еще?

П.С.: До того как перейти на Texas, работал с ARM9 от Atmel, так там была прекрасная утилита SAM-BA. Она позволяла (в удобном графическом режиме) записать/прочитать флеш память по USB...
mempfis_
Цитата(no_d@t@ @ Jan 15 2013, 16:38) *
Каким образом можно вычитать образ из NAND?


Сам u-boot не позволяет это сделать?
http://wiki.starterkit.ru/uboot

Там встречаются команды.
nand read - <адрес> <смещение> <размер>
nand write - <адрес> <смещение> <размер>
no_d@t@
Цитата(mempfis_ @ Jan 15 2013, 16:52) *
Сам u-boot не позволяет это сделать?


С помощью u-boot я вроде как могу вычитать содержимое NAND в ОЗУ.
А что дальше с этим делать? Как передать прочитанное на хост?
Вопросы задал навскидку, еще не разбирался. Завтра приду на работу, почитаю.
alx2
Цитата(no_d@t@ @ Jan 15 2013, 18:17) *
А что дальше с этим делать? Как передать прочитанное на хост?

А это уже от вашей платы зависит. Какие интерфейсы у нее есть? RS232? USB? Слот SD-карты?
В зависимости от того, куда Вы хотите данные из ОЗУ вывести, в u-boot должны быть соответствующие средства.
Например вывести в компьютер через RS232 можно по протоколу kermit командой saves...

Кстати, проще наверное из линукса скопировать разделы флешки (u-boot, его переменные, линукс и файловую систему) с помощью dd куда Вам надо, а потом склеить в единый образ...
no_d@t@
Цитата(alx2 @ Jan 16 2013, 09:36) *
А это уже от вашей платы зависит. Какие интерфейсы у нее есть? RS232? USB? Слот SD-карты?

Интерфейсы - RS232 и Ethernet.

Цитата(alx2 @ Jan 16 2013, 09:36) *
Например вывести в компьютер через RS232 можно по протоколу kermit командой saves...

Так почему-то не получилось, saves не удалось связаться ни с HyperTerminal, ни с ZOC. Хотя помнится, что loadb без проблем работала с HyperTerminal.

Цитата(alx2 @ Jan 16 2013, 09:36) *
Кстати, проще наверное из линукса скопировать разделы флешки (u-boot, его переменные, линукс и файловую систему) с помощью dd куда Вам надо, а потом склеить в единый образ...

А вот это, пожалуй, действительно поможет. Буду пробовать.
Спасибо!
no_d@t@
Воспользовался dd.
Описал всю NAND (256 Мб) как один раздел: mtdparts=davinci_nand.1:0x10000000@0x0(nand_all)ro
Загрузился, подмаунтился к хосту по nfs и выполнил:
dd if=/dev/mtdblock0 of=/nfs/mtdblock0.bin
Получил на хосте желаемый образ NAND размером 256 Мб. На днях принесут программатор, попробую зашить в чистую новую флешку mtdblock0.bin и загрузиться с нее.
_3m
Цитата(no_d@t@ @ Jan 16 2013, 14:57) *
Воспользовался dd.
...
Получил на хосте желаемый образ NAND размером 256 Мб. На днях принесут программатор, попробую зашить в чистую новую флешку mtdblock0.bin и загрузиться с нее.

Какую фс вы используете?
У меня такое ощущение что jffs2 / ubifs вас мощно стукнут граблями по лбу после того как вы в другой экземпляр нандфлэш зальете считанный образ.
samike
Цитата(_3m @ Jan 16 2013, 16:15) *
У меня такое ощущение что jffs2 / ubifs вас мощно стукнут граблями по лбу после того как вы в другой экземпляр нандфлэш зальете считанный образ.

А расскажите, почему jffs2 / ubifs стукнут граблями?
Просто стоит похожая зачача - прочитать образ из NAND и залить в другие платы.
_3m
Цитата(samike @ Jan 16 2013, 16:22) *
А расскажите, почему jffs2 / ubifs стукнут граблями?

патамушта NAND flash
нужно не смнимать дамп раздела а получать образ фс
IgorKossak
Цитата(samike @ Jan 16 2013, 14:22) *
А расскажите, почему jffs2 / ubifs стукнут граблями?

Дело вовсе не в файловых системах, а в том, что NAND flash (ради удешевления, вероятно) поставляется с некоторым процентом сбойных секторов, которые при производстве соответствующим образом помечены. У каждого экземпляра микросхемы количество и расположение этих секторов разное. Дальше, думаю, всё понятно.
samike
Печально.
Так как же все таки корректно прочитать из NAND необходимый образ (U-boot + Linux + rootFS + приложение), чтобы записать этот образ в другие платы?
alx2
Цитата(IgorKossak @ Jan 16 2013, 23:25) *
Дело вовсе не в файловых системах, а в том, что NAND flash (ради удешевления, вероятно) поставляется с некоторым процентом сбойных секторов, которые при производстве соответствующим образом помечены. У каждого экземпляра микросхемы количество и расположение этих секторов разное. Дальше, думаю, всё понятно.

Мне казалось, что ремаппинг сбойных секторов выполняется драйвером, лежащим "ниже" чем /dev/mtdblock*. Иными словами, блоки, доступные через /dev/mtdblock*, уже гарантированно "хорошие". Я неправ?
_3m
Цитата(alx2 @ Jan 17 2013, 09:00) *
Мне казалось, что ремаппинг сбойных секторов выполняется драйвером, лежащим "ниже" чем /dev/mtdblock*. Иными словами, блоки, доступные через /dev/mtdblock*, уже гарантированно "хорошие". Я неправ?

Как все запущено!
Вы правы, но частично. Бэды могут появляться во время работы, софт их на лету помечает и обходит.
Однако главная проблема не в этом. Проблема в том что в нанд есть Spare area в которой хранится корректирующий код, кроме того например jffs2 в одной из конфигураций хранит там метаданные, образ без метаданных можно сразу отправлять в /dev/null потому что он не смонтируется. Из-за корректирующего кода стертый блок и блок в который записаны 0xff совершенно разные вещи.
Еще раз повторю: из нанд надо снимать образ утилитой которая понимает тип фс. Писать тоже утилитой от используемой фс.
samike
Цитата(_3m @ Jan 17 2013, 09:44) *
Еще раз повторю: из нанд надо снимать образ утилитой которая понимает тип фс. Писать тоже утилитой от используемой фс.

Не понял, только образ ФС нужно вычитывать утилитой, которая понимает тип ФС?
Или u-boot и kernel тоже?
Думаю, что u-boot и kernel можно безболезненно вычитать из NAND с помощью dd, а вот с ФС действительно непонятно.
Может nand dump подойдет?
samike
Вобщем, процесс автоматизации прошивки большого количества плат пока видится таким:

- U-boot заливаем в NAND с помощью программатора,
- устанавливаем м/сх NAND на плату,
- с помощью скрипта (например из под ZOC) общаясь с U-boot по tftp заливаем в NAND ядро и ФС (используем nand write),
- ручками, уже из под linux, пишем в устройство свое рабочее приложение.

может быть можно все образы сразу ( U-boot, ядро и ФС) залить в NAND по определенным адресам с помощью программатора?
потом установить м/сх NAND на плату и ручками, уже из под linux, записать в устройство свое рабочее приложение.
svss
Цитата(samike @ Jan 17 2013, 10:28) *
Печально.
Так как же все таки корректно прочитать из NAND необходимый образ (U-boot + Linux + rootFS + приложение), чтобы записать этот образ в другие платы?

Да, печально. Казалось бы универсальная задача всеобщей востребованности, но смысла в её решении мало, ибо считанный образ с высокой вероятностью при записи попадёт в сбойные участки NAND .
Поэтому (по моему скромному разумению) готового Вы не найдёте.

Копируют систему по частям:
вначале в NAND складывают несколько копий u-boot - в надежде, что хотя бы одна копия окажется годной,
затем - ядро, файловую систему и остальное.

Я не утверждаю, что это единственный способ. Так делают - ничего личного.
Конкретные платформы для этого комплектуются специализированным софтом, при этом требования к железу тоже существуют.
(Пример: http://e2e.ti.com/support/dsp/sitara_arm17.../t/159131.aspx)


Несколько озадачили слова от IgorKossak
Цитата
NAND flash (ради удешевления, вероятно) поставляется с некоторым процентом сбойных секторов, которые при производстве соответствующим образом помечены


NAND делают ради удешевления хранения бит информации. Просто.
NAND невозможно поставить гарантированно без "некоторого процента", ибо уже при перевозке с завода в магазин число сбойных бит может измениться
Да, на заводе NAND тестируют и обнаруженные сбойные блоки помещают в список. Если список короткий, то - в магазин, иначе - в утиль.


Цитата
- U-boot заливаем в NAND с помощью программатора,
- устанавливаем м/сх NAND на плату,

Вы, вероятно, счастливый человек. У меня все NAND - BGA... sad.gif
IgorKossak
Цитата(svss @ Jan 17 2013, 10:34) *
Несколько озадачили слова от IgorKossak
NAND делают ради удешевления хранения бит информации. Просто.
NAND невозможно поставить гарантированно без "некоторого процента", ибо уже при перевозке с завода в магазин число сбойных бит может измениться
Да, на заводе NAND тестируют и обнаруженные сбойные блоки помещают в список. Если список короткий, то - в магазин, иначе - в утиль.

То же самое я и хотел сказать. Может не совсем удачно вышло.
По теме, у меня процедура записи такая:
1. загружается в озу U-boot (версия для озу) и запускается;
2. загружается и программируется в НАНД версия U-boot для прошивки;
3. подобнейшим образом загружаются и прошиваются остальные разделы: u-boot-env, splash, kernel, rootfs.
Не совсем оптимально, но другого способа пока у меня нет.
alx2
Цитата(_3m @ Jan 17 2013, 10:44) *
Бэды могут появляться во время работы, софт их на лету помечает и обходит.

Уточните, пожалуйста, какой именно софт их помечает и обходит - драйвер, лежащий "ниже" /dev/mtdblock*, или софт файловой системы, лежащий "выше"? Верно ли я понял, что именно софт файловой системы?

Цитата(samike @ Jan 17 2013, 13:28) *
Вобщем, процесс автоматизации прошивки большого количества плат пока видится таким:

Мне вообще такой подход (модификация образа файловой системы в целевой плате) кажется странным. Причем странным дважды.
1. Сначала Вы создаете файловую систему без нужного приложения (а что там тогда есть?), записываете ее в ПЗУ платы, потом устанавливаете приложение, после чего считываете образ FS из платы обратно для последующего тиражирования. Не логичней ли будет сразу установить все нужные пакеты, включая ваше приложение, и сразу сгенерировать образ файловой системы, готовый к производству?
2. Если уж по каким-то непонятным мне причинам Вы не хотите (или не можете) сразу генерировать образ FS с тем содержимым, которое требуется, и задача стоит именно в модификации уже имеющейся FS, не лучше ли будет "развернуть" содержимое FS на персоналке, выполнить необходимые модификации (доустановить какие-то пакеты) и затем заново сгенерировать новый образ? И не связываться вообще с NAND-ПЗУ и целевым устройством вообще...
samike
Цитата(alx2 @ Jan 18 2013, 08:37) *
Уточните, пожалуйста, какой именно софт их помечает и обходит

Меня также интересует этот вопрос ...

Цитата(alx2 @ Jan 18 2013, 08:37) *
Мне вообще такой подход (модификация образа файловой системы в целевой плате) кажется странным.

Да нет, я не собираюсь модифицировать образ файловой системы.
Пока остановился на варианте, подобном тому, что описал IgorKossak.
xemul
Цитата(alx2 @ Jan 18 2013, 08:37) *
Уточните, пожалуйста, какой именно софт их помечает и обходит - драйвер, лежащий "ниже" /dev/mtdblock*, или софт файловой системы, лежащий "выше"? Верно ли я понял, что именно софт файловой системы?

Требовать от софта файловой системы отвечать за bad blocks носителя бессмысленно.
В HDD листы бэдов пишутся контроллером во флэш-память (т.е. более другой носитель). Полагаю, в NAND сделано примерно также - контроллер пишет ошибки большой дешёвой памяти в более дорогую, но независимую память (на том же кристалле). Наружу контроллер предоставляет линейный массив, но не обязательно одинаковой длины - с этим и связаны неприятности с переносом системы посредством dd, имхо.
_3m
Цитата(xemul @ Jan 18 2013, 11:28) *
Требовать от софта файловой системы отвечать за bad blocks носителя бессмысленно.
В HDD листы бэдов пишутся контроллером во флэш-память (т.е. более другой носитель). Полагаю, в NAND сделано примерно также - контроллер пишет ошибки большой дешёвой памяти в более дорогую, но независимую память (на том же кристалле).

Нету там "более дорогой независимой" все в нанд!
"финские студенты" с вами не согласны и bad blocks появляющиеся вследствие износа помечает фс.
Курите Bad_Block_table_support
Код
Set the option NAND_BBT_WRITE to enable the table write support. This allows the update of the bad block table(s) in case a block has to be marked bad due to wear. The MTD interface function block_markbad is calling the update function of the bad block table. If the write support is enabled then the table is updated on FLASH.

Помечает бэды в частности:
drivers/mtd/ubi/wl.c
fs/jffs2/erase.c

Еще посмотрите drivers/mtd/nand/nand_bbt.c
xemul
Цитата(_3m @ Jan 18 2013, 13:47) *
Нету там "более дорогой независимой" все в нанд!
"финские студенты" с вами не согласны и bad blocks появляющиеся вследствие износа помечает фс.
Курите Bad_Block_table_support

Значит опять склероз (касательно размещения флэша другого свойства для bad blocks на том же чипе).
В позапрошлом году развлекался, вытаскивая инфу с usb-шных флэшек. В приведённой Вами ссылке следующий параграф описывает обычный для них случай.
А по граблям с хранением bbt носителя на нём же производители hdd уже ходили.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.