|
Xilinx linux + SDK + dma driver |
|
|
|
Apr 25 2018, 14:28
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Здравствуйте! Можно ли в Xilinx SDK (v2018.1) написать приложение для работы с AXI-DMA для ОС Linux? Как настроить SDK, чтобы не появлялось вопросов рядом с #include<something.h>? И как прописать пути для того, чтобы суметь подключить linux/dmaengine.h (при компиляции приложения пишет, что нет такого файла)? Собрала для zedboard linux_xlnx с Xilinx git, запустила, все работает. В SDK указала репозитории для device-tree-xlnx и linux_xlnx. Хочу написать приложение, которое позволяло бы инициировать прием данных через AXI-DMA. В моем device-tree прописан блок DMA и указаны драйверы в файле pl.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_sg_aclk m_axi_s2mm_aclk"; clocks = <&clkc 15>, <&clkc 15>; compatible = "xlnx,axi-dma-1.00.a"; interrupt-names = "s2mm_introut"; interrupt-parent = <&intc>; interrupts = <0 30 4>; reg = <0x40400000 0x10000>; xlnx,addrwidth = <0x20>; dma-channel@40400030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <0x1>; interrupts = <0 30 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; }; }; }; В system-top.dts файл pl.dtsi подключен. SDK выдает вот такую ошибку (см картинку). И смущает еще одно - вопросы рядом с include.  1. Можно ли вообще написать в SDK приложение, работающее с axi-dma драйвером? Или надо как-то отдельно писать свой драйвер, который будет обращаться к axi-dma драйверу, и к которому сможет обращаться мое приложение? 2. Как убрать вопросы рядом с #include?
Сообщение отредактировал sheynmanyu - Apr 25 2018, 14:45
|
|
|
|
|
May 3 2018, 15:48
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(_Ivan_33 @ Apr 27 2018, 09:29)  Вообще я на своей плате смотрел dmesg и драйвер дма в петалинуксе вроде как присутствует Вроде в TRM был описан пример как можно с дма работать
Очень интересен результат! Юлия, отпишитесь, пожалуйста, как это все поднимите C Petalinux 2018 у меня возникли сложности: в SDK изменился компилятор для 32-разрядных arm. Дождалась, когда выйдет petalinux 2018.1, изменила в настройках ядра префикс для компилятора на arm-linux-gnueabihf-... В качестве префикса для кросс-компилятора указала его же: export CROSS_COMPILE=arm-linux-gnueabihf- и все собралось!
Сообщение отредактировал sheynmanyu - May 4 2018, 12:57
|
|
|
|
|
May 7 2018, 16:36
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(_Ivan_33 @ Apr 27 2018, 09:29)  Вообще я на своей плате смотрел dmesg и драйвер дма в петалинуксе вроде как присутствует Пока столкнулась вот с такой проблемой: root@zedboard_dma_linux:~# dmesg | grep dma dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330 dma-pl330 f8003000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16 ERROR: could not get clock /amba_pl/dma@40400000:m_axi_s2mm_aclk(2) xilinx-vdma 40400000.dma: Xilinx AXI DMA Engine Driver Probed!! Как устранить ошибку?
|
|
|
|
|
May 7 2018, 21:02
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(sheynmanyu @ May 7 2018, 19:36)  Пока столкнулась вот с такой проблемой: ERROR: could not get clock /amba_pl/dma@40400000:m_axi_s2mm_aclk(2) попробуйте переписать с таким синтаксисом: clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk";еще можно гуглю скормить строку ошибки или чуть проще "xilinx dma 40400000", там куча solved попадается..
Сообщение отредактировал Jury093 - May 8 2018, 06:34
|
|
|
|
|
May 8 2018, 11:19
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(Jury093 @ May 8 2018, 00:02)  попробуйте переписать с таким синтаксисом: clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk"; еще можно гуглю скормить строку ошибки или чуть проще "xilinx dma 40400000", там куча solved попадается.. Эмм, а в каком файле мне это переписать? Просто у меня сейчас petalinux, и я абсолютно без понятия, откуда он берет файлы, на основе которых потом генерирует systеm.dtb. Более того, в приведенном выше pl.dtsi меня смущает число каналов и число clk. Канала указано 3, а clk всего два. Во всех примерах, которые мне встречались, эти числа совпадают: каналов 3 и clk три. Более того, в дизайне режим SG вообще не включен. Откуда он его взял в pl.dtsi? Да, сейчас pl.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_sg_aclk", "m_axi_s2mm_aclk"; clocks = <&clkc 15>, <&clkc 15>; compatible = "xlnx,axi-dma-1.00.a"; interrupt-names = "s2mm_introut"; interrupt-parent = <&intc>; interrupts = <0 30 4>; reg = <0x40400000 0x10000>; xlnx,addrwidth = <0x20>; dma-channel@40400030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <0x1>; interrupts = <0 30 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; }; }; }; }; Интересный вопрос: а для нормальной работы dmaengine SG должен быть включен? Есть у кого-нибудь под рукой ссылка на рабочий дизайн?
Сообщение отредактировал sheynmanyu - May 8 2018, 13:54
|
|
|
|
|
May 8 2018, 21:44
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(sheynmanyu @ May 8 2018, 14:19)  Эмм, а в каком файле мне это переписать? Просто у меня сейчас petalinux, и я абсолютно без понятия, откуда он берет файлы, на основе которых потом генерирует systеm.dtb. Более того, в приведенном выше pl.dtsi меня смущает число каналов и число clk. Канала указано 3, а clk всего два. Во всех примерах, которые мне встречались, эти числа совпадают: каналов 3 и clk три. Более того, в дизайне режим SG вообще не включен. Откуда он его взял в pl.dtsi? Да, сейчас pl.dtsi выглядит так: понятно, просто в вашем исходном сообщение был фрагмент dts, собственно правка к нему и относилась.. судя по тому же инету вам надо поправить на 3, типа Код clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>; и пересобрать либо отдельно dtb, либо (как у вас там устроено не знаю) ядро в комплекте с dtb запросто может быть, что для вашего ядра этот драйвер broken, тут либо локальную доку шерстить, или в инете искать инфу/патчи откуда берет? скорее всего в недрах пакета есть архив или ветка с шаблонами, оттуда и генерятся исходные dtsi, второй вариант - тянется стандартное ядро и на него накладывают патчи и создаются dtsi попробуйте все же изменить pl.dtsi и обновить сборку, желательно без полной пересборки..
|
|
|
|
|
May 10 2018, 07:38
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(Jury093 @ May 9 2018, 00:44)  откуда берет? скорее всего в недрах пакета есть архив или ветка с шаблонами, оттуда и генерятся исходные dtsi, второй вариант - тянется стандартное ядро и на него накладывают патчи и создаются dtsi попробуйте все же изменить pl.dtsi и обновить сборку, желательно без полной пересборки.. я пробовала обновлять: не помогло. Банально не собралось. но когда я в дизайне разрешила scatter-gather (он, в общем-то, мне не очень нужен. Но раз драйвер просит...) - все собралось и заработало. И правильно сгенерировались файлы dtsi, и ошибок в dmesg не стало! Но: не удается запустить на выполнение dmatest. Правильно ли я понимаю? После ввода команды Код root@simple_loop_dma:/sys/module# ls /sys/class/dma dma0chan0 dma0chan2 dma0chan4 dma0chan6 dma1chan0 dma0chan1 dma0chan3 dma0chan5 dma0chan7 dma1chan1 появляется список dma-каналов. При этом каналы dma0chan* - это DMA PL330, то есть DMA из PS части, а dma1chan* - это AXI-DMA? В /sys/module/ у меня есть и axidmatest и dmatest. При этом, в соответствии с https://www.kernel.org/doc/html/v4.15/drive...ne/dmatest.html мне удалось запустить на выполнение dmatest с каналом dma0chan*. Но для dma1chan* ничего не выходит. Тест не запускается. В ответ на команду Код root@simple_loop_dma:/# dmesg | grep dma выводится Код dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330 dma-pl330 f8003000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16 xilinx-vdma 40400000.dma: Xilinx AXI DMA Engine Driver Probed! Как проверить работоспособность моего axi dma блока??? Подскажите, плиз!
Сообщение отредактировал sheynmanyu - May 10 2018, 13:36
|
|
|
|
|
May 10 2018, 21:09
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(sheynmanyu @ May 10 2018, 10:38)  я пробовала обновлять: не помогло. Банально не собралось. но когда я в дизайне разрешила scatter-gather (он, в общем-то, мне не очень нужен. Но раз драйвер просит...) - все собралось и заработало. И правильно сгенерировались файлы dtsi, и ошибок в dmesg не стало! так что в результате помогло - коррекция dts или разрешение "scatter-gather"? Цитата api/dmaengine/dmatest.html"]https://www.kernel.org/doc/html/v4.15/drive...ne/dmatest.html[/url] мне удалось запустить на выполнение dmatest с каналом dma0chan*. Но для dma1chan* ничего не выходит. Тест не запускается. а как не запускается? система виснет? в консоль что-нить пишет? натолкайте отладочных printf("я тут step1\n"); в исходник dmatest и попробуйте отловить, где валится софтина в момент работы с dma1chan Цитата Как проверить работоспособность моего axi dma блока??? у меня такой системы нет, т.ч. только общие советы: - проверьте, что необходимые ресурсы и права для dmaXchan присутствуют и одинаковые - валидность прерываний, адресов блоков регистров прерывания: Код cat /proc/interrupts блоки регистров Код cat /proc/iomem возможно тут: http://www.wiki.xilinx.com/DMA+Drivers+-+Soft+IPsесть что полезное как наиболее вероятное, раз для канала0 работает, то не прописано или прописано неправильно все тоже для канала1 как версия - там тред с solved: https://forums.xilinx.com/t5/Embedded-Linux...p/522755/page/6"Ok, finally I have done it, by copying axi_dma_0 entry to system_user.dtsi changing xlnx,device-id of its second channel to <0x1> and changing "misc_clk_0" in it to "clkc 15"."
Сообщение отредактировал Jury093 - May 10 2018, 21:14
|
|
|
|
|
May 14 2018, 11:58
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Как указать petalinux 2018.1, где лежат необходимые библиотеки? Вот здесь предлагается приложение создавать с помощью Xilinx SDK, но необходимо прописать путь к sysroots/что-то там. Беда в том, что у меня эта папка в проекте пуста, даже после вызова команды petalinux-build -c rootfs. Как прописать пути к linux/delay.h и прочим include? где их вообще искать?
Сообщение отредактировал sheynmanyu - May 14 2018, 12:00
|
|
|
|
|
May 15 2018, 10:50
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(_Ivan_33 @ May 15 2018, 13:46)  Еще подкрутить параметры виртуалки в сторону увеличения производительности или наконец поставить линукс на нормальный комп Эмм... А можно ли не снося убунту подкрутить виртуалку? Оперативка выделена почти вся. Вчера ругалась на нехватку места, но с тех пор я удалила около 6 ГБ...
|
|
|
|
|
May 15 2018, 11:53
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(_Ivan_33 @ May 15 2018, 14:43)  мне кажется что в таких процессах важен процессор а можешь огласить характеристики своего компа?
и характиристики виртуальки - сколько там выделено ресурсов Она ругается на оставшееся место на диске. Всего 100 ГБ, до запуска build --sdk оставалось около 30 ГБ. Перед выдачей ошибок система ругнулась на оставшиеся 700 МБ на жестком диске  yulia@yulia-U:~/ZYNQ/xilinx_linux/my_projects/simple_loop/simple_loop_dma$ df -k -T Filesystem Type 1K-blocks Used Available Use% Mounted on udev devtmpfs 9734880 0 9734880 0% /dev tmpfs tmpfs 1952248 9308 1942940 1% /run /dev/sda1 ext4 80056152 73746076 2220376 98% / tmpfs tmpfs 9761224 216 9761008 1% /dev/shm tmpfs tmpfs 5120 4 5116 1% /run/lock tmpfs tmpfs 9761224 0 9761224 0% /sys/fs/cgroup VM_Shared_Folder vboxsf 567159508 50101244 517058264 9% /media/sf_VM_Shared_Folder tmpfs tmpfs 1952248 56 1952192 1% /run/user/1000 И информация о директории с проектом petalinux yulia@yulia-U:~/ZYNQ/xilinx_linux/my_projects/simple_loop/simple_loop_dma$ du ./build/ -h --max-depth=1 2,6M ./build/cache 1,1G ./build/sstate-cache 192K ./build/conf 4,5G ./build/downloads 740K ./build/misc 16G ./build/tmp 22G ./build/ Что из этого всего можно удалить, но не тратить при этом кучу времени на повторное скачивание при редактировании проекта?
Сообщение отредактировал sheynmanyu - May 15 2018, 13:41
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|