Перейти к содержанию
    

u-boot (iRAM) и подключение внешней DRAM

Есть u-boot запускающийся из чиповой RAM памяти размером 64KB

также есть внешняя DRAM память размером 32MB

u-boot загружается и корректно инициализирует эту внешнюю память.

Возникла необходимость добавить в u-boot поддержку загрузки ядра с SD карты.

Для этого был найден драйвер MMC.

mmc init успешно инициализирует SD карту.

Теперь нужно подключить файловую систему FAT, для использования команды fatload...

 

В u-boot включаю опцию CONFIG_CMD_FAT. И тут полезли проблемы )))

модуль fat.c имеет 3 глобальных массива по 64KB каждый.

загрузчик u-boot.lds пытается загрузить из в .bss регион встроенной RAM памяти. И естественно, это у него не получается - ибо ее размер 64KB

/home/user/projects/..../arm-uclinuxeabi-ld.real: u-boot section `.bss' will not fit in region `RAM'
/home/user/projects/..../arm-uclinuxeabi-ld.real: region `RAM' overflowed by 186932 bytes
make: *** [u-boot] Error 1

 

И тут у меня возникает ступор. Что делать в такой ситуации?

 

1) Задал в u-boot.lds скрипте адрес для RAM памяти как адрес внешней RAM (с ее размером), u-boot скомпилировался но естественно не запустился, т.к. внешнюю RAM нужно вначале проинициализировать, а уже потом использовать. Тупик.

 

2) Создал в u-boot.lds отдельный регион DRAM со своим адресом и размером. в модуле FAT.c для этих массивов указал директиву хранения в секции DRAM

u-boot собрался но u-boot.bin стал размером более 2Гб. Т.е. LD скрипт все это запихнул в прошивку (смещение до начала DRAM и сами нулевые массивы). Вообщем опять тупик.

 

Так как быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что там за переменная добавляется к .bss. Сгенерируйте map файл и посмотрите, что занимает весь сегмент .bss.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть u-boot запускающийся из чиповой RAM памяти размером 64KB

также есть внешняя DRAM память размером 32MB

 

Так как быть?

 

Какой у вас процессор ? от этого надо плясать - не верю что кроме вас никому не нужно было до этого такое, обычно сначала стартует маленький загрузчик в SRAM который инициализирует SDRAM и уже в нее подгружает u-boot. Можно не заморачиваться с fat а оставить после таблицы разделов место или отдельный маленький раздел завести и там хранить ядро без ФС, записывать ядро на карту через dd.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идее, п. 2) должен был сработать. .bss не сохраняется в объектном файле, а судя по размеру прошивки вы расширили секцию данных, либо массивы попали не в .bss. Покажите оригинальный u-boot.lds и измененный, а также правки (патч) для fat.c - может, и подскажем, что не так.

 

Другие варианты:

- заменить массивы в fat.c на указатели, которым присвоены необходимые виртуальные адреса (во внешней DRAM). Хак, но не кривее танцев с отдельными секциями для массивов.

- Уменьшить максимальный размер кластера с 64к до, скажем, 8к. Тогда все влезет во внутреннюю DRAM, но SD карту придется форматировать с учетом размера кластера.

- Вариант sasamy - отказаться от FAT, но тогда усложнится запись ядра на SD карту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...