LINUX.ORG.RU

jffs2, ubifs создание образов файловых систем во встроенных системах

 , ,


1

1

Привет всем кому интересен мир linux и, в частности встроенные системы. Интересует система mtd: создание разделов файловой системы и перенос ее на флэш-память, имеющимися утилитами из пакета mtd, ubi. Кто может ответить, пожалуйста поделитесь опытом. Заранее буду рад. Спасибо.

Перемещено Aceler из kernel



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

С чего начать деление опыта?

Я бы сначала сформулировал задачу, как она была решена до места где что-то перестало получаться, и после этого рассчитывать на подсказки...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

привет. Ситуация такая. Собрал и перенес почти весь пакет mtd-utils, за исключением нескольких утилит: mkfs.jffs2 и других. Утилиты такие как mtd_debug, mtdinfo работают. проетстировал. Проблем нет. Я не до конца понимаю как переносится образ файловой системы на микросхему памяти, второе - это не получается собрать утилиту mkfs.jffs2. P.S. Работаю с uClinux на рабочей плате. Софт что написал работает. BusyBox пересобрал тоже нормально все. Проблема с работой микросхемы памяти, на которую не получается установить файловую систему. Флэшка подключена и работает. В терминале размеры, все выводятся, системой распознается (/dev/mtd0). И это пока все. Дальше не знаю что и делать. Мозг весь сломал. Чтение документации особо не помогла. Источников толковых не нашел. Хотелось бы получить непосредственный опыт у людей, кто с этим сталкивался. Практические последние штрихи осталось сделать и все.

charly_one
() автор топика
Ответ на: комментарий от I-Love-Microsoft

исходный код брал на github: пакеты mtd-utils, ubi-utils и еще часть утилит. Оба пакеты собрал за исключением нескольких утилит, перенес в систему и протестировал. Вопросов по ним нет. Работают. Утилиты mkfs.jffs2, mkfs.ubifs используют сжатие - библиотеки lzo, zlib, а тут проблема появилась в сборке этих самих утилит. Не могу разрешить. Все это добро компилируется и переноситься в bFLT исполняемый формат uClinux.

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

утилиту mkfs.jffs2

Зачем ее самостоятельно собирать, там что патченое?

как переносится образ файловой системы на микросхему памяти

Какой загрузчик? Если система стартует с другого носителя, то в чем тогда проблема скопировать при помощи работающей системы?

К тому же, загрузчик надо потом натравить на старт из этого MTD. Оно ведь в нем видится?

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от charly_one

Все это добро компилируется и переноситься в bFLT исполняемый формат uClinux

Есть потребность форматировать на таргете (с uClinux)? И там просто записывать данные, а не стартовать систему с этого MTD? Есть уверенность что MTD работает? Его можно записать паттерном и сверить записанное.

Раз проблема в сборке утилиты, то выложи место ошибки на paste.org.ru и давай ссылку сюда - телепатов нет, будем смотреть логи.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Нет не патченное, в пакете BusyBox утилиты mkfs.jffs2 нет, поэтому принял решение собирать ее из исходного кода. Часть утилит я собрал и запустил. В прошивке нормально работают.

Образ uClinux у меня стартует в флэши размером 4 мегабайта, а файловую систему нужно поставить на другую микросхему памяти.

charly_one
() автор топика
Ответ на: комментарий от I-Love-Microsoft

MTD работает. Проверил утилитами mtd_debug(писал данные по разным адресам в пределах размера флэш-памяти. Все нормально, стирал также), mtdinfo. По исходнику, что создает раздел на микросхеме памяти прошелся, сообщения printk все проверил. Все верно. Ошибок нет.

Хорошо. Схожу на paste.org.ru

charly_one
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Кстати, такой еще вопрос? А каким образом можно форматировать раздел для фс? Пример если у вас есть пришлите пожалуйста или ссылку ни источник. Кроме как создавать образ фс на таргите(uClinux) я не знаю.

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

Зная размер MTD, можно создать у себя на рабочем компе файл такого же размера и далее через loop форматировать его и так и сяк, а потом просто поблочно скопировать на таргет, да хоть по сети.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от charly_one

А что, простое монтирование пустого раздела

mount -t jffs2 /dev/mtdblock0 /mnt

файловую систему jffs2 на /dev/mtdblock0 у тебя не создает ?

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

Так не работает. Эта строка из книги по Embedded Linux. Прочел ее в оригинале даже. Я понял Вас. Поддержка jffs2 в опциях ядра подключена. Есть там. Драйвер в терминале выводится. Все норм. У меня в u-boot не написано ничего про создание файловой системе. Строка отсутствует. Возможно в u-boot проблема. Сейчас разбираю. u-boot я не ставил на плату, мне ставили.

charly_one
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Кстати. А образ файловой системы можно создать на десктопе, а потом его загрузить по сетке на таргет машину и прошить ее микросхему памяти. Извини, процесс не совсем понимаю этот.

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

Да так не получается. В понедельник вам отправлю что система выводит после ввода этой команды. По памяти не помню.

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

u-boot тут ни при чем. Ну то есть он тоже может во флэш писать, но мы же сейчас про Linux userspace говорим ?

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

Кстати. А образ файловой системы можно создать на десктопе, а потом его загрузить по сетке на таргет машину и прошить ее микросхему памяти

Можно

# On PC
dd if=/dev/zero of=ext2fs.bin bs=1M count=1
sudo mkfs.ext2 ext2fs.bin
mkdir ext2
sudo mount -t ext2 -o loop ext2fs.bin ext2
sudo touch ext2/hello.txt
sudo umount ext2
cat ext2fs.bin |ssh root@192.168.98.100 "cat >/tmp/ext2fs.bin && flashcp -v /tmp/ext2fs.bin /dev/mtd1"

# On device
mkdir ext2
mount /dev/mtdblock1 ext2/
ls ext2/
hello.txt   lost+found

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

Размер флэшки для фс всего 64 килобайта

Может тогда не стоит делать там ФС? Ладно бы 64 мегабайт, но 64К... Выясни, какой минимальный размер носителя для выбранной ФС, есть шанс что не полезет, так что попробуй на компе в файле 64К (dd if=/dev/zero of=ext2fs.bin bs=64K count=1).

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

Я бы с удовольствием там не делал, но ее нужно оживить. Флэша видится и работает с mtd утилитами. Файловую систему не получается врезать. Я попробую на десктопе сделать, как ты написал. Скорее всего ты прав и в u-boot нужно еще слазить. Сейчас просматриваю. u-boot мне зашивали. Я в нем особо не копался. Ладно, спасибо в любом случае. Очень приятно что кто-то ответил. Продолжу сегодня и на следующей неделе.

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

и в u-boot нужно еще слазить

Не, раз не загружаешься с этого MTD то и не надо загрузчик смотреть.

Попробуй на файлу, а то может в 64К не влезет вообще ничего.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

У меня u-boot, uClinux и весь софт лежат в 4 мегабайтах на другой флэше. Там все норм с этим. Загрузка системы 2 секунды происходит. Где-то почти как у RtOsы. Еще не все железо оживил. Кое-что еще писать придется. Хотя достаточно быстро. 64 килобайтова флэша пустая. Её нужно до конца оживить. Файловую систему нужно поставить. Дальше в загрузочном скрипте автомонтирование подключить, но это уже семечки.

charly_one
() автор топика
Ответ на: комментарий от I-Love-Microsoft

так и есть, конфиг. Даже место останется. В busybox хорошо работает hush(18k) - это shell. Достаточно хорошо.

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

Привет. А как назначить этот файл. У меня в /dev есть mtd0, mtd1 (30,1,2, char), mtdblock0 (90,0 block)- (для монтирования как блочное устройство как раз). Там есть еще flash0 (31, block). Более не знаю. Подскажи если знаешь. Идеи закончились. То что мне написали ниже это пока не работает.

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

писать утилитой nandwrite? Это утилита для флэшей типа NAND, у меня флэшка NOR 64 килобайта размер всего!? Разве nandwrite работает с nor флэшами?!

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

То что в линуксе можно разбить на разделы и отформатировать в ФС, то можно задействовать и как обычный файл. Ту же твою флэшку вместо создания ФС на этом устройстве, можно открыть как файл. И если она всего 64 килобайта для хранения одного набора данных - то этот путь наиболее разумен.

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

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от charly_one

писать утилитой nandwrite? Это утилита для флэшей типа NAND, у меня флэшка NOR 64 килобайта размер всего!? Разве nandwrite работает с nor флэшами?!

В busybox есть flash_eraseall, flash_lock, flash_unlock, flashcp, их и используй

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

Приветствую. Спасибо за информацию. Я а курсе. Эти утилиты уже пользовал. Если знаешь, то подскажи как читать из nor флэши? Меня это заботит. Какой утилитой?

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

Как здесь уже многократно указывали, если есть /dev/mtd0 то читай его как обычный файл

Какой утилитой?

Я лично предпочитаю hexdump который обладает богатейшими возможностями по визуализации контента:

# hexdump -C /dev/mtd2 -n 32
00000000  0d 2f 0e ce 62 61 64 5f  70 72 6f 64 70 61 72 61  |./..bad_prodpara|
00000010  6d 73 3d 30 00 62 61 75  64 72 61 74 65 3d 31 31  |ms=0.baudrate=11|
alx777 ★★
()
Ответ на: комментарий от alx777

Хорошо. Я имел в ввиду каким образом происходит чтение данных из флэши прикладным софтом..?! т.е. в коде с помощи: int fd = open(/dev/mtd0", O_RDWR); далее read(fd, buf,1); как обычно?

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

Хорошо. Я имел в ввиду каким образом происходит чтение данных из флэши прикладным софтом..?! т.е. в коде с помощи: int fd = open(/dev/mtd0", O_RDWR); далее read(fd, buf,1); как обычно?

Да

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

Спасибо за ответ. Очень признателен. Продолжу работу.

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

Добрый вечер. Есть проблема с записью файла во микросхему памяти. Файл меньше размера микросхемы памяти. Набираю команду: flash_eraseall /dev/mtd0 - выводит сообщение что память стерта на 100%. Далее набираю flashcp -v /var/log/text.text /dev/mtd0 Выводит: flashcp: verification mismatch at 0x0 Что это и как быть? Если знаете, напишите. hexdump работает хорошо, разобрался с опциями.

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

Приветстую. Файл /var/log/text.text - весит всего 83 байта. Размер флэши 64 килобайта microship 25lc512 . Файл очень даже влазиет, не похоже, что проблема в этом.

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

1. Что показывает hexdump -C /dev/mtd0 после flash_eraseall /dev/mtd0 ?

2. Что показывает hexdump -C /dev/mtd0 после flash_eraseall /dev/mtd0 и dd if=/var/log/text.text of=/dev/mtd0 ?

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

Приветствую. Через несколько минут отпишусь, проверю.

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

выполнение второй проверки: / # flash_eraseall /dev/mtd0 Erasing 8 KiByte @10000 - 100% complete. / # ls / # dd if=/var/log/text.text of=/dev/mtd0 0+1 records in 0+1 records out 84 bytes (84B) copied, 0.002935 seconds 27.9KB/s / # hexdump -C /dev/mtd0 00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00 |................\|

*

00010000 / #

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

Вообще странно. Все должно работать. Ни ясно пока в чем проблема.

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

Доброе утро. Разбираюсь, пока не знаю. Утилиты flash_eraseall, flashcp работают правильно. Код перепроверил. Ошибок не нашел. Утилиты сам собрал из пакета mtd-utils-1.5.2. Пока не ясно. Драйвер использую m25p80.c, драйвер spi. С ним работаю. Пока не знаю в чем проблема.

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

Результат вывода утилиты mtdinfo.

/ # mtdinfo /dev/mtd0

mtd0 Name: flash_eeprom Type: nor Eraseblock size: 8192 bytes, 8.0 KiB Amount of eraseblocks: 8 (65536 bytes, 64.0 KiB) Minimum input/otput unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:0 Bad blocks are allowed: false Device are writable: true

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