Вопрос к знатокам Linux

Есть некая специализированная платформа.

Есть собранные под нее ядро и rootfs.

Ядро прекрасно грузится и запускается и с tftp, и с онбордной флеш-памяти.

rootfs прекрасно грузится с NFS, а вот при работе с флешом начинаются проблемы:

Можно записать на флеш образ из бутлоадера (u-boot). Можно скопировать на флеш образ с помощью dd из под NFS.

В обеих случаях /dev/mtdblock3 прекрасно маунтится и с него можно читать/писать/запускать файлы...

До момента, когда системе будет предложено поднять rootfs с этого устройства. Все, тушите свет, сливайте воду — загрузка падает с кучей сообщений об ошибках CRC и после этого флеш-раздел не работает даже как вспомогательная файловая система — mount сообщает о куче ошибок, а при просмотре обнаруживается буквально 3–4 файла на весь раздел.

-

Где копать?

1. В ядре?

2. В процедуре передачи бутлоадером аргументов ядру?

3. В mkfs.jffs2? Из ключей я использовал только размер блока флеша.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Ctrl + Enter
Ctrl + Enter

Спасибо за идеи, завтра опробую.

Могу посоветовать прогнать mkfs.jffs2 со включенной опцией verbose. Замчал за ней странности при парсинге коммандных параметров.
И зашить флешку из линуска (с NFS):
# flash_eraseall -j /dev/mtd3
# nandwrite -p /dev/mtd3 /myImage
Из более экзотического можно попробовать что-то вроде rootwait параметра

Без логов и конфига трудно о чем-то судить: (

2 vadym

1.

console=ttyS0,115200n81 root =/dev/mtdblock3 rw rootfstype=jffs2 ip=x.x.x.x init=/sbin/init

Ничего неожиданного.

3.

--eraseblock=16

4.

u-boot> nand write.jffs2 0x........

или же dd
--

Самое интересное, что я сейчас попробовал подняться с SD/ext2 — mount заорал, что в файловой системе ошибка.

eugene_n, если ты не можешь справится с такой проблемой, то тебе лучше сменить работу и не порочить профессию.

eugene_n, напишите еще плз
1. bootargs u-boota
2. Лог загрузки
3. Как вы собирали jffs2 (я обычно указываю —eraseblock и —no-cleanmarkers)

4. Как писали на флеш

Флешка прекрасно работает — на ней живут и u-boot и раздел с его параметрами и ядро. Впрочем и /dev/mtdblock3 тоже не кашляет до момента запуска с

root =/dev/mtdblock3 rw rootfstype=jffs2

Такое впечетление, что обращение к разделу проходит раньше его полной инициализации. Ну или не через тот драйвер.

Во-первых, половина проблем решается при выполнении требований к режиму эксплуатации и программирования конкретной микросхемы памяти, указанный в даташите производителя. Во-вторых JFFS2 пишет данные с CRC и нормально держит badblock лист. Сколько через меня прошло девайсов на флеше — никогда проблем непредсказуемого поведения не наблюдалось, даже с FS, которые не поддерживают wear levelling.

99% что флешка имеет badblock’и, а человек скопировал поверх ее image, вместо использования mtd-utils

Я встречал такое — тёмные электромагнитные силы (ТЭС) — это где-то половина проблем.
1) Попробуй перепрошить флеш не один раз, а несколько, через 5−10−20 попыток оно будет грузиться нормально, до тех пор, пока не захочешь перепрошить заново.
2) Уделить внимание собственно прошивальщику, возможно что-то с ним, как правило, после прошивания, если проверить образы из файла и из флеша — они идентичны, если выключить питание и включить заново — то флеш содержит откровенный микс мусора и нормальных данных. Если перед прошиванием обесточить устройство на минут 10−20 и потом перепрошить сразу после включения — 90% того, что операция пройдёт нормально.
3) Вполне возможно, что флеш во время прошивки либо во время чтения находится в каком-то своём состоянии, из-за чего портачит перепрошивку или чтение. Вполне возможно, что и бутлодер при старте не инициализирует флеш правильно, из-за чего читает его с ошибками (не выдержаны таймауты), а ядро уже после старта инициализирует флеш как надо, поэтому оно маунтится без ошибок.

4) Опять же, как правило, сам флеш вполне рабочий и его замена (и выпайка с последующей перепайкой другого) к улучшению не ведут. Я такое поведение видел на вполне себе серийных девайсах, так что на перегрев при пайке грешить вроде бы нельзя, если устройство кастомное.

наблюдается нестыковка в данном багрепорте, следует для себя выяснить 2 момента:
1. ядро монтирует нормально /dev/mtdblock?
2. ядро делает это с ошибкой?
если и то и другое, то есть подозрение что ядра разные;)

наличие/отсутствие rootfs на данном разделе — до спины

Підписатись на коментарі