Ник:
Пароль:

Контакты

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

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45/M10
Загрузка ядра с SD/MMC из U-Boot (9g45)
Jury093
Добавлено 04.02.2011 12:22
0
Сообщение: 1
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
хе-хе, второй раз прошел путь по допиливанию ю-бута для сабжа.. 15 минут фехтования и дело в шляпе.
Цель: загрузить ядро из U-Boot с раздела SD/MMC карточки.
Лог:
Код
DRAM: 64 MiB
## Unknown FLASH on Bank 1 - Size = 0x00000000 = 0 MB
Flash: 0 Bytes
NAND: 256 MiB
In: serial
Out: serial
Err: serial
Net: macb0
Hit any key to stop autoboot: 0
U-Boot> mmc init
mmc: clock 150000 too low; setting CLKDIV to 255
Manufacturer ID: 1C
OEM/Application ID: 5356
Product name: SDC
Product Revision: 1.0
Product Serial Number: 1627391780
Manufacturing Date: 05/07
SD Card detected (RCA 45928)
CSD data: 005e0032 1f5983d0 6db7bf9f 96400005
CSD structure version: 1.2
MMC System Spec version: 12
Card command classes: 3d0
Read block length: 256
Supports partial reads
Write block length: 1
Does not support partial writes
Does not support group WP
Card capacity: 131072000 bytes
File format: 1/2
Write protection: permanent
mmc: Using 983040 cycles data timeout (DTOR=0x6f)
.mmc1 is available
U-Boot> fatls mmc1 0
....... 11125 boot.bin
2690876 image.bin

2 file(s), 0 dir(s)
U-Boot> fatload mmc1 0 70400000 image.bin
..reading image.bin
2690876 bytes read
U-Boot> bootm 70400000
## Booting kernel from Legacy Image at 70400000 ...
Image Name: Linux Kernel Image
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2690812 Bytes = 2.6 MiB
Load Address: 70008000
Entry Point: 70008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

=================================
Linux version 2.6.36-rc6 (root@debian) (gcc version 4.2.0 20070413 (prerelease) (CodeSourcery Sourcery G++ Lite 2007q1-10)) #389 Thu Jan 13 14:58:03 EST 2011
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: SK-MAT91SAM9G45
Ignoring unrecognised tag 0x54410009
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 400 MHz, master 133 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256

Результат: признать положительным, но есть ньюансы :)

1. скорость загрузки 2-5 секунд на 2.5МБ имидж
2. традиционно вставленный костыль bl_len++, с тех давних пор ничего не пофиксили, все баги инфы по карточке в логе, буэ..
3. протестил пока на синенькой гигушке, другие карточки не пробовал
4. протестил пока на FAT, чуть позже попробую EXT_N (вдруг заработает)
5. траекторию правки опубликую чуть позже, если это конечно надо и интересно..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
atmega
Добавлено 04.02.2011 12:49 Сообщение: 2
atmega
0

Пункты: 1055
Регистрация: 16.01.2011
Пол: Мужчина
Из: Пермь
Конечно интересно! Ждем с нетерпением
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 04.02.2011 14:52 Редактировалось 05.02.2011 22:53 Сообщение: 3
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
собственно исправлений по сравнению с 9260 немного:
в файле at91sam9m10g45ek.c
дописать в начале
Код
#include <mmc.h>

в любом месте перед инитом борды
Код
#ifdef CONFIG_MMC
void at91sam9m10g45ek_mmc_hw_init(void)
{
at91_sys_write(AT91_PMC_PCER, 1<< AT91SAM9G45_ID_MCI0);
/* CLK */
at91_set_A_periph(AT91_PIN_PA0, 0);
/* CMD */
at91_set_A_periph(AT91_PIN_PA1, 1);
/* DAT0, maybe DAT1..DAT3 and maybe DAT4..DAT7 */
at91_set_A_periph(AT91_PIN_PA2, 1);
at91_set_A_periph(AT91_PIN_PA3, 1);
at91_set_A_periph(AT91_PIN_PA4, 1);
at91_set_A_periph(AT91_PIN_PA5, 1);
}
#endif

в п/п инита борды перед return 0
Код
#ifdef CONFIG_MMC
at91sam9m10g45ek_mmc_hw_init();
#endif


в файле atmel_mci.c
найти п/п int mmc_legacy_init(int verbose)
и прописать как после комента //jury
Код
/* Get CSD from the card */
ret = mmc_cmd(MMC_CMD_SEND_CSD, mmc_rca << 16, &csd, R2 | NCR);
if (ret)
return ret;
if (verbose)
mmc_dump_csd(&csd);

mci_set_data_timeout(&csd);
//jury
csd.read_bl_len++;


в файле atmel_mci.h
где-нить в начале добавить
Код
#define MMCI_BASE 0xfff80000


в файле конфигурации борды at91sam9m10g45ek.h
Код
#define CONFIG_CMD_MMC 1
#define CONFIG_MMC 1
#define CONFIG_ATMEL_MCI 1
#define CONFIG_CMD_EXT2 1
#define CONFIG_GENERAL_MMC 1
#define CONFIG_SYS_MMC_CD_PIN AT91_PINPA31
#define CONFIG_CMD_FAT 1


далее
Код
./make_config
./make_bin

вроде все (патч делать буду). просьба - если возникнут ошибки при сборке - отпишите с приложением куска лога - на что ругается..

update в последнюю фразу вкралась досадная опечатка, читать "патч делать не буду" :)

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
atmega
Добавлено 06.03.2011 12:52 Сообщение: 4
atmega
0

Пункты: 1055
Регистрация: 16.01.2011
Пол: Мужчина
Из: Пермь
Наконец-то обзавелся SD/MMC карточкой (Transcend, 4 GB).
Проделал все вышеописанные операции, в у-буте ввожу

Код
mmc init


а он выдает

Код
U-Boot> mmc init
mmc: clock 150000 too low; setting CLKDIV to 255
mmc: command 1 failed (status: 0x0c100025)
No MMC card found


Воть... Может, есть какие-нибудь идеи по поводу того, в чем может быть причина?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 06.03.2011 20:20 Сообщение: 5
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
проверьте на всякий случай синтаксис в конструкциях
Код
#ifdef CONFIG_MMC

либо через #warning и смотреть их при перекомпиляции
или навтыкать диагностических printf("я сейчас делаю это")
и смотреть после команды mmc init
если ошиблись в ifdef, то могло, например, железо не проинтится..

после 8-го выложу или файлы или архив пиленных исходников..
в теории, я мог что прошляпить в описание процесса..

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

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
atmega
Добавлено 06.03.2011 22:10 Редактировалось 06.03.2011 22:11 Сообщение: 6
atmega
0

Пункты: 1055
Регистрация: 16.01.2011
Пол: Мужчина
Из: Пермь
Да, карточка видна на плате под линуксом, можно копировать туда файлы и т.д. Файловая система с этой карточки грузится ядром нормально.

Синтаксис в хитрых конструкциях проверил - все совпадает.

Кстати, я не очень понимаю необходимость конструкции
Код
#define CONFIG_GENERAL_MMC 1


Любопытства ради заменил ее на
Код
#define CONFIG_GENERIC_MMC 1


В результате несколько поменялось подменю у-бута, связанное с mmc, но результата это не дало:

Код
U-Boot> mmc
mmc - MMC sub system

Usage:
mmc read <device num> addr blk# cnt
mmc write <device num> addr blk# cnt
mmc rescan <device num>
mmc part <device num> - lists available partition on mmc
mmc list - lists available devices
U-Boot> mmc list

U-Boot>
Спуститься к концу Подняться к началу
Персональная информация
atmega
Добавлено 06.03.2011 22:30 Сообщение: 7
atmega
0

Пункты: 1055
Регистрация: 16.01.2011
Пол: Мужчина
Из: Пермь
Ах да, забыл указать. Судя по исходникам у-бута, источник проблемы находится в функции
Код
int mmc_legacy_init(int verbose)

из файла /drivers/mmc/atmel_mci.c
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 07.03.2011 22:50 Сообщение: 8
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
вот ссылка на архив
http://webfile.ru/5176491
внутри бинарник, который прошит у меня на плате кита
и три модифицированных файла
все оставлено по умолчанию - загрузка с нанда
должны работать ветки:
usb start
mmc init

из существенного:
- видеорежим выставлен 800х600 (40МГц)
- плата кита 64МБ+32МБ

не глядя на экран просто прошейте бинарник и проверьте работу MMC/SD

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
vitbas
Добавлено 27.03.2021 18:57 Сообщение: 9
vitbas
0

Пункты: 244
Регистрация: 07.01.2021
Цитата
вот ссылка на архив
http://webfile.ru/5176491
внутри бинарник, который прошит у меня на плате кита
и три модифицированных файла
все оставлено по умолчанию - загрузка с нанда
должны работать ветки:
usb start
mmc init

из существенного:
- видеорежим выставлен 800х600 (40МГц)
- плата кита 64МБ+32МБ

не глядя на экран просто прошейте бинарник и проверьте работу MMC/SD



А не остались ли у вас файлы?? ссылка битая..
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 27.03.2021 20:05 Сообщение: 10
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
[quote]вот ссылка на архив
http://webfile.ru/5176491
А не остались ли у вас файлы?? ссылка битая..

выслал бинарник из того архива..
по вопросу из соседней темы - если нужно сделать копию с раздела nand, то в оргинальном убуте надо загрузиться либо с usb накопителя (сделав на ней рутовую), либо попробовать организовать NFS (при включенной поддержке в ядре)

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45/M10