Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
SAM9G45 + SDCARD + linux-3.14/3.16.1
Romantic
Добавлено 25.08.2014 14:02
0
Сообщение: 1
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Снова я в тупике с SoC на 9G45, помогите, не знаю уже, где искать причину.

У меня generic SoC с процессором, двумя видами памяти и слотом для SD-карт. Проблема состоит в том, что ядро не обнаруживает карту в слоте. Загрузка происходит с SD-карты. Стартует начальный загрузчик с первого раздела карты, он грузит ядро опять же с первого раздела, передавая ему командную строку с указанием "root=/dev/mmcblk0p2 rootwait". Ядро загружается относительно успешно, доходит до ожидания rootfs и зависает. Классическая причина - неправильно настроенный detect pin, но это проверено-перепроверено. Надписи "New SD card at address ..." не появляется.
Еще одна странность - я наблюдаю это поведение в двух свежайших версиях ядра - 3.14+ от xilinx и 3.16.1 с kernel.org. Когда переношу свой BSP из этих версий в относительно старый 3.2.62 - все отлично. Пин в БСП настраивается правильно, в конфигурации ядра включены Atmel MCI, SD Block device. Больше перепутать вроде нечего.

Подскажите, может кто-нибудь сталкивался с проблемами обнаружения SD на последних версиях ядра?

Я могу приложить конфиг ядра и код инициализации из BSP, если это понадобится, и лог загрузки.

Самое странное, настройки сделаны правильно, конфиги 3.2.62 и 3.16.1 похожи, конечно, не совпадают, они сильно отличаются по набору параметров, но ключевые совпадают.
Одно из отличий - в реализации обработки прерываний - может тут что-то зарыто?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.08.2014 15:52 Сообщение: 2
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Пин в БСП настраивается правильно, в конфигурации ядра включены Atmel MCI, SD Block device. Больше перепутать вроде нечего.

я вроде 3.14 ванильное запускал на 9g45, карточка виделась.. но я не использовал dtb..
вечером посмотрю, может что осталось..

насчет
Код
Atmel MCI

там вроде были варианты, при неправильной настройке ваша симптоматика..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.08.2014 22:10 Сообщение: 3
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
я вроде 3.14 ванильное запускал на 9g45, карточка виделась.. но я не использовал dtb..
вечером посмотрю, может что осталось..

мнэ.. я слегка попутал - ковырял 3.12:

Код
root@arm9g45:~# uname -a
Linux arm9g45 3.12.0 #9 Wed Nov 13 22:51:44 MSK 2013 armv5tejl GNU/Linux
root@arm9g45:~# zcat /proc/config.gz |grep MMC
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
CONFIG_MMC_CLKGATE=y
# MMC/SD/SDIO Card Drivers
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_TEST is not set
# MMC/SD/SDIO Host Controller Drivers
# CONFIG_MMC_SDHCI is not set
# CONFIG_MMC_SDHCI_PXAV3 is not set
# CONFIG_MMC_SDHCI_PXAV2 is not set
CONFIG_MMC_ATMELMCI=y
CONFIG_MMC_SPI=y
# CONFIG_MMC_DW is not set
# CONFIG_MMC_VUB300 is not set
# CONFIG_MMC_USHC is not set
root@arm9g45:~# dmesg |grep mmc
Kernel command line: console=ttyS0,115200 rw rootwait root=/dev/mmcblk0p2 mem=64M
Waiting for root device /dev/mmcblk0p2...
mmc0: host does not support reading read-only switch. assuming write-enable.
mmc0: new high speed SDHC card at address 0001
mmcblk0: mmc0:0001 00000 7.46 GiB
mmcblk0: p1 p2 p3
EXT4-fs (mmcblk0p2): mounting ext3 file system using the ext4 subsystem
EXT4-fs (mmcblk0p2): warning: mounting fs with errors, running e2fsck is recommended
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
Adding 147596k swap on /dev/mmcblk0p3. Priority:-1 extents:1 across:147596k SS
EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)


3.14 лежит рядом, но не запустилось, т.к. то, что получилось на 3.12 в плане исправления BoardId, в 3.14 в очередной раз изменили и ядро отказывается запускаться..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 26.08.2014 11:33 Сообщение: 4
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата

3.14 лежит рядом, но не запустилось, т.к. то, что получилось на 3.12 в плане исправления BoardId, в 3.14 в очередной раз изменили и ядро отказывается запускаться..


Я просто добавляю строку в mach-types со своим идентификатором и добавляю в Kconfig и Makefile упоминания своей платы.
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 26.08.2014 11:36 Редактировалось 26.08.2014 11:38 Сообщение: 5
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Вообще моя воля - я бы 3.2 использовал - там все адекватно сделано, а то, например, из 3.16 вообще выпилили драйвер atmel macb!!! Такое впечатление, что релизы стабильных (!) ядер не проверяются на старых платах даже минимально. Но мне необходимо задействовать микроновскую serial nor, поддержка которой в ядрах отсутствует, а патчики есть только для 3.16. Применить патч к старым версиям не получается - в 3.16 капитально переделали mtd, перекидали по новым файлам начинку
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 26.08.2014 11:40 Сообщение: 6
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Я просто добавляю строку в mach-types со своим идентификатором и добавляю в Kconfig и Makefile упоминания своей платы.

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

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 26.08.2014 15:11 Сообщение: 7
sasamy
4.71

Пункты: 83074
Регистрация: 14.08.2009
Цитата
например, из 3.16 вообще выпилили драйвер atmel macb!!!


что-то вы страсти какие рассказываете :)

http://lxr.free-electrons.com/source/drivers/net/ethernet/cadence/
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 26.08.2014 15:57 Сообщение: 8
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата

что-то вы страсти какие рассказываете :)

http://lxr.free-electrons.com/source/drivers/net/ethernet/cadence/


Точно, виноват. Просто переименовали - раньше было Atmel MACB
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 26.08.2014 16:01 Редактировалось 26.08.2014 22:16 Сообщение: 9
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Фрагмент лога загрузки в самом конце:

Код

atmel_mci atmel_mci.0: version: 0x410
atmel_mci atmel_mci.0: using dma0chan0 for DMA transfers
atmel_mci atmel_mci.0: No vmmc regulator found
atmel_mci atmel_mci.0: No vqmmc regulator found
atmel_mci atmel_mci.0: Atmel MCI controller at 0xfff80000 irq 27, 1 slots
Waiting for root device /dev/mmcblk0p2...
mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
mmc0: mmc_rescan_try_freq: trying to init card at 300000 Hz
mmc0: mmc_rescan_try_freq: trying to init card at 260417 Hz


А вот для сравнения фрагмент лога загрузки ядра 3.2.62, карта обнаруживается
Код

atmel_mci atmel_mci.0: version: 0x410
atmel_mci atmel_mci.0: Using dma0chan0 for DMA transfers
atmel_mci atmel_mci.0: Atmel MCI controller at 0xfff80000 irq 11, 1 slots
mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
Waiting for root device /dev/mmcblk0p2...
mmc0: host does not support reading read-only switch. assuming write-enable.
mmc0: new high speed SD card at address aaaa
mmcblk0: mmc0:aaaa SU02G 1.84 GiB
mmcblk0: p1 p2 p3
EXT2-fs (mmcblk0p2): warning: maximal mount count reached, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem) on device 179:2.


Может, из сравнения можно что-то понять или хотя бы направление дальнейших ковыряний?
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 26.08.2014 22:27 Сообщение: 10
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Получается по логике, что наличие карты установлено, дальше mmc пытается ее инициализировать на трех частотах в функции mmc_rescan_try_freq, инициализация довольно длинная, и именно она проходит успешно в 3.2.62 на первом же значении частоты, проходит на подфункции mmc_attach_sd. То же самое в ядре 3.16.1 выполнение mmc_attach_sd проходит неуспешно.

Начинка:
Код

/*
* Starting point for SD card init.
*/
int mmc_attach_sd(struct mmc_host *host)
{
int err;
u32 ocr, rocr;

BUG_ON(!host);
WARN_ON(!host->claimed);

err = mmc_send_app_op_cond(host, 0, &ocr);
if (err)
return err;

mmc_attach_bus(host, &mmc_sd_ops);
if (host->ocr_avail_sd)
host->ocr_avail = host->ocr_avail_sd;

/*
* We need to get OCR a different way for SPI.
*/
if (mmc_host_is_spi(host)) {
mmc_go_idle(host);

err = mmc_spi_read_ocr(host, 0, &ocr);
if (err)
goto err;
}

rocr = mmc_select_voltage(host, ocr);

/*
* Can we support the voltage(s) of the card(s)?
*/
if (!rocr) {
err = -EINVAL;
goto err;
}

/*
* Detect and init the card.
*/
err = mmc_sd_init_card(host, rocr, NULL);
if (err)
goto err;

mmc_release_host(host);
err = mmc_add_card(host->card);
mmc_claim_host(host);
if (err)
goto remove_card;

return 0;

remove_card:
mmc_release_host(host);
mmc_remove_card(host->card);
host->card = NULL;
mmc_claim_host(host);
err:
mmc_detach_bus(host);

pr_err("%s: error %d whilst initialising SD card\n",
mmc_hostname(host), err);

return err;
}
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux