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

sheynmanyu

Участник
  • Постов

    76
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные sheynmanyu


  1. 13 minutes ago, gosha-z said:

    Вообще-то в мастере linux-xlnx уже с полгода как 4.19

    Я до конца еще не разобралась с петалинуксом. Но, как мне представляется, он ставит ту версию, которая ему соответствует. в общем, когда я запускаю петалинукс на своей плате, то в ответ на команду uname -a он мне выдает 4.14.0-xilinx

  2. 3 hours ago, gosha-z said:

    Вот не понимаю, почему надо обязательно искать патчи в загашниках Мастера Чо, накатывать патчи для 4.14 на ядро 4.19, вместо того, чтобы обратиться к первоисточнику

    У меня ядро 4.14 :)

    14 hours ago, Jury093 said:

    может выгоднее оставить кернел в покое и прикрутить рядом в фпга какую-нить реализацию однокристалки?

    Можно и на втором ядре процессора попробовать baremetal application запустить. Это тоже как вариант :)

    Спасибо!

  3. Cама и разобралась. Помогло применить патч к исходникам линукса напрямую. Перейти в директорию linux-xlnx (с github xilinx) и выполнить команду patch -p1 < /путь/к патчу/patch-4.14-rt1.patch

     

  4. Здравствуйте!

    У меня petalinux 2018.3 и zedboard. Хочу добавить патч. Нашла вот такое замечательное описание (google в помощь) https://linux.incomeself.com/在petalinux中加入real-time修補檔/

    Но есть одна проблема: делаю как написано, а желаемого выбора при настройке свойств ядра не появляется. Есть только Preemptible Kernel (Low-Latency Desctop).

    Как применить патч, чтобы все заработало? Почему может не получаться?

  5. Just now, Dimidrol said:

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

    Именно их я и сделала. В итоге на карте - измененный файл, а в оперативной памяти - какой-то дефолтный. Чуть попозже вернусь к этому вопросу и напишу о том, что вышло после поиска в /usr и /etc файлов настроек и инициализации.

  6. Среди layers проекта yocto есть matplotlib. Хочу его поставить к себе на petalinux 2018.3. Но при попытке в интерпретаторе python импортировать matplotlib вываливается ошибка, что нет модуля python-cycler. В гите open-embedded есть вот такой патч: https://patchwork.openembedded.org/patch/144425/

    Как поступить с патчем, как его наложить? Подскажите, пожалуйста.

    Может, кому удавалось на петалинуксе запустить python-matplotlib? Буду признательна за помощь.

  7. 12 minutes ago, Jury093 said:

    если содержимое вернулось на исходную, то ищите по рутовой скрипт, который может это делать

    Где они водятся и как их быстро искать? Через grep? В init.d?

  8. Как добавить/убрать список серверов в /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

  9. проверьте так же, что система может отдавать 32МБ (дефолтный ограничитель 16МБ)

    Система спокойно отдает нужный объем памяти. Я необходимые настройки для ядра выставила :)

    Ниже в программе я вызываю mmap для этого региона и после спокойно в него пишу и из него читаю...

    uint32_t *mem=(uint32_t *) mmap(NULL, 0x2000000, PROT_READ | PROT_WRITE, MAP_SHARED, fd_mem, 0x17000000);

    И операции вида mem[0] =5 ошибок не вызывают :laughing:

  10. Здравствуйте!

    Есть 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? Как грамотно решить задачу копирования файла в область с известным физическим адресом?

  11. 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)

  12. Здравствуйте!

    Есть плата 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 скрипты. И как-то потом инициировать их запуск.

    Подскажите, пожалуйста!

  13. Всем привет!

    А вдруг у кого-то есть ссылка на рабочий пример драйвера и пользовательского приложения для использования 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/ никаких устройств не появляется...

    Буду очень благодарна!

  14. А через какой порт у Вас подключен 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.

     

  15. Делаю проект на Zynq, в проекте есть два VDMA(инициализированы и настроены по примеру в SDK) и ethernet (lwip, echo сервер ).

    Проблема заключается в том, что когда настроены и разрешены прерывания VDMA, не работает прием пакетов ethernet ( а очень надо!)) ).

    Решение у меня есть, но оно мне не нравиться, так как картинка идет менее качественная (субъективно видео чуть запаздывает). Я отключаю прерывания на VDMA и обрабатываю все в главном цикле. (Мне кажется, что это неправильно)

    Подскажите как правильно настроить прерывания в проекте, что бы все работало вместе.

     

    Здравствуйте!

    Чисто из общих соображений:

    1. приоритеты прерываний выставить/поменять можно?

    2. А Вы очищаете в статус регистре VDMA бит о том, что произошло прерывание? Не получается ли так, что функция обработки прерываний от VDMA вызывается несколько раз?

  16. а если попробовать поиск по этой папке чтоб найти папку linux с исходниками?

    А если попробовать поиск, то вылазит сразу огромное количество .h файлов с одинаковыми названиями и расположенных в разных папках. И я не понимаю, к каким именно файлам прописывать пути? И второй вопрос - как задать зависимости для настройки ядра. Ну подгружу я этот модуль, а где ему искать необходимые библиотеки уже в памяти конечного устройства с запущенным petalinux?

    Выглядит, конечно, как "У меня есть кусок кремния, медная проволока и паяльник. Решил начать с простого - спаять процессор", но все же :)))

  17. LinK+ IDE

    Спасибо за совет! Тогда такой вопрос... Чтобы можно было собрать модуль для линукса, запущенного на арм процессоре, необходимо правильно прописать все пути к библиотекам ядра. Где они находятся в linux-xlnx или в директориях opt/petalinux/. Petalinux 2018.1. Ткните меня, пожалуйста, носом в описание, tutorial, manual. Уже вторую неделю пытаюсь правиль прописать пути к include linux/smth и верно задать кросс-компилятор - не выходит :crying:

  18. Удивительное дело! ОС - Ubuntu 16.04.4, идет второй системой наравне с Windows. Каждый день при первой загрузке компьютера не находит gcc-multilib. После установки день можно работать, на следующий день история повторяется.

    Кто-нибудь с таким сталкивался? :wacko:

  19. Вот в SDK удобно перемещаться между библиотечными файлами, подключаемыми в проект. А модули драйверов для петалинукса создаются с помощью petalinux-create -t modules ... и дальше их редактируешь в текстовом редакторе. Есть ли приличный способ посмотреть функции, вызываемые из модуля, с помощью автоматического переключения между файлами, как в SDK? Есть ли пакет для разработки модулей? А то я смотрю на код, хочу уточнить, что та или иная функция делает, и... ииии? у меня gedit! :laughing:

  20. судя по инету, не хватает dnf, попробуйте для старта просто в консоли команду dnf

    это похоже на недокачанные/битые архивы

    найдите первый битый в списке в дереве проекта, вероятно он упал в download и переложите временно в другое место, пересборка должна вытащить недостающий архив - если целый, то повторяете для остальных, если битый, то тут надо разбираться

    Похоже, что 1) почему-то вчера, хотя мне память говорит об обратном, не был корректно установлен gcc-multilib

    2) Я зря понадеялась, что раз из-под убунты я вижу файлы, созданные ранее под Windows с дисками ntfs, то на них можно расположить петалинуксовский проект.

    После перенесения директории проекта в /home/, повторного клонирования всех репозиториев в тот же /home/... все собралось.

    Спасибо огромное за советы!

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