API драйвера Ethernet на U-Boot
Моя проблема с вызовами Ethernet/Socket. В Linux у нас есть вызовы sendto и recvfrom для отправки и получения данных с внешних устройств, подключенных через Ethernet. Сейчас я выполняю свой код в U-Boot как отдельное приложение. Мне нужно заменить эти вызовы сокета, которые должны быть независимыми от ОС.
Существуют ли какие-либо API / драйверы в U-Boot, чтобы я мог использовать их напрямую и передавать данные на целевую плату и с нее? Если да, где я должен проверить драйвер процессора? Я не могу найти это. Плата, которую я использую, является специализированной на основе процессора MPC8548E.
2 ответа
Автономный API U-Boot поддерживает необработанные пакеты ethernet eth_send() и eth_receive (). Однако это гораздо меньше функциональности, чем в сокетах Linux.
Этот момент более интересен для меня. Насколько я понял, мы можем экспортировать функции eth_send() и eth_receive () из U-Boot и использовать их в автономных приложениях. Правильно? Меньше функциональности, что вы имели в виду под этим? Используя сокеты Linux, я передал необработанный кадр Ethernet. Это делается по следующей ссылке: http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch01s03.html Не могу ли я добиться подобной функциональности здесь, используя функции eth_send и eth_receive? Что я сделал в своем автономном приложении: создал буфер без знака с 60 элементами и попытался отправить их, вызвав eth_send() следующим образом: ethSendVar = eth_send (txFrame, 60); Это правильный способ сделать? Когда я сделал это, плата автоматически сбрасывалась в том месте, где я вызвал eth_send() в коде.
В идеале существующие команды будут делать то, что вам нужно. Например, вы можете собрать содержимое файла в отдельном приложении, вызываемом через командную строку, а затем передать файл с помощью существующей команды tftpboot. Или вы можете реализовать пользовательские команды внутри u-boot, а не в отдельном приложении; Вы можете скопировать / вставить из реализации существующих протоколов.
На самом деле это сейчас неинтересно. Я должен иметь возможность отправлять и получать только из приложения.
Автономный API U-Boot поддерживает необработанные пакеты ethernet eth_send() и eth_receive(). Однако это гораздо меньше функциональности, чем в сокетах Linux.
Протоколы по UDP, например, DHCP и TFTP, реализованы в командах U-Boot (хотя эти протоколы не экспортируются в автономный API). Если вам нужно больше функциональности, например, TCP, вам, вероятно, понадобится ОС, то есть Linux, а не U-Boot.
В идеале существующие команды будут делать то, что вам нужно. Например, вы можете собрать содержимое файла в отдельном приложении, вызываемом через командную строку, а затем передать файл с помощью существующей команды tftpboot. Или вы можете реализовать пользовательские команды внутри u-boot, а не в отдельном приложении; Вы можете скопировать / вставить из реализации существующих протоколов.
Если вы пользуетесь автономным приложением, обратитесь к examples / api / demo.c. Это показывает возможности и ограничения автономного API. Если у вас есть исходный код для вашей настроенной u-boot, demo.bin будет в выходных данных сборки (убедитесь, что у вас есть #define CONFIG_API в config.h вашей платы), и он может просто загружаться / запускаться на вашей плате без дальнейших действий. модники. Для интерфейса eth он будет использовать ethact и отправит пакет, заполненный 00. Драйвер для конкретной платы уже находится в вашей загрузочной загрузке.