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

Bare metal EMAC драйвер на Cortex-A9

Всем доброго.

Вожусь сейчас с ARM Cortex-A9 в составе Altera Cyclone V HPS. Интересует следующее. На борту имеется EMAC Synopsys DesignWare 3504-0 Universal Ethernet MAC в числе двух штук. Разбираюсь с bare metal приложением. У Альтеры на EMAC не нашел ни одного примера по работе с ним и в библиотеки для bare metal (hwlib) тоже ничего к EMAC относящегося не нашел (при этом есть остальные интерфейсы кроме USB). При этом под линухом EMAC разумеется поднимается и в U-Boot тоже. Но ОС на него ставить пока в планы не входило. Вообще хотелось бы узнать насколько это неблагодарное занятие в bare metal поднимать Ethernet драйвер на ARM?

И возможно кто-то уже работал с этим Eth контроллером и на него можно достать готовые драйвера? (ARM же он ARM и есть) У меня пока каша в голове по поводу процессора, не программировал его раньше.

 

В общем хотелось бы услышать совета от спецов по ARMу :rolleyes:

 

PS Раньше на простеньком Nios и самописном контроллере делал простой драйвер и надстройку в виде UDP/ARP и всё было просто, а тут такие дебри.

 

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


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

И возможно кто-то уже работал с этим Eth контроллером и на него можно достать готовые драйвера? (ARM же он ARM и есть)

Так ведь u-boot и Linux есть в качестве примера. Драйвер u-boot вряд ли стоит рассматривать серьёзно, но для старта и он сойдет.

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


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

Но ОС на него ставить пока в планы не входило. Вообще хотелось бы узнать насколько это неблагодарное занятие в bare metal поднимать Ethernet драйвер на ARM?

 

Сейчас вы тут огребете по самое... в смысле, что без линуха поднимать это дело глупо, тупо и безнадежно, займет годы и пр... приготовьтесь :biggrin:

Занятие и вправду, неблагодарное, сам поднимал с нуля MX6... Впечатление мощное :wacko:

 

А если серьезно, описание от АРМ - это очень мучительное чтиво, помню по контроллеру кэша L2. Думаю проше будет "выколупать" из убута, действительно.

 

Поищите, может есть какой либо SDK, он мне очень помог в освоении MX6.

Изменено пользователем mantech

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


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

Коллеги, спасибо что отозвались.

 

в смысле, что без линуха поднимать это дело глупо, тупо и безнадежно

Тут дело такое, у меня изделие должно полностью грузиться в пределах секунды :05: Линукс разве так умеет? И какие есть альтернативы bare metal для очень быстрой загрузки проца?

 

Так ведь u-boot и Linux есть в качестве примера. Драйвер u-boot вряд ли стоит рассматривать серьёзно, но для старта и он сойдет

Там беда в том, что их там целая куча под разные семейства-конфигурации-вендоров, при этом разной степени вменяемости (где-то init, packet_read, packet_write, а где-то тонна всякого хлама)

 

У меня есть вариант перенести на проц старое решение с Nios'a с самодельным контроллером, т.к. у меня Eth только для отладки нужен. Но хотелось всё таки со штатным EMAC разобраться, а то их там целых 2 и как-то странно свой ставить.

 

И раз про ОС речь зашла: насколько это вообще жизненная идея делать bare metal проект на ARM? Основные задачи - обработка сигналов, управление, решения, обмен с FPGA. Высокоуровневые сервисы а-ля web, snmp не нужны. Высокоскоростных интерфейсов тоже не планируется.

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


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

И раз про ОС речь зашла: насколько это вообще жизненная идея делать bare metal проект на ARM?

Кстати, тоже интересно. Чем "взрослый" проц отличается от МК? На МК (STM32, Coldfire V2) делал драйвер Ethernet (практически с нуля, по мануалу) и прикручивал к lwip без ОС. Чем проц хуже? Настройка кэша? Отсутствие вменяемой документации?

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


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

Чем проц хуже? Настройка кэша? Отсутствие вменяемой документации?

 

Ничем не хуже, но:

 

1) Отсутствие ПУТЕВОЙ документации, я не беру во внимание NDAшные камни - тут вааще весело..

2) Отсутствие примеров программ, библиотек, и тп. Бывают SDK, но очень урезанные, приходится пилить и пилить...

3) Сам камень по-себе намного сложнее (настройка стартап файла, конфигурация DCD загрузки, тактировки, кэши, MMU... в некоторых случаях требуется полная переконфигурация линкера). И самое интересное - без ПРАВИЛЬНОЙ настройки всего этого, проц либо вообще не запускается, глючит или работает как черепаха. В СТМ о таком и не догадывался.

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

5) Несколько раз приходилось копаться в линуксовых исходниках, т.к. информации просто нигде нет, ни в SDK, ни в даташите. А ковыряние в линуксе - это отдельная песня, кто в теме - тот знает.

 

Вообщем, как-то так...

По себе могу сказать, пока поднимал такой камень, раза 3 хотел плюнуть на него, и забросить эту плату так далеко, чтоб не вспоминать о ней, но здравый смысл был сильнее, и не давал мне покоя, пока ее не запустил :08:

 

Дорогу осилит идущий, только потребуется много терпения и сил. Удачи!!

 

 

ЗЫ. ТСу скажу, приступайте к драйверу сетевухи, только если разобрались с самим процом, настройкой портов ВВ для альтерн. функций, кэшами, MMU, прерываниями, контроллером памяти. Если есть какая-то хоть простенькая отладка(типа printf через уарт), иначе это будет мартышкин труд.

При работе с буферами и конфигурационными записями сетевухи, учитывайте, что они должны быть в некэшируемой области памяти!

 

Тут дело такое, у меня изделие должно полностью грузиться в пределах секунды Линукс разве так умеет?

 

У TimeSys линукса есть какая-то приблуда, которая кеширует образы закрузки на диск, а потом их загружает прямо в память и запускает. На счет секунды не знаю, но за 2-3сек загружает точно. Это на случай, если с камнем не справитесь :laughing:

Изменено пользователем mantech

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


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

ЗЫ. ТСу скажу, приступайте к драйверу сетевухи, только если разобрались с самим процом, настройкой портов ВВ для альтерн. функций, кэшами, MMU, прерываниями, контроллером памяти.

 

Я таки извиняюсь, работал с чем-то похожим, как я понимаю, а именно с Zynq от Xilinx. И что бы там написать baremetal программку для общения через Ethernet мне не приходилось все это делать. Да и вообще, работать с ним без операционной системы ни капли не сложнее чем с Microblaze (аналог Nios). Там вся периферия (ddr, клоки...) конфигурируется автоматически, на основе параметров заданных в визарде. А работа с конкретными устройствами описана в небольшой библиотеке драйверов для baremetal приложений. У альтеры разве не тоже самое?

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


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

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

 

 

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


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

Видел кто-то хвастал линуксом который грузится за доли секунды от начала, до консоли...

 

Наверно это как раз тот линукс, про который я писал выше.

 

Там вся периферия (ddr, клоки...) конфигурируется автоматически, на основе параметров заданных в визарде. А работа с конкретными устройствами описана в небольшой библиотеке драйверов для baremetal приложений.

 

Ну тогда вам просто повезло с процом, в моем случае никаких визардов и в помине не было :crying:

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


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

Там беда в том, что их там целая куча под разные семейства-конфигурации-вендоров, при этом разной степени вменяемости (где-то init, packet_read, packet_write, а где-то тонна всякого хлама)

Ну а в данном случае как?

 

И раз про ОС речь зашла: насколько это вообще жизненная идея делать bare metal проект на ARM? Основные задачи - обработка сигналов, управление, решения, обмен с FPGA. Высокоуровневые сервисы а-ля web, snmp не нужны. Высокоскоростных интерфейсов тоже не планируется.

Нормальная идея: ставить Linux просто из тех соображений, что железо это позволяет сделать, тоже неразумно.

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


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

ЗЫ. ТСу скажу, приступайте к драйверу сетевухи, только если разобрались с самим процом, настройкой портов ВВ для альтерн. функций, кэшами, MMU, прерываниями, контроллером памяти. Если есть какая-то хоть простенькая отладка(типа printf через уарт), иначе это будет мартышкин труд.

При работе с буферами и конфигурационными записями сетевухи, учитывайте, что они должны быть в некэшируемой области памяти!

Ага разобрался с загрузкой, инициализацией MMU, прерываниями и подключением к FPGA, взялся за сетевуху. Есть и отладка и кастомная платка, на них и тружусь.

Вообщем, как-то так...

По себе могу сказать, пока поднимал такой камень, раза 3 хотел плюнуть на него, и забросить эту плату так далеко, чтоб не вспоминать о ней, но здравый смысл был сильнее, и не давал мне покоя, пока ее не запустил

Тоже иногда хочется утопить ее где нибудь...

Я таки извиняюсь, работал с чем-то похожим, как я понимаю, а именно с Zynq от Xilinx. И что бы там написать baremetal программку для общения через Ethernet мне не приходилось все это делать. Да и вообще, работать с ним без операционной системы ни капли не сложнее чем с Microblaze (аналог Nios). Там вся периферия (ddr, клоки...) конфигурируется автоматически, на основе параметров заданных в визарде. А работа с конкретными устройствами описана в небольшой библиотеке драйверов для baremetal приложений. У альтеры разве не тоже самое?

Кастомизация у альтеры слабая, приходится много своими руками делать, и документация не на все есть.

Ну а в данном случае как?

Пока ничего путного не нашел для альтерного сока.

Нормальная идея: ставить Linux просто из тех соображений, что железо это позволяет сделать, тоже неразумно.

Радует, а то пока про bare metal и ARM какие-то панические отзывы

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


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

Ага разобрался с загрузкой, инициализацией MMU, прерываниями и подключением к FPGA, взялся за сетевуху. Есть и отладка и кастомная платка, на них и тружусь.

 

 

 

Радует, а то пока про bare metal и ARM какие-то панические отзывы

 

Тогда полдела уже сделано, я в основном по-первости и буксовал, дальше все пошло более-менее нормально. Из линукса по сетевке все-таки придется кое-что выдрать, попробуйте, по началу сложно, но все решаемо. Как правило, смотрите в каталоге Arch и Drivers. Главное - не слушайте мнение "толпы", что все сложно и безнадежно B)

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


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

Возможно, не совсем в тему: на TI DM365 отдельным разработчикам удалось получить запуск Linux за 0.6 с - http://www.makelinux.com/emb/fastboot/dm365 У нас получились более скромные результаты - порядка 8 с. Основное ограничение, оказывающее влияние на время запуска, - медленное чтение образа.

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


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

Возможно, не совсем в тему: на TI DM365 отдельным разработчикам удалось получить запуск Linux за 0.6 с

Спасибо за любопытную инфу, погляжу.

 

У нас получились более скромные результаты - порядка 8 с

А вы с какого носителя загружались?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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