Вопрос к знатокам Linux
Есть некая специализированная платформа.
Есть собранные под нее ядро и rootfs.
Ядро прекрасно грузится и запускается и с tftp, и с онбордной флеш-памяти.
rootfs прекрасно грузится с NFS, а вот при работе с флешом начинаются проблемы:
Можно записать на флеш образ из бутлоадера (u-boot). Можно скопировать на флеш образ с помощью dd из под NFS.
В обеих случаях /dev/mtdblock3 прекрасно маунтится и с него можно читать/писать/запускать файлы...
До момента, когда системе будет предложено поднять rootfs с этого устройства. Все, тушите свет, сливайте воду — загрузка падает с кучей сообщений об ошибках CRC и после этого флеш-раздел не работает даже как вспомогательная файловая система — mount сообщает о куче ошибок, а при просмотре обнаруживается буквально
-
Где копать?
1. В ядре?
2. В процедуре передачи бутлоадером аргументов ядру?
3. В mkfs.jffs2? Из ключей я использовал только размер блока флеша.
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівСпасибо за идеи, завтра опробую.
И зашить флешку из линуска (с NFS):
# flash_eraseall -j /dev/mtd3
# nandwrite -p /dev/mtd3 /myImage
Из более экзотического можно попробовать что-то вроде rootwait параметра
Без логов и конфига трудно о чем-то судить: (
1.
Ничего неожиданного.
3.
4.или же dd
--
Самое интересное, что я сейчас попробовал подняться с SD/ext2 — mount заорал, что в файловой системе ошибка.
eugene_n, если ты не можешь справится с такой проблемой, то тебе лучше сменить работу и не порочить профессию.
1. bootargs u-boota
2. Лог загрузки
3. Как вы собирали jffs2 (я обычно указываю —eraseblock и —no-cleanmarkers)
4. Как писали на флеш
Флешка прекрасно работает — на ней живут и u-boot и раздел с его параметрами и ядро. Впрочем и /dev/mtdblock3 тоже не кашляет до момента запуска с
Такое впечетление, что обращение к разделу проходит раньше его полной инициализации. Ну или не через тот драйвер.99% что флешка имеет badblock’и, а человек скопировал поверх ее image, вместо использования mtd-utils
1) Попробуй перепрошить флеш не один раз, а несколько, через 5−10−20 попыток оно будет грузиться нормально, до тех пор, пока не захочешь перепрошить заново.
2) Уделить внимание собственно прошивальщику, возможно что-то с ним, как правило, после прошивания, если проверить образы из файла и из флеша — они идентичны, если выключить питание и включить заново — то флеш содержит откровенный микс мусора и нормальных данных. Если перед прошиванием обесточить устройство на минут 10−20 и потом перепрошить сразу после включения — 90% того, что операция пройдёт нормально.
3) Вполне возможно, что флеш во время прошивки либо во время чтения находится в каком-то своём состоянии, из-за чего портачит перепрошивку или чтение. Вполне возможно, что и бутлодер при старте не инициализирует флеш правильно, из-за чего читает его с ошибками (не выдержаны таймауты), а ядро уже после старта инициализирует флеш как надо, поэтому оно маунтится без ошибок.
4) Опять же, как правило, сам флеш вполне рабочий и его замена (и выпайка с последующей перепайкой другого) к улучшению не ведут. Я такое поведение видел на вполне себе серийных девайсах, так что на перегрев при пайке грешить вроде бы нельзя, если устройство кастомное.
1. ядро монтирует нормально /dev/mtdblock?
2. ядро делает это с ошибкой?
если и то и другое, то есть подозрение что ядра разные;)
наличие/отсутствие rootfs на данном разделе — до спины