|
ядро не видит разделы и корневую файловую систему на mmc, куда копать? |
|
|
|
Sep 11 2014, 18:02
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
получаю такой лог в загрузке ядра: Код ... 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) и всё. это CODE Please append a correct "root=" boot option; here are the available partitions: , как я понимаю, говорит о том что ядро не видит разделов на mmc каковы могут быть причины такого поведения ядра?
|
|
|
|
|
Sep 12 2014, 13:01
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Цитата(Tarbal @ Sep 12 2014, 16:06)  А что видит загрузчик? Если остановить загрузку, то можно посмотреть если он видит 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, увидел немного больше информации в консоли: CODE 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 - Sep 12 2014, 13:09
|
|
|
|
|
Sep 23 2014, 12:01
|

Частый гость
 
Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747

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

Частый гость
 
Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747

|
Называется это initramfs, временный виртуальный диск, монтируемый в ОЗУ. Только в вашем случае сейчас он остается корневой файловой системой и из него вы работаете, а например на рабочей станции initrd образ только подготавливает железо и запускает init для загрузки с диска. Поэтому в ядре надо отказаться от initramfs и включить initrd, при этом на флешке у вас должен быть уже подготовленный образ файловой системы (как для initramfs) с доступным для драйвера ядра типом ФС. Собрать образ можно утилитой mkfs, например mkfs.jffs2 для JFFS2. Еще в busybox можно собрать udev, включить его использование и поддержку динамического создания нодов в ядре и тогда ссылки сами будут создавать при обнаружении новых устройств, но это все влечет расход ресурсов.
--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
|
|
|
|
|
Sep 25 2014, 08:04
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
дабы не плодить темы решил спросить тут.
Прогу посоветовать источник информации, где бы объяснялись принципы начальной загрузки системы. Например:
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). Но у меня корневая файловая система только для чтения, соответственно автоматически нод не появится. Верно? Какие ноды надо сощдать для сетевого утсройства?
Вопросов много, поэтому прошу отослать к... источнику инфомрации.
Спасибо.
|
|
|
|
|
Sep 25 2014, 13:02
|

Частый гость
 
Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747

|
Цитата в папке 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
--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|