Перейти к содержанию
    

ядро не видит разделы и корневую файловую систему на mmc

получаю такой лог в загрузке ядра:

...
mmci-pl18x mmci0: mmc0: MMCI rev 4 cfg 10 at 0x0000000040012c00 irq 49,-1
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
ARMv7-M VFP Extension supported
VFS: Cannot open root device "mmcblk0p1" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

 

и всё.

 

это

Please append a correct "root=" boot option; here are the available partitions:

, как я понимаю, говорит о том что ядро не видит разделов на mmc

 

каковы могут быть причины такого поведения ядра?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что видит загрузчик?

Если остановить загрузку, то можно посмотреть если он видит mmc.

mmcblk0p1 ето диск 0 раздел 1.

 

Сколько у вас дисков?

Как выглядит строка параметров для ядра?

Используете u-Boot?

 

Один раз у меня было подобное потому, что раздел монтировался как для чтения/ записи, но на карточке была установлена защита от записи.

Но в вашем случае раздел недоступен как будто его не существует.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что видит загрузчик?

Если остановить загрузку, то можно посмотреть если он видит mmc.

mmcblk0p1 ето диск 0 раздел 1.

 

Сколько у вас дисков?

Как выглядит строка параметров для ядра?

Используете u-Boot?

 

Один раз у меня было подобное потому, что раздел монтировался как для чтения/ записи, но на карточке была установлена защита от записи.

Но в вашем случае раздел недоступен как будто его не существует.

Спасибо за ответ!

 

у меня на mmc карте раздел всего один и карта одна. Поэтому указываю mmcblk0p1

Использую u-boot, строка загрузки:

 

bootargs=stm32_platform=stm32429-disco mem=31M console=ttyS0,115200n8 rootfstyp=ext2 consoleblank=0 root=/dev/mmcblk0p1 rootfstype=ext2 debug rw rdinit=/sbin/

 

когда включил опцию debug, увидел немного больше информации в консоли:

 

mmci-pl18x mmci0: designer ID = 0x80
mmci-pl18x mmci0: revision = 0x4
mmci-pl18x mmci0: clocking block at 25000000 Hz
mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0 timing 0
mmci-pl18x mmci0: mmc0: MMCI rev 4 cfg 10 at 0x0000000040012c00 irq 49,-1
mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0 timing 0
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright© Pierre Ossman
ARMv7-M VFP Extension supported
mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 0 timing 0
VFS: Cannot open root device "mmcblk0p1" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

 

не могу понять, что не так

Изменено пользователем Dubov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас микро карточка или обычная?

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

У меня было так. Перешли с обычной карточки на микро, а провод детектирования защиты от записи оставили в воздухе. оно иногда монтировалось, а иногда нет.

Я в таких случаях лезу в ядро, ставлю печатание параметров и ищу в чем дело.

Можно попробовать смонтиривать на другом носителе или nfs, а потом попробовать смонтировать этот раздел.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

удалось "подцепить" файловую систему из флешь. Теперь найти проблему должно быть проще.

Вижу в логе загрузки ядра:

 

VFS: Mounted root (romfs filesystem) readonly on device 31:0.

Freeing init memory: 16K

mmc0: host does not support reading read-only switch. assuming write-enable.

mmc0: new SD card at address 0002

mmcblk0: mmc0:0002 00000 1.86 GiB

mmcblk0:

p1

mbcache: exports duplicate symbol mb_cache_entry_find_next (owned by kernel)

kmem_cache_create: duplicate cache ext2_xattr

 

 

полагаю, что карта определилась, вот только в /dev/ нет mmcblk0p1. Файловая система на внутренней влешке Read only file system.

Возможно ли, что именно поэтому не появляестя карточка в /dev ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создайте ноду устройств mmcblk0p1 в каталоге /dev, потому что если udev не поддерживается, то ноду автоматом вы там не увидите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно немного раскрыть вопрос, что такое нода и как её создать?

 

p.s. не стыдно не знать, стыдно не спрашивать :)

Изменено пользователем Dubov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Учиться никогда не стыдно. Ссылка устройства, подробнее на вики тут и тут. Ссылки бывают двух типов: блочные и символьные. Дисковые устройства блочные. Каждый node содержит имя файла устройства и 2 номера (номер драйвера и номер порядковый устройства). О том какие номера указывать можете посмотреть в документации uClinux тут. Создать ноду можно утилитой mknod с правами root - mknod dev/mmcblk0 (ссылка) b(тип) 179(# драйвера) 0(#) -m644(права доступа по желанию). Еще в дистрибутиве поищите файл initramfs, он еще в General настройках ядра прописан. Там перечислены создаваемые автоматом при упаковке initramfs в ядро ноды устройств, папки, файлы и ссылки. Добавьте туда флешку. Можно еще на самой плате создать, если в busybox собран mknod, например как тут.

Изменено пользователем Mihey_K

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

большое спасибо. всё получилось.

 

Интересно, а если расположить файловую систему на mmc, как тогда система определит dev/mmcblk0p1, если сейчас последовательность такая: сначала инициализируется файловая система, а потом уже "цепляется" mmc и раздел.

получается существует какой-то промежуточный механизм, который должен создать dev/mmcblk0p1 ещё до загрузки файловой системы.

 

как это происходит? где об этом можно почитать?

Изменено пользователем Dubov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Называется это initramfs, временный виртуальный диск, монтируемый в ОЗУ. Только в вашем случае сейчас он остается корневой файловой системой и из него вы работаете, а например на рабочей станции initrd образ только подготавливает железо и запускает init для загрузки с диска. Поэтому в ядре надо отказаться от initramfs и включить initrd, при этом на флешке у вас должен быть уже подготовленный образ файловой системы (как для initramfs) с доступным для драйвера ядра типом ФС. Собрать образ можно утилитой mkfs, например mkfs.jffs2 для JFFS2.

Еще в busybox можно собрать udev, включить его использование и поддержку динамического создания нодов в ядре и тогда ссылки сами будут создавать при обнаружении новых устройств, но это все влечет расход ресурсов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

initramfs это файловая система в RAM. у меня сейчас файловая система на внутренней flash, с неё и работаю. а в busybox у меня mdev, вместо udev

 

Изменено пользователем Dubov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так зачем вам тогда еще mmc, если все работает? mmc можно просто примонтировать в скрипте init напрямую или добавив в /etc/fstab, а fstab и опцию -a включить в busybox.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дабы не плодить темы решил спросить тут.

 

Прогу посоветовать источник информации, где бы объяснялись принципы начальной загрузки системы. Например:

 

1) у меня есть файловая система (папки dev, sys, etc...), при этом в папке sys лежит один пустой файл "placeholder". Когда эту файловую систему собираю в бинарник через buildroot и прошиваю на контроллер, вижу, что в папке sys создано множество папок (dev, devices, platform...). Кто добавил новые папки?

2) в исходниках ядра есть ethernet драйвер eth_driver.c, в Makefile в папке драйвера есть:

obj-$(CONFIG_ETH_DRIVER) += eth_driver.c

CONFIG_ETH_DRIVER в конфиге ядра включён. Но в логах загрузки ядра о дрйвере нет упоминаний... и я дро весит одинаково, что с драйвером что без. Где в ядре происходит подключение драйвера (insmode, modpobe) ?

3) в buildroot включён mdev (аналог udev). Но у меня корневая файловая система только для чтения, соответственно автоматически нод не появится. Верно? Какие ноды надо сощдать для сетевого утсройства?

 

Вопросов много, поэтому прошу отослать к... источнику инфомрации.

 

Спасибо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в папке sys создано множество папок (dev, devices, platform...). Кто добавил новые папки?

Они появляются при монтировании файловой системы sysfs, содержащей сведения о найденном оборудовании и драйверах. Монтирование через команду mount -t sysfs sysfs /sys, например в скрипте rcS в /etc или в /etc/init.d, или через строку none /sys sysfs defaults,noatime 0 0 в /etc/fstab с командой монтирования в том же скрипте rcS - mount -a. Ссылка. Просветиться рекомендую на ресурсе opennet.ru.

 

2. В menuconfig ядра есть специальный пункт Networking. Там все включили?

Где в ядре происходит подключение драйвера (insmode, modpobe) ?

У вас включена поддержка модулей или все монолитно?

 

3. Верно. В ядре кстати еще нужно указать путь до утилиты mdev, кажется в пункте General, точно не помню. Для mdev еще требуется в корне каталог proc, откуда mdev получает данные о событиях. Для fdisk также требуется proc. proc монтируется аналогично п.1.

Для сетевых карт ноды не создаются, сет. интерфейс ищите в /sys/class/net

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так как у меня рутовая толкьо для чтения, то в /sys/class/net я должен создать файлы сам. как это сделать и что именно нужно создать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...