LINUX.ORG.RU

AT91SAM - трабл с файловой системой


0

1

Всем привет! Был бы очень рад совету по моей ситуации:

Второй месяц разбираюсь с embedded-Linux (сам пишу на С/ассемблер для микроконтроллеров). Есть отладочная плата на базе AT91SAM9G45 (плата SK-9G45-OEM). Диск, который был когда-то с ней в комплекте (где есть все исходники), естественно, потерян и в инете скачать его содержимое негде. Посему всё делал самостоятельно и с нуля. Вышло следующее:
1. Успешно залил начальный загрузчик Bootstrap.
2. Успешно залили загрузчик U-BOOT.
3. Успешно залил ядро.
4. Залил ФС, которую не подхватывает ядро.

Ядро стартует, инициализирует всю периферию, доходит до файловой системы и уходит в «kernel panic» со словами:
//---------------------------------------------------------------------------------------
VFS: Cannot open root device «mtdblock6» or unknown-block(31,6)
Please append a correct «root=» boot option; here are the available
partitions:
1f00 128 mtdblock0 (driver?)
1f01 384 mtdblock1 (driver?)
1f02 128 mtdblock2 (driver?)
1f03 128 mtdblock3 (driver?)
1f04 1024 mtdblock4 (driver?)
1f05 2048 mtdblock5 (driver?)
1f06 258432 mtdblock6 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,6)
//---------------------------------------------------------------------------------------

Что я проверял в ходе попыток решить эту проблему:
1. Адрес загрузки ФС в память NAND верный - проверил по нескольким источникам и документам.
2. Если посмотреть в U-BOOT, какую он ожидает ФС, то он отвечает: root=/dev/mtdblock6 rw rootfstype=yaffs2
ФС я сформировал именно в yaffs2. Т.е. тип вроде как верный.

Нет ли у кого идей, почему может не монтироваться ФС?

Заранее всем спасибо!

P.S. Извиняюсь, не вышло сделать удобочитаемое форматирование почему-то



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

у теб в ядре вкомпилена поддержка тех устройств и файловых систем, которые тебе нужны?
конкретнее, тут ядро грустит про mtd

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

kievkao

Спасибо, aol. Таки нет, если я правильно понял..

Конфигурацию ядра я проводил вслепую путём использования дефолтного конфига под мой процессор (#make название_defconfig).
Залез сейчас в этот самый файл <at91sam9g45ekes_defconfig>, в разделе «File systems» вижу, что он сконфигурирован под работу с ФС типа <ext2>:

#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
# CONFIG_EXT4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
CONFIG_FILE_LOCKING=y ....

Т.е., как я могу судить, надо сделать следующее:
1. Руками исправить в вышеуказанном файле тип ФС, какой я хочу (или оставить ext2)
2. Пересобрать ФС в соответствующем формате
3. В U-BOOT'е исправить тип ожидаемой ФС на тот, что я сформирую

Верно?

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

есть make menuconfig, в котором ты сможешь сделать всё, что тебе надо с помощью псевдографического интерфейса

тебе надо включить поддержку той фс, в которой тебя собран рутфс. то есть, если она в yaffs2, то её надо включить. с mtd так же.
или, да - пересобрать рутфс. но, вроде, yaffs2 как раз для флеш памяти.

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

я бы ядро пилил, а рутфс оставил, как есть

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

Да, в menuconfig я был в начале «своего пути», потом, обнаружив, что есть некая дефолтная конфигурация, решил пока не ставить экспериментов и взять готовый конфиг.

А вот с buildroot'ом я не был знаком, хотя, как выяснилось, я его даже некогда скачал и сохранил:)

Почитал сейчас что это такое - действительно, очень удобная вещь, сейчас им займусь!

Спасибо ещё раз, буду сейчас копать в этом направлении..

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

ничто не запрещает сделать сначала defconfig, а потом menuconfig и подпилить то, что тебе требуется, основываясь уже на том дефконфиге.

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

Ага, вот этого я не знал. Мне думалось, что если я уж захожу в menuconfig, то надо пилить всё с чистого листа.

Так уже веселей))

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

Спасибо, aol, - включил в ядре поддержку моей ФС - ядро его проглотило.

Но теперь сообщает, что, мол, «no init found». Хотя:

1. В корне ФС лежит исполняемый файл «init»

2. Данный файл является ссылкой на Busybox (совет сделать его ссылкой исходил из некоей публикации в инете)

Можете натолкнуть на мысль, куда копать в этом случае?

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

отлично!

с инитом попробуй передать ядру параметр init=/init или init=/bin/busybox (или где он у тебя там лежит)..

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

To aol: Я пока не силён в терминологии, - что имеется в виду под фразой «передать ядру параметр init»?

To dmiceman: в /sbin, оказывается, тоже лежит init, который также является ссылкой на busybox

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

это там же, где у тебя написано root=... вот, это параметры ядру :)
в настольных системах - это в конфиге загрузчика (grub или lilo)

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

Теперь понял:)

Несколько раз, с разнообразными вариациями, задавал в загрузчике параметр «init=\init», "...=/bin/busybox".

Ядро пытается запустить эти файлы, но в любом случае вываливается с «failed to execute <мой файл>»

Есть ещё такой момент:

ФС я собирал немного через одно место:

У меня она получалась размером в 2 гига, что меня очень пугало.

На англоязычном форуме этот факт тоже пугал одного человека, и ему написали хитрый способ, как собрать ту же ФС, но удобоваримого размера. Я этот способ удачно повторил.

Возможно моя проблема связана именно с этим хитрожопой сборкой ФС?

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

проблема связана именно с этим хитрожопой сборкой ФС

не могу знать.. покажи хоть инструкцию..

проверь еще есть ли у тебя на том файле права на исполнение.

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

Права на исполнение есть. Собирается ФС по следующей инструкции:

1. С помощью mkfsyaffs собирается ФС (получается == 2Гб)

2. С помощью unyaffs полученный образ распаковывается куда-нибудь.

3. В распакованном образе руками удаляется файл образа. Т.е., в папке, которая получилась после распаковке (в корне ФС) лежит ещё почему-то образ ФС.

4. С помощью mkfsyaffs собирается обратно.

Получаем на выходе компактный образ.

Делалось по этой ссылке: http://forum.xda-developers.com/showthread.php?t=906846

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

Согласен, что buildroot мне необходимо освоить.

Но, вчера, при попытке его установить (скачанный с AT91SAM.org), обнаружилась ошибка, состоящая в том, что Buildroot лезет качать ядро версии 2.6.26.2 из тех источников, где его нет (я заходил по тем ссылкам, куда он обращается). И, соответственно, у него ничего не получается.

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

Отпраздновать тот факт, что у меня уже кое-что получилось, а потом уже нырять в дебри BuilRoot, выяснять, в чём же у него проблема и т.д... Ибо, чувствую, это будет более длительный процесс.

Или вы считаете, что я выбрал неправильный путь?

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