User Info
Добро пожаловать, Guest Пользователей: 1 Поисковых ботов: 3 Гостей: 1
Eddiebal forum Google Bot account oBot news Yandex Bot forum
Загрузка ядра с SD/MMC из U-Boot (9g45)
Jury093
Пункты: 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
Пункты: 1055
Регистрация: 16.01.2011
Пол: Мужчина
Из: Пермь
Конечно интересно! Ждем с нетерпением
Jury093
Пункты: 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
Пункты: 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
Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
проверьте на всякий случай синтаксис в конструкциях
Код #ifdef CONFIG_MMC
либо через #warning и смотреть их при перекомпиляции
или навтыкать диагностических printf("я сейчас делаю это")
и смотреть после команды
mmc init
если ошиблись в ifdef, то могло, например, железо не проинтится..
после 8-го выложу или файлы или архив пиленных исходников..
в теории, я мог что прошляпить в описание процесса..
кстати, разумеется эта карточка видна на плате под линуксом?
На любой вопрос есть любой ответ.
atmega
Пункты: 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
Пункты: 1055
Регистрация: 16.01.2011
Пол: Мужчина
Из: Пермь
Ах да, забыл указать. Судя по исходникам у-бута, источник проблемы находится в функции
Код int mmc_legacy_init(int verbose)
из файла /drivers/mmc/atmel_mci.c
Jury093
Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
вот ссылка на архив
http://webfile.ru/5176491
внутри бинарник, который прошит у меня на плате кита
и три модифицированных файла
все оставлено по умолчанию - загрузка с нанда
должны работать ветки:
usb start
mmc init
из существенного:
- видеорежим выставлен 800х600 (40МГц)
- плата кита 64МБ+32МБ
не глядя на экран просто прошейте бинарник и проверьте работу MMC/SD
На любой вопрос есть любой ответ.
vitbas
Пункты: 244
Регистрация: 07.01.2021
Цитата вот ссылка на архив
http://webfile.ru/5176491
внутри бинарник, который прошит у меня на плате кита
и три модифицированных файла
все оставлено по умолчанию - загрузка с нанда
должны работать ветки:
usb start
mmc init
из существенного:
- видеорежим выставлен 800х600 (40МГц)
- плата кита 64МБ+32МБ
не глядя на экран просто прошейте бинарник и проверьте работу MMC/SD
А не остались ли у вас файлы?? ссылка битая..
Jury093
Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
выслал бинарник из того архива..
по вопросу из соседней темы - если нужно сделать копию с раздела nand, то в оргинальном убуте надо загрузиться либо с usb накопителя (сделав на ней рутовую), либо попробовать организовать NFS (при включенной поддержке в ядре)
На любой вопрос есть любой ответ.