Jump to content

    

Alexey_Rostov

Свой
  • Content Count

    253
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Alexey_Rostov

  • Rank
    Местный
  • Birthday 04/03/1985

Контакты

  • Сайт
    http://www.linkedin.com/in/alexey-rostov-749016172/
  • ICQ
    0

Информация

  • Город
    Минск, Беларусь

Старые поля

  • skype
    farbius85
  • LinkedIn
    http://www.linkedin.com/in/alexey-rostov-749016172/

Recent Profile Visitors

1756 profile views
  1. Тоже не получилось зашить флеш в данной версии Вивадо. Решение: пересобрал проект и SDK в другой версии.
  2. Спасибо, проблему решил. Подсети на imx8 разные выставил: root@imx8m-var-dart:~# ip route 192.168.1.0/24 dev usb0 proto kernel scope link src 192.168.1.99 192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.33 На ПК IP выставил 192.168.2.2. Теперь пинг проходит по каждому интерфейсу root@imx8m-var-dart:~# ping -I eth0 192.168.2.2 PING 192.168.2.2 (192.168.2.2) from 192.168.2.33 eth0: 56(84) bytes of data. 64 bytes from 192.168.2.2: icmp_seq=1 ttl=128 time=2.44 ms --- 192.168.2.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms root@imx8m-var-dart:~# ping -I usb0 192.168.1.100 PING 192.168.1.100 (192.168.1.100) from 192.168.1.99 usb0: 56(84) bytes of data. 64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.699 ms 64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.641 ms --- 192.168.1.100 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1028ms
  3. root@imx8m-var-dart:~# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 usb0 root@imx8m-var-dart:~# ip route 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.33 192.168.1.0/24 dev usb0 proto kernel scope link src 192.168.1.99 Интерфейс usb0 имеет статический ip 192.168.1.99 для соединения с сервером с ip 192.168.1.100 port 0x5555, интерфейс eth0 используется пока для удаленной компиляции на плате imx8 c ПК. После reboot и назначения ip для usb0 и eth0 пинг проходит только по интерфейсу eth0. При дебаге кода (тестовый tcp клиент), программа не выполняет connect() для usb0 интерфейса
  4. изменил IP и скопировал. правильно 192.168.2.0/24 Я понимаю, что что-то неправильно делаю при реализации двух сетевых интерфейсов под linux. Обязательно должно быть: - разные роут для каждого интерфейса
  5. Добрый день! Запускаю на arm64 imx8 board сеть с использованием RNDIS интерфейса и eth0. root@imx8m-var-dart:~# ifconfig eth0 Link encap:Ethernet HWaddr f8:dc:7a:1b:f1:ae inet addr:192.168.2.33 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::fadc:7aff:fe1b:f1ae/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3917 errors:0 dropped:0 overruns:0 frame:0 TX packets:945 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:300204 (293.1 KiB) TX bytes:233024 (227.5 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:138 errors:0 dropped:0 overruns:0 frame:0 TX packets:138 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12968 (12.6 KiB) TX bytes:12968 (12.6 KiB) usb0 Link encap:Ethernet HWaddr 26:16:ff:7d:bb:80 inet addr:192.168.1.99 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::2416:ffff:fe7d:bb80/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:52 errors:0 dropped:0 overruns:0 frame:0 TX packets:587 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3416 (3.3 KiB) TX bytes:131753 (128.6 KiB) Включаю интерфейсы по отдельности, пинг проходит. как только запускаю два интерфейса одновременно, то пингуется только тот, который был запущен первым Роут у них общий root@imx8m-var-dart:~# ip route 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.33 192.168.1.0/24 dev usb0 proto kernel scope link src 192.168.1.99 разносил на разные подсети, проблема не решилась. Что необходимо для корректной работы двух интерфейсов одновременно?
  6. Здравствуйте! Уважаемые форумчане, возможно кто нибудь подскажет, как подключить opencv при удаленной компиляции в Microsoft Visual Studio с помощью расширения Linux development with C++ ? Есть отладочный набор DART-MX8M development board. На ARM поставил собранный с помощью yocto образ Linux. В VS2017 с помощью расширения Linux development with C++ выполняю удаленную компиляцию. Helloword запускается, но при попытке запустить код с объявленным Mat выдает ошибку 'Mat' was not declared in this scope. Как компоновщику указать на opencv в DART-MX8M development board?
  7. Выложу исходники, может кому пригодится. Получилось так, записываю: во флеш по адресу 0х00000000 файл с проинициализированной BRAM: download.bit По адресу 0х00440000 файл: first_elf.elf по адресу 0х00840000 файл: second_elf.elf При подаче питания запускается download.bit, потом загружается и исполняется first_elf.elf, и далее second_elf.elf. Код для формирования bootloader'а download.bit взял от trenz electonics^ #include "spi_flash.h" #include <stdio.h> //----------------------------------------------------------------------------- #define SSB_START_ADDR 0x00440000 #define XIL_BIT_SYNC 0x665599AA #define ELF_EHSIZE 52 #define ELF_SHENTSIZE 40 #define ELFMAG 0x464C457F #define SHT_PROGBITS 1 #define ELF_HDR_SHNUM_OFF 48 #define ELF_HDR_SHOFF_OFF 8 #define ELF_HDR_SHTYPE_OFF 4 #define ELF_HDR_SHADDR_OFF 3 #define ELF_HDR_SHOFFSET_OFF 4 #define ELF_HDR_SHSIZE_OFF 5 #define MEM_TEST_RANGE 0x1000 #define SPI_READ_CMD 0x0300 //----------------------------------------------------------------------------- u8 e_shnum, section, sh_type; u32 e_shoff, sh_addr, sh_offset, sh_size; int (*reset_func) () = 0; u32 int_read_buf[13]; u32 int_readtest_buf[64]; u8* char_readtest_buf = (u8*)int_readtest_buf; u8* char_read_buf = (u8*)int_read_buf; u8 *mem_section; volatile u32 *ddr_mem = (u32*)XPAR_MIG_7SERIES_0_BASEADDR; //----------------------------------------------------------------------------- void pause(int p){ volatile int v; for(v = 0; v < (400000 * p); v++); } //----------------------------------------------------------------------------- int main(void){ int i; print("\r\nTrenz Electronic ELF bootloader "__DATE__" "__TIME__"\r\n\r\n"); spi_flash_init(XPAR_AXI_QUAD_SPI_0_DEVICE_ID); // Init SPI Flash // Test memory before use it! for(i = 0; i < MEM_TEST_RANGE; i++) ddr_mem[i] = i; for(i = 0; i < MEM_TEST_RANGE; i++){ if(ddr_mem[i] != i){ xil_printf("ERROR: Memory test failed!\r\n"); while(1); } } //////////////////////////////////// // Read SSB spi_flash_read(SSB_START_ADDR, ELF_EHSIZE, char_read_buf); if(int_read_buf[0] != ELFMAG){ xil_printf("ERROR: Boot image not found\r\n"); while(1); } e_shnum = char_read_buf[ELF_HDR_SHNUM_OFF]; e_shoff = int_read_buf[ELF_HDR_SHOFF_OFF]; for(section = 0; section < e_shnum; section++){ // Sections loop spi_flash_read((SSB_START_ADDR + e_shoff + section * ELF_SHENTSIZE), ELF_SHENTSIZE, char_read_buf); sh_type = char_read_buf[ELF_HDR_SHTYPE_OFF]; sh_addr = int_read_buf[ELF_HDR_SHADDR_OFF]; sh_offset = int_read_buf[ELF_HDR_SHOFFSET_OFF]; sh_size = int_read_buf[ELF_HDR_SHSIZE_OFF]; mem_section = (u8*)sh_addr; if(sh_type == SHT_PROGBITS){ // Process only sections with data if(sh_addr == 0){ if(sh_size == 8) spi_flash_read((SSB_START_ADDR + sh_offset), sh_size, mem_section); } else // Usual sections spi_flash_read((SSB_START_ADDR + sh_offset), sh_size, mem_section); } } // Sections loop xil_printf("\r\nBoot...\r\n"); pause(1); reset_func(); // Start Second Stage while(1); } Полученный при компиляции elf файл размещаю в BRAM и при прошивке ПЛИС получаю download.bit Код для формирования first_elf.elf: #include "spi_flash.h" #include <stdio.h> //----------------------------------------------------------------------------- #define SSB_START_ADDR 0x00840000 #define XIL_BIT_SYNC 0x665599AA #define ELF_EHSIZE 52 #define ELF_SHENTSIZE 40 #define ELFMAG 0x464C457F #define SHT_PROGBITS 1 #define ELF_HDR_SHNUM_OFF 48 #define ELF_HDR_SHOFF_OFF 8 #define ELF_HDR_SHTYPE_OFF 4 #define ELF_HDR_SHADDR_OFF 3 #define ELF_HDR_SHOFFSET_OFF 4 #define ELF_HDR_SHSIZE_OFF 5 #define MEM_TEST_RANGE 0x1000 #define SPI_READ_CMD 0x0300 //----------------------------------------------------------------------------- u8 e_shnum, section, sh_type; u32 e_shoff, sh_addr, sh_offset, sh_size; int (*reset_func) () = 0; u32 int_read_buf[13]; u32 int_readtest_buf[64]; u8* char_readtest_buf = (u8*)int_readtest_buf; u8* char_read_buf = (u8*)int_read_buf; u8 *mem_section; volatile u32 *ddr_mem = (u32*)XPAR_MIG_7SERIES_0_BASEADDR; //----------------------------------------------------------------------------- void pause(int p){ volatile int v; for(v = 0; v < (400000 * p); v++); } //----------------------------------------------------------------------------- int main(void){ int i; print("\r\nTrenz Electronic ELF bootloader "__DATE__" "__TIME__"\r\n\r\n"); spi_flash_init(XPAR_AXI_QUAD_SPI_0_DEVICE_ID); // Init SPI Flash ////////////////////////////////////////////////////////// ////////// ANY USER APP ///////////////////////////////// for(i = 0; i < 100; i ++){ xil_printf("data from first app is %d", i); } /////////////////////////////////////////////////////// //////////////// END ANY USER APP ///////////////////// /////////////////////////////////////////////////////// //////////////////////////////////// // Read SSB spi_flash_read(SSB_START_ADDR, ELF_EHSIZE, char_read_buf); if(int_read_buf[0] != ELFMAG){ xil_printf("ERROR: Boot image not found\r\n"); while(1); } e_shnum = char_read_buf[ELF_HDR_SHNUM_OFF]; e_shoff = int_read_buf[ELF_HDR_SHOFF_OFF]; for(section = 0; section < e_shnum; section++){ // Sections loop spi_flash_read((SSB_START_ADDR + e_shoff + section * ELF_SHENTSIZE), ELF_SHENTSIZE, char_read_buf); sh_type = char_read_buf[ELF_HDR_SHTYPE_OFF]; sh_addr = int_read_buf[ELF_HDR_SHADDR_OFF]; sh_offset = int_read_buf[ELF_HDR_SHOFFSET_OFF]; sh_size = int_read_buf[ELF_HDR_SHSIZE_OFF]; mem_section = (u8*)sh_addr; if(sh_type == SHT_PROGBITS){ // Process only sections with data if(sh_addr == 0){ if(sh_size == 8) spi_flash_read((SSB_START_ADDR + sh_offset), sh_size, mem_section); } else // Usual sections spi_flash_read((SSB_START_ADDR + sh_offset), sh_size, mem_section); } } // Sections loop xil_printf("\r\nBoot...\r\n"); pause(1); reset_func(); // Start Second Stage while(1); } По сути тот же bootloader только адрес указывает на расположение следующего elf файла (0x00840000) и файл разместил в DDR, но не с начального адреса, а со смещением. Второй second_elf.elf это уже любой elf файл, размещенный в DDR с начального адреса.
  8. Конечно можно) К сожалению в проекте вся блочная память разделена между остальными ядрами и на процессор остается только 16 Кбайт
  9. Спасибо за ответ. У меня получается так: во флеш с нулевого адреса записывается bit файл с инициализированной bram. Инициализирована bram elf файлом, в котором программа просто находит elf файл по заданному указателю и вычитывает ИСПОЛНЯЕМЫЙ код в ДДР. То есть компилировать в screc формат нет необходимости, т.к. это elf файл из BRAM вычитывает только исполняемую часть elf для DDR.
  10. Здравствуйте! Уважаемые товарищи подскажите пожалуйста, какие варианты решения для следующей задачки: необходимо последовательно запустить два elf файла на microblaze, который загружается из FLASH памяти. Сейчас создаю свой bootloader в виде bit файла с проинициализированной BRAM (16 КБайт), который записываю во FLASH (адресом выше записываю основной elf файл для работы процессора ). При подаче питания в ПЛИС подгружается bit файл и запускается elf из BRAM памяти, который вычитывает основной elf в DDR и сбрасывает Microblaze для выполнения кода уже из DDR. Тут все просто. Теперь возникла необходимость перед запуском основного elf файла записать массив user data во FLASH (выше bit, elf). Проинициализировать BRAM bootloader'ом и массивом user data не получится, т.к. 16 кБайт BRAM недостаточно, а увеличить нельзя. Вот и необходимо сделать так: подали питание, загрузили bit с инициализированной BRAM, процессор вычитал в DDR elf с массивом user data и вычитал elf с основным ПО, выполнил elf с массивом user data (записал данные во FLASH), потом сбросили процессор и сказали ему выполнять код уже из основного elf файла. Как указать microblaze на указатель откуда в DDR выполнять код?
  11. В 2017.4 vivado заново пересобрал проект и ошибка пропала. Скорее всего среда что то подтягивает от предыдущих попыток сборки.
  12. Собираемый выходной кадр необходимо хранить во внешней памяти, а у меня условие использовать только внутренние ресурсы ПЛИС.
  13. Приходит кадр из 720 строк, за длительность кадра необходимо выдать подряд 360 строк. Причем 360-ую строку буду формировать во время прихода 719 и 720. То есть в любом случае необходимо копить линии, т.к. нельзя выдать одну линию, следующую не выдавать (сигналы hsync и valid бланкированы). VESA стандарт pdf VESA_standart.pdf
  14. Сигнал valid в HDMI в течении линии будет прерываться, если я правильно понял. То есть записали в buf3 данные рассчитали первый выходной пиксель, как сумму четного, нечетного пикселя 1-ой и 2-ой строки, деленную на 4. Ждем пока запишется в buf3 четный пиксель второй строки, рассчитываем второй выходной пиксель. Когда ожидаем в сигнале valid разрыв. Кадр не отобразится на мониторе.