sheynmanyu
-
Постов
76 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные sheynmanyu
-
-
13 minutes ago, gosha-z said:
Вообще-то в мастере linux-xlnx уже с полгода как 4.19
Я до конца еще не разобралась с петалинуксом. Но, как мне представляется, он ставит ту версию, которая ему соответствует. в общем, когда я запускаю петалинукс на своей плате, то в ответ на команду uname -a он мне выдает 4.14.0-xilinx
-
3 hours ago, gosha-z said:
Вот не понимаю, почему надо обязательно искать патчи в загашниках Мастера Чо, накатывать патчи для 4.14 на ядро 4.19, вместо того, чтобы обратиться к первоисточнику
У меня ядро 4.14 :)
14 hours ago, Jury093 said:может выгоднее оставить кернел в покое и прикрутить рядом в фпга какую-нить реализацию однокристалки?
Можно и на втором ядре процессора попробовать baremetal application запустить. Это тоже как вариант :)
Спасибо!
-
Cама и разобралась. Помогло применить патч к исходникам линукса напрямую. Перейти в директорию linux-xlnx (с github xilinx) и выполнить команду patch -p1 < /путь/к патчу/patch-4.14-rt1.patch
-
Здравствуйте!
У меня petalinux 2018.3 и zedboard. Хочу добавить патч. Нашла вот такое замечательное описание (google в помощь) https://linux.incomeself.com/在petalinux中加入real-time修補檔/
Но есть одна проблема: делаю как написано, а желаемого выбора при настройке свойств ядра не появляется. Есть только Preemptible Kernel (Low-Latency Desctop).
Как применить патч, чтобы все заработало? Почему может не получаться?
-
Just now, Dimidrol said:
Следует сделать вывод, что изменения изменения конфигурационных файлов хранятся в оперативной памяти, и поэтому после перезагрузки ничего не сохраняется. Вам нужно в образе корневой файловой системы сделать изменения.
Именно их я и сделала. В итоге на карте - измененный файл, а в оперативной памяти - какой-то дефолтный. Чуть попозже вернусь к этому вопросу и напишу о том, что вышло после поиска в /usr и /etc файлов настроек и инициализации.
-
Среди layers проекта yocto есть matplotlib. Хочу его поставить к себе на petalinux 2018.3. Но при попытке в интерпретаторе python импортировать matplotlib вываливается ошибка, что нет модуля python-cycler. В гите open-embedded есть вот такой патч: https://patchwork.openembedded.org/patch/144425/
Как поступить с патчем, как его наложить? Подскажите, пожалуйста.
Может, кому удавалось на петалинуксе запустить python-matplotlib? Буду признательна за помощь.
-
21 hours ago, Dimidrol said:
А корневая файловая система у вас точно на карте, а не в оперативной памяти развёртывается?
С карты в оперативную память.
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
12 minutes ago, Jury093 said:если содержимое вернулось на исходную, то ищите по рутовой скрипт, который может это делать
Где они водятся и как их быстро искать? Через grep? В init.d?
-
Как добавить/убрать список серверов в /etc/ntp.conf?
Есть собранный petalinux, который грузится с SD карточки. В нем добавен демон ntpd.
После сборки петалинукса монтирую rootfs.ext3, правлю файл /etc/ntp.conf, копирую все файлы на загрузочную флешку, загружаю zedboard и обнаруживаю дефолтный /etc/ntp.conf. На флешке - измененный, а при загрузке воспроизводится дефолтный. Подскажите, пожалуйста, где и что исправить, чтобы настройки для ntp брались из моего файла?
И второе непонятное обстоятельство. Почему-то, прописав в /project-spec/meta-user/recipes-core/images/petalinux-image-full.bbappend
IMAGE_INSTALL_append = " ntp"
я получила собранным только ntpd (без ntpq, а хотелось бы). Файлы для сборки брала из http://petalinux.xilinx.com/sswreleases
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
проверьте так же, что система может отдавать 32МБ (дефолтный ограничитель 16МБ)Система спокойно отдает нужный объем памяти. Я необходимые настройки для ядра выставила :)
Ниже в программе я вызываю mmap для этого региона и после спокойно в него пишу и из него читаю...
uint32_t *mem=(uint32_t *) mmap(NULL, 0x2000000, PROT_READ | PROT_WRITE, MAP_SHARED, fd_mem, 0x17000000);
И операции вида mem[0] =5 ошибок не вызывают :laughing:
-
Здравствуйте!
Есть zedboard (zynq7000), на которой запущен petalinux.
Надо по ssh передать файл с компм на zedboard, и чтобы этот файл в конце-концов оказался в буфере с известной физической памятью (в DDR).
Копирование файла через ssh проблем не вызывает. А вот как ьбеспечить помещение этого файла в извастную область ddr памяти?
Пока пробую с splice, но при этом зависает petalinux.
Device tree (часть, касающаяся буфера, в который хочу поместить файл)
reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; reserved: axi-buffer@0x17000000 { compatible = "shared-dma-pool"; no-map; //reusable; reg = <0x17000000 0x2000000>; //size 32 MB linux,dma-default; }; };
Код программы на C
int filedes[2]; static int buf_size = 4096; loff_t in_off = 2; loff_t uuu = 0x17000000; off_t len; int fd_mem = open("/dev/mem",O_RDWR); int fd_file = open(argv[1],O_RDONLY); struct stat stbuf; if(pipe(filedes) < 0) return -1; if(fstat(fd_file, &stbuf) < 0) return -1; len = stbuf.st_size; while(len > 0) { if(buf_size > len) buf_size = len; /* * move to pipe buffer. */ ret = splice(fd_file, &in_off, filedes[1], NULL, buf_size, SPLICE_F_MOVE | SPLICE_F_MORE); printf("ret is %d\n",ret); if(ret < 0) return -1; len -= ret; } len = stbuf.st_size; printf("len = %d\n",len); while(len > 0) { if(buf_size > len) buf_size = len; /* * move from pipe buffer to out_fd */ ret = splice(filedes[0], NULL, fd_mem, &uuu, buf_size, SPLICE_F_MOVE | SPLICE_F_MORE); if(ret < 0) { close... return -1; } len -= ret; }
На втором splice ядро выдает панику:
Unable to handle kernel paging request at virtual address d7000000 pgd = db754000 [d7000000] *pgd=00000000 Internal error: Oops - BUG: 805 [#1] PREEMPT SMP ARM Modules linked in: CPU: 0 PID: 1316 Comm: libgannet Not tainted 4.14.0-xilinx #1 Hardware name: Xilinx Zynq Platform task: db6d8680 task.stack: db648000 PC is at arm_copy_from_user+0xd4/0x39c LR is at 0x6c6c6548 pc : [<c062b9b8>] lr : [<6c6c6548>] psr: 00070013 sp : db649dfc ip : 0000001c fp : ffffe000 r10: d7000000 r9 : db649ed0 r8 : 17000000 r7 : c788a000 r6 : 00000007 r5 : 00000000 r4 : 00000007 r3 : 00000000 r2 : ffffffe7 r1 : c788a004 r0 : d7000000 Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 18c5387d Table: 1b75404a DAC: 00000055 Process libgannet (pid: 1316, stack limit = 0xdb648210) Stack: (0xdb649dfc to 0xdb64a000)
Почему линукс зависает? Из-за no-map или из-за неправильного использования splice? Как грамотно решить задачу копирования файла в область с известным физическим адресом?
-
По 1 вопросу: меняем файл myapp-init.bb
INITSCRIPT_PARAMS = "start 87 5 ."
После чего скрипт запустился тогда, когда это было нужно.
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
C udev rule разобралась так:
Создаем install прирложение с помощью команды petalinux-create -t apps --template install -n 95-local.rules --enable
Правим файл 95-local.rules.bb
S = "${WORKDIR}" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" do_install() { install -d ${D}/${sysconfdir}/udev/rules.d install -m 0755 ${S}/95-local.rules ${D}/${sysconfdir}/udev/rules.d } FILES_${PN} += "${sysconfdir}/*"
и сам файл скрипта 95-local.rules, записав в него желаемые udev rules. (Кстати, ATTRS{label} у него не существует. пришлось поменять.)
После этого собираем петалинукс, например, с помощью petalinux-build -c rootfs & petalinux-build -x package. Копируем обновленные файлы на SD карту, загружаемся... И все работает.
А вот с запуском myinit все еще зависаю. Как ему прописать, чтобы он запускался после появления надписи (в процессе загрузки)
INIT: Entering runlevel: 5 Configuring network interfaces... udhcpc (v1.24.1) started Sending discover... Sending discover... macb e000b000.ethernet eth0: link up (1000/Full)
-
Ого! Круто! Спасибо! :)
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
Здравствуйте!
Есть плата Zedboard, для которой собран Petalinux 2018.1.
Настройки сети, указанные при petalinux-config, почему-то не позволяют поднять сеть. Приходится вручную прописывать
ifconfig eth0 down ifconfig eth0 inet ... up route add default gw ...
после чего появляется соединение.
Создала с помощью команды petalinux-create -t apps --template install -n myapp-init --enable приложение. Как в ug1144 написано, изменила myapp-init.bb файл, добавив в том числе
inherit update-rc.d INITSCRIPT_NAME = "myapp-init" INITSCRIPT_PARAMS = "start 99 S ."
Но приложение запускается сразу после монтирования SD карточки, и в результате я получаю сообщение, что IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready.
Как изменить myapp-init.bb файл (может, что-то еще?), чтобы мой скрипт запускался, когда eth0 будет готов?
2. В PL части у меня есть 2 блока, с которыми планирую работать через драйвер uio. Они почти идентичные, только один работает на прием, а другой на передачу. Для них я создала udev правила
KERNEL=="uio*", ATTRS{label}=="mm2s", SYMLINK+="mm2s", MODE="0666" KERNEL=="uio*", ATTRS{label}=="s2mm", SYMLINK+="s2mm", MODE="0666"
Как мне добиться запуска этих правил при загрузке Petalinux? Просто копирование на SD карту в соответствующую папку не работает - надо править init скрипты. И как-то потом инициировать их запуск.
Подскажите, пожалуйста!
-
Всем привет!
А вдруг у кого-то есть ссылка на рабочий пример драйвера и пользовательского приложения для использования AXI DMA под Petalinux, когда у блока DMA два канала - на прием и на передачу? Желательно без режима ScatterGather, но с обработкой прерываний? Например, с помощью uio driver? У меня тут проблема возникла с правильным указанием совместимых драйверов для dma в device-tree (не знаю, как правильно отредактировать system-user.dtsi)? В настройках bootargs указано
console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio
В настройках ядра драйвер включен (<*>).
Пока пишу так:
/include/ "system-conf.dtsi" / { amba_pl: amba_pl { #address-cells = <1>; #size-cells = <1>; compatible = "simple-bus"; ranges; axi_dma_0: dma@40400000 { #dma-cells = <1>; clock-names = "s_axi_lite_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk"; clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>; compatible = "generic-uio"; interrupt-names = "mm2s_introut", "s2mm_introut"; interrupt-parent = <&intc>; interrupts = <0 29 4 0 30 4>; reg = <0x40400000 0x10000>; xlnx,addrwidth = <0x20>; dma_mm2s: dma-channel@40400000 { compatible = "generic-uio"; dma-channels = <0x1>; interrupts = <0 29 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; dma_s2mm: dma-channel@40400030 { compatible = "generic-uio"; dma-channels = <0x1>; interrupts = <0 30 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; }; }; };
Но в /sys/class/uio/ никаких устройств не появляется...
Буду очень благодарна!
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
Всем привет!
И спасибо за помощь!
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
А через какой порт у Вас подключен VDMA? Как выглядит дизайн?
Из предыдущих постов я так и не поняла, при настройке других прерываний ситуация с отваливанием VDMA повторяется?
А Вы часом не перезаписываете включенные прерывания? Не получается ли так, что Вы отключаете одни и включаете другие?
Я включала одновременно обработку прерываний от таймера и AXI DMA:
static XScuGic_Config *GicConfig; XScuGic InterruptController; int SetUpInterruptSystem(XScuGic *XScuGicInstancePtr) { Xil_ExceptionInit(); Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT, (Xil_ExceptionHandler) XScuGic_InterruptHandler, XScuGicInstancePtr); return XST_SUCCESS; } int InitializeInterruptSystem (deviceID) { int Status; GicConfig = XScuGic_LookupConfig(deviceID); if(NULL==GicConfig){ return XST_FAILURE; } Status = XScuGic_CfgInitialize(&InterruptController, GicConfig, GicConfig->CpuBaseAddress); if(Status!=XST_SUCCESS){ return XST_FAILURE; } Status = SetUpInterruptSystem(&InterruptController); if(Status!=XST_SUCCESS){ return XST_FAILURE; } Status = XScuGic_Connect(&InterruptController, XPAR_FABRIC_AXI_DMA_0_S2MM_INTROUT_INTR, (Xil_ExceptionHandler) DMA_interrupt, NULL); if(Status!=XST_SUCCESS){ return XST_FAILURE; } XScuGic_SetPriorityTriggerType(&InterruptController, START_INTR, 0x10, 0x3); //rising edge if(XScuGic_Connect(&InterruptController, START_INTR, (Xil_ExceptionHandler) StartIntrHandler, NULL)!=XST_SUCCESS) { xil_printf(" XScuGic_Connect(&InterruptController, START_INTR) wasn't done!\n"); return XST_FAILURE; } XScuGic_Enable(&InterruptController, XPAR_FABRIC_AXI_DMA_0_S2MM_INTROUT_INTR); XScuGic_Enable(&InterruptController, START_INTR); Xil_ExceptionEnable(); return XST_SUCCESS; }
А для lwIP я вообще воспользовалась готовым тестовым приложением, и в обработку таймеров вставила обработку пакетов... Но это было без AXI DMA IP.
-
Делаю проект на Zynq, в проекте есть два VDMA(инициализированы и настроены по примеру в SDK) и ethernet (lwip, echo сервер ).
Проблема заключается в том, что когда настроены и разрешены прерывания VDMA, не работает прием пакетов ethernet ( а очень надо!)) ).
Решение у меня есть, но оно мне не нравиться, так как картинка идет менее качественная (субъективно видео чуть запаздывает). Я отключаю прерывания на VDMA и обрабатываю все в главном цикле. (Мне кажется, что это неправильно)
Подскажите как правильно настроить прерывания в проекте, что бы все работало вместе.
Здравствуйте!
Чисто из общих соображений:
1. приоритеты прерываний выставить/поменять можно?
2. А Вы очищаете в статус регистре VDMA бит о том, что произошло прерывание? Не получается ли так, что функция обработки прерываний от VDMA вызывается несколько раз?
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
а если попробовать поиск по этой папке чтоб найти папку linux с исходниками?А если попробовать поиск, то вылазит сразу огромное количество .h файлов с одинаковыми названиями и расположенных в разных папках. И я не понимаю, к каким именно файлам прописывать пути? И второй вопрос - как задать зависимости для настройки ядра. Ну подгружу я этот модуль, а где ему искать необходимые библиотеки уже в памяти конечного устройства с запущенным petalinux?
Выглядит, конечно, как "У меня есть кусок кремния, медная проволока и паяльник. Решил начать с простого - спаять процессор", но все же :)))
-
LinK+ IDE
Спасибо за совет! Тогда такой вопрос... Чтобы можно было собрать модуль для линукса, запущенного на арм процессоре, необходимо правильно прописать все пути к библиотекам ядра. Где они находятся в linux-xlnx или в директориях opt/petalinux/. Petalinux 2018.1. Ткните меня, пожалуйста, носом в описание, tutorial, manual. Уже вторую неделю пытаюсь правиль прописать пути к include linux/smth и верно задать кросс-компилятор - не выходит :crying:
-
Удивительное дело! ОС - Ubuntu 16.04.4, идет второй системой наравне с Windows. Каждый день при первой загрузке компьютера не находит gcc-multilib. После установки день можно работать, на следующий день история повторяется.
Кто-нибудь с таким сталкивался? :wacko:
-
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
Вот в SDK удобно перемещаться между библиотечными файлами, подключаемыми в проект. А модули драйверов для петалинукса создаются с помощью petalinux-create -t modules ... и дальше их редактируешь в текстовом редакторе. Есть ли приличный способ посмотреть функции, вызываемые из модуля, с помощью автоматического переключения между файлами, как в SDK? Есть ли пакет для разработки модулей? А то я смотрю на код, хочу уточнить, что та или иная функция делает, и... ииии? у меня gedit! :laughing:
-
судя по инету, не хватает dnf, попробуйте для старта просто в консоли команду dnf
это похоже на недокачанные/битые архивы
найдите первый битый в списке в дереве проекта, вероятно он упал в download и переложите временно в другое место, пересборка должна вытащить недостающий архив - если целый, то повторяете для остальных, если битый, то тут надо разбираться
Похоже, что 1) почему-то вчера, хотя мне память говорит об обратном, не был корректно установлен gcc-multilib
2) Я зря понадеялась, что раз из-под убунты я вижу файлы, созданные ранее под Windows с дисками ntfs, то на них можно расположить петалинуксовский проект.
После перенесения директории проекта в /home/, повторного клонирования всех репозиториев в тот же /home/... все собралось.
Спасибо огромное за советы!
Petalinux и патч для работы в качестве системы real time
в Системы на ПЛИС - System on a Programmable Chip (SoPC)
Опубликовано · Изменено пользователем sheynmanyu · Пожаловаться
То есть я могу собрать и запустить любое ядро, пользуясь петалинуксом? Я вас правильно поняла?