Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SK-AT91SAM9260 и SD карта
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
rtcveel
Доброго времени суток, уважаемые форумчане!
В общем проблемма следующая: не могу подцепить корневую файловую системму на SD карте (точнее сама карточка не видится и всё), вроде бы всё что полагается включил, файл board_sam9260ek.c поправил, всёравно карточка не видится.

Код
Kernel command line: mem=32M console=ttyS0,9600 root=/dev/mmcblk0p1 rw


В файле board_sam9260ek.c исправил:

static struct at91_mmc_data __initdata ek_mmc_data = {
.slot_b = 0,
.wire4 = 1,
.det_pin = AT91_PIN_PA4,
.wp_pin = -EINVAL,
.vcc_pin = -EINVAL,
};


Часть конфига ядра:
Код
# Non-8250 serial port support
#
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_SERIAL_ATMEL_PDC=y
# CONFIG_SERIAL_ATMEL_TTYAT is not set
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX3107 is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_IFX6X60 is not set
# CONFIG_SERIAL_XILINX_PS_UART is not set
# CONFIG_HVC_DCC is not set
# CONFIG_IPMI_HANDLER is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
# CONFIG_RAMOOPS is not set
# CONFIG_I2C is not set
CONFIG_SPI=y
# CONFIG_SPI_DEBUG is not set
CONFIG_SPI_MASTER=y

#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
CONFIG_SPI_ATMEL=y
# CONFIG_SPI_BITBANG is not set
# CONFIG_SPI_GPIO is not set
# CONFIG_SPI_OC_TINY is not set
# CONFIG_SPI_PXA2XX_PCI is not set
# CONFIG_SPI_XILINX is not set
# CONFIG_SPI_DESIGNWARE is not set


#
# OTG and related infrastructure
#
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_ULPI is not set
# CONFIG_NOP_USB_XCEIV is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
# CONFIG_MMC_CLKGATE is not set

#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
# CONFIG_MMC_SDHCI_PXAV3 is not set
# CONFIG_MMC_SDHCI_PXAV2 is not set
CONFIG_MMC_AT91=y
# CONFIG_MMC_ATMELMCI is not set
CONFIG_MMC_SPI=y
# CONFIG_MMC_DW is not set
# CONFIG_MMC_VUB300 is not set
CONFIG_MMC_USHC=y
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_RTC_LIB=y
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set


Лог загрузки выглядит следующим образом:
Код
......
VFS: Cannot open root device "mmcblk0p1" or unknown-block(0,0): error -6
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)
.......


Возможно чтото ещё в конфиге не включил, но что? wacko.gif
Сталкивался ли кто-нибудь с подобной проблеммой? (карточка MicroSDHC 4Gb 10 класс, стоковая прошивка её видит)
Ядро версии 3.4.4
rtcveel
заметил особенность, что если передёрнуть карту памяти после соощения обшибке, то выводится сообщение:

Код
mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
Synopsys Designware Multimedia Card Interface Driver
VFS: Cannot open root device "mmcblk0p1" or unknown-block(0,0): error -6
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)
[<c001289c>] (unwind_backtrace+0x0/0xe0) from [<c019e944>] (panic+0x6c/0x1ac)
[<c019e944>] (panic+0x6c/0x1ac) from [<c0214d50>] (mount_block_root+0x238/0x288)
[<c0214d50>] (mount_block_root+0x238/0x288) from [<c021504c>] (prepare_namespace+0x154/0x1a8)

[<c021504c>] (prepare_namespace+0x154/0x1a8) from [<c02149d8>] (kernel_init+0x168/0x1a4)
[<c02149d8>] (kernel_init+0x168/0x1a4) from [<c000edfc>] (kernel_thread_exit+0x0/0x8)

mmc0: card remove
****** Resetting SD-card bus width ******
mmc0: card insert


следовательно, я так понимаю, драйвер работает... такое чувство, что системма не знает устройство mmcblk0p1 или карта не определяется(что скорее всего и есть)...
xor.kruger
А почему Вы "юзаете" карту MMC через интерфейс SPI ?
Я бы выключил следующие опции:

CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SPI=y
CONFIG_MMC_USHC=y

и включил бы CONFIG_MMC_DEBUG

Попробуйте так.
rtcveel
Цитата
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SPI=y
CONFIG_MMC_USHC=y

не помогло. Изходя из этой строчки:
Код
mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz


я предполагаю, что карточка не видится ядром, это может быть или косяк ядра или косяк конфига. ещё вычитал что возможно необходимо допаять поддтяжи на плату здесь: http://www.starterkit.ru/html/index.php?na...mp;id=8039#8040

Ещё интересно корректно ли запускается служба ММС. Кроме выше приведёной строки в логе загрузки про ммс больше ничего нет. Ладн пойду паять wacko.gif
xor.kruger
Стоит сказать что на данной плате у меня не разу не заработали карты формата microSD, в то время как "обычные" SD и MMC работали на ура.
Попробуйте разные карточки.
rtcveel
пайка не понадабилась, оказалось в моей версии платы данные резисторы есть. хотя на схеме, выложенной на сайте, их нет...
xor.kruger
Тогда чтобы точно убедиться что проблема в ядре или в самой карте, возьмите ядро и рутовую ФС с сайта - проверено.
rtcveel
ядро с сайта запустило службу ММС и флешку прочитало, вот лог:
Код
........
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock0 mtdparts=atmel_nand:-(root) rw rootfstype=jffs2
.........
mmc0: host does not support reading read-only switch.  Assuming write-enable.
mmc0: new SDHC card at address b368
mmcblk0: mmc0:b368 USD   3941376KiB
mmcblk0: p1
........
VFS: Cannot open root device "mtdblock0" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
b300    3941376 mmcblk0 driver: mmcblk
  b301    3937280 mmcblk0p1
........

пробовал собрать ядро версии 2.6.35.13 как в http://starterkit.ru/html/index.php?name=f...=9300&num=2
но тоже не помогло... следовательно скорее всего конфиг...
xor.kruger
Конфиг ядра, которое успешно стартонуло можно посмотреть в файле
Код
/proc/config.gz
rtcveel
чтото не получается... возможно он не включён в конфиге.

вообще ситуация схожая с темой http://starterkit.ru/html/index.php?name=f...=9300&num=1 почемуто не запускается драйвер MMC, только решение указанное там не помогает, пробовал даже версию 2.6.24 собирать... чтото гдето я пропускаю, буду дальше копать...
xor.kruger
Нашел у себя на винте сохраненный старенький архивчик с ядром, конфигом и файлом платформом, которые у меня отлично находил SD/MMC карты на такой же плате как и у Вас. Попробуйте, может поможет.
ссылка на архив
rtcveel
залил ядро находящееся в архиве - тоже самое,про ммс в логе ни слова. Попробую пересобрать, конечно, но незнаю выйдет ли чтонибудь из этого smile3046.gif уже себе весь мозг проел wacko.gif создам-ка тему ещё на стартеркитовском форуме)
xor.kruger
кстати, а пробовали указывать опции rootwait или rootdelay в параметрах загрузки ядра ?
Посмотрите в логе загрузки кернела с какими опциями ядро загружается (имеется ввиду ядро с сайта lab.starterkit.ru)
rtcveel
пробовал, при rootdelay тожесамое, при rootwait всё висит . выложили конфиг на форуме стартеркита, попробую его. если подойдёт залью сюда.
rtcveel
rootwait помог оживить конфиг, которым со мной любезно поделились на форуме стартеркита sm.gif
странно, что на мои конфиги он до этого такогоже действия не произвёл wacko.gif попробую запилить версию для 3.4.4 по его примеру. прикрепляю конфиг к ядру 3.0.3. ещё попутно обнаружил у себя нехватку некоторых пакетов указанных на http://dmilvdv.narod.ru/ но вроде бы и без них всё собиралось, недочёт устранил.
xor.kruger
Ну тогда можно сказать что половина дела сделана! sm.gif
ЗЫ: Если сравнить файлы-платформы и аппаратно зависимые файлы для конкретных процессоров из разных версии ядра (например 3.4,4 и какой нибудь 2.6.35) то они будут немного отличатся. Вот как раз, наверное, в глубинах аппаратно зависимого кода и кроется причина Ваших неудач.
ЗЗЫ: Я бы на Вашем месте выбрал бы какую то одну версию ядра и дальше с ней постоянно работал.
rtcveel
3.4.4 запилил, всё работает!) Большое спасибо второй раз xor.kruger за поддержание беседы (в этой и предыдущей моей ветке).
Проблемма также нашлась в отсутствии rootwait в коде u-boot'a, поэтому старые ядра, которые не предусматривают принудительное использование зашитых в них параметров загрузки, брали код из u-boot'a и до чтения флешки дело не доходило. както-так sm.gif
und68
Цитата(rtcveel @ Jul 23 2012, 15:59) *
3.4.4 запилил, всё работает!) Большое спасибо второй раз xor.kruger за поддержание беседы (в этой и предыдущей моей ветке).
Проблемма также нашлась в отсутствии rootwait в коде u-boot'a, поэтому старые ядра, которые не предусматривают принудительное использование зашитых в них параметров загрузки, брали код из u-boot'a и до чтения флешки дело не доходило. както-так sm.gif

А что в 3.4.4 пилил?
Я пробую 3.6.3 попилить - ничего не выходит
Пока задача просто загрузить по tftp(в UBOOT run tftp_boot) и увидеть mmc

Сейчас пока сообщения -
at91_mci at91_mci: probe failed, err -16
at91_mci: probe of at91_mci failed with error -16

Железо работает 2.6.33.20 грузится без проблем

В файле описания платы поправил
static struct at91_mmc_data __initdata ek_mmc_data = {
//pi .slot_b = 1,
.slot_b = 0,
.wire4 = 1,
.det_pin = AT91_PIN_PA4,
// .det_pin = ... not connected
// .wp_pin = ... not connected
// .vcc_pin = ... not connected
};
rtcveel
Цитата(und68 @ Oct 23 2012, 11:37) *
Сейчас пока сообщения -
at91_mci at91_mci: probe failed, err -16
at91_mci: probe of at91_mci failed with error -16


Подобных сообщений у меня не было, драйвер инициализировался без проблемм. У меня была проблемма с коммандной строкой передаваемой U-boot-ом ядру. Я по неопытности не учёл что в если в конфиге ядра не ставить галку "принудительно использовать следущие параметры коммандной строки" то оно их берёт с U-bootа, а там они не правильные, и при загрузке ядро искало образ ФС даже не на карте памяти а на микросхеме NANDа, которой и в помине нет, т.к. плата удешевлённая. ну и rootwait самосабой нада.

У тебя же данная строка "at91_mci at91_mci: probe failed" говорит о том, что происходит ошибка при инициализации драйвера, в функции

static int __init at91_mci_probe(struct platform_device *pdev) //строка 929 драйвера at91_mci

код ошибки конкретнее:

fail6:
release_mem_region(res->start, resource_size(res)); //строка 929 драйвера at91_mci
dev_err(&pdev->dev, "probe failed, err %d\n", ret);
return ret;

и собственно то что её вызывает :

mmc = mmc_alloc_host(sizeof(struct at91mci_host), &pdev->dev); //строка 1103 драйвера at91_mci
if (!mmc) {
ret = -ENOMEM;
dev_dbg(&pdev->dev, "couldn't allocate mmc host\n");
goto fail6;
}


Но это всё рассуждения вслух. Повидимому дело действительно в борде (mmc_alloc_host - функция инициализирующая структуру MMC, т.е скорее всего не верные настройки чего-либо). Прикладываю всё что связано с AT91, кроме ядра, почемуто не могу его "сохранить как", уже как только не пробовал, не создает новый и всё, даж из под админа... но тот конфиг который выкладывал ранее, насколько помню рабочий должен быть... попробую ещё раз завтра сохранить и выложить ту версию, которая есть. если не поможет то даж незнаю... курить драйвера остаётся.

хотя может и в кофиге чтото не включено, версия 3.6 всетаки. вобщем имхо.
und68
Цитата(rtcveel @ Oct 24 2012, 20:22) *
Подобных сообщений у меня не было, драйвер инициализировался без проблемм. У меня была проблемма с коммандной строкой передаваемой U-boot-ом ядру. Я по неопытности не учёл что в если в конфиге ядра не ставить галку "принудительно использовать следущие параметры коммандной строки" то оно их берёт с U-bootа, а там они не правильные, и при загрузке ядро искало образ ФС даже не на карте памяти а на микросхеме NANDа, которой и в помине нет, т.к. плата удешевлённая. ну и rootwait самосабой нада.

У тебя же данная строка "at91_mci at91_mci: probe failed" говорит о том, что происходит ошибка при инициализации драйвера, в функции

static int __init at91_mci_probe(struct platform_device *pdev) //строка 929 драйвера at91_mci

код ошибки конкретнее:

fail6:
release_mem_region(res->start, resource_size(res)); //строка 929 драйвера at91_mci
dev_err(&pdev->dev, "probe failed, err %d\n", ret);
return ret;

и собственно то что её вызывает :

mmc = mmc_alloc_host(sizeof(struct at91mci_host), &pdev->dev); //строка 1103 драйвера at91_mci
if (!mmc) {
ret = -ENOMEM;
dev_dbg(&pdev->dev, "couldn't allocate mmc host\n");
goto fail6;
}


Но это всё рассуждения вслух. Повидимому дело действительно в борде (mmc_alloc_host - функция инициализирующая структуру MMC, т.е скорее всего не верные настройки чего-либо). Прикладываю всё что связано с AT91, кроме ядра, почемуто не могу его "сохранить как", уже как только не пробовал, не создает новый и всё, даж из под админа... но тот конфиг который выкладывал ранее, насколько помню рабочий должен быть... попробую ещё раз завтра сохранить и выложить ту версию, которая есть. если не поможет то даж незнаю... курить драйвера остаётся.

хотя может и в кофиге чтото не включено, версия 3.6 всетаки. вобщем имхо.


Была ошибка в выборе типа драйвера и инициализации. Более подробно тут http://www.starterkit.ru/html/index.php?na...&last#17986
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.