Jump to content

    

sasamy

Участник
  • Content Count

    886
  • Joined

  • Last visited

Community Reputation

0 Обычный

About sasamy

  • Rank
    Знающий

Recent Profile Visitors

2466 profile views
  1. похоже вы не заметили что в моём примере не только закоментирована строка но и добавлены две так что этого сообщения просто не может быть
  2. если проблема только в этом и вам надо ожидать завершения транзакции до бесконечности (как в примере с poll), то решить можно заменой ф-ции ожидания без таймаута https://github.com/bperez77/xilinx_axidma/blob/42ed91e83bc4da1e29149b2be0c6a6b8f4549222/driver/axidma_dma.c#L294 // Wait for the completion timeout or the DMA to complete if (dma_tfr->wait) { timeout = msecs_to_jiffies(AXIDMA_DMA_TIMEOUT); // time_remain = wait_for_completion_timeout(dma_comp, timeout); wait_for_completion(dma_comp); time_remain = 1; status = dma_async_is_tx_complete(chan->chan, dma_cookie, NULL, NULL); в драйвере dma-proxy.c анаогично https://github.com/Xilinx-Wiki-Projects/software-prototypes/blob/4efebc90dde0e6b8004358faa77583f72628f076/linux-user-space-dma/Software/Kernel/dma-proxy.c#L239 /* Wait for the transaction to complete, or timeout, or get an error */ // timeout = wait_for_completion_timeout(&pchannel_p->bdtable[bdindex].cmp, timeout); wait_for_completion(&pchannel_p->bdtable[bdindex].cmp); timeout = 1; status = dma_async_is_tx_complete(pchannel_p->channel_p, pchannel_p->bdtable[bdindex].cookie, NULL, NULL);
  3. для начала - в вашем примере с poll этот poll вообще не нужен, в драйвере (если этот тот драйвер который вы используете) блокирующий ioctl для ожидания окончания тразакции, для одного файлового дескриптора нет разницы как вы будете ожидать поступления данных - через poll или другой блокирующий вызов - текущая задача одинаково переходит в режим ожидания, надо лишь настроить таймаут чтобы не просыпаться раньше времени. Если хочется poll - примеров в ядре предостаточно, вот тут по шагам есть что надо дописать https://stackoverflow.com/questions/30035776/how-to-add-poll-function-to-the-kernel-module-code/30038432#30038432
  4. если этот тот драйвер что вы используете то в нём не реализована poll https://github.com/Xilinx-Wiki-Projects/software-prototypes/blob/4efebc90dde0e6b8004358faa77583f72628f076/linux-user-space-dma/Software/Kernel/dma-proxy.c#L387 дописать надо не больше 10 строк наверно. Во втором драйвере аналогично poll не реализован https://github.com/bperez77/xilinx_axidma/blob/42ed91e83bc4da1e29149b2be0c6a6b8f4549222/driver/axidma_chrdev.c#L538
  5. Есть DDR Stress Tester - последняя версия (i.MX6/7 DDR Stress Test Tool V3.00) даже с графическим интерфейсом (под windows) и нужен только USB https://community.nxp.com/docs/DOC-102005 память автоматом не конфигурируется - нужно создать конфиг в икселевском приложении или взять готовый от референсной платы если дизайн скопирован если не пускает - достатоно web proxy, для скачивания логин на форуме не нужен, например через http://www.www.kproxy.com/
  6. линейки процессоров отличаются только отсутствием криптографии в NUC90X.носитель можно записать через nuwriter, BSP c nuwriter есть тут https://yadi.sk/d/pcm8nHCR3Q7qAF Linux совсем не обязателен https://github.com/OpenNuvoton/NUC970_NonOS_BSP ссылку на BSP взял с форума промэлектроники https://ic-contract.ru/forum/arm9.html
  7. https://linux-sunxi.org/R40 там есть ссылка на сдк lichee_1.2.0rc0_20161018.tgz https://mega.nz/folder/BI8m3ThC#uW7K718JciBFdlA0kPbL4g там есть исходники убута, конфиг говорит что нас интересует LICHEE_CHIP=sun8iw11p1, текстовый поиск по "auto_scan_dram_config" находит lichee/brandy/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/dram/libdram аналогично
  8. похоже только внешне - развитый инструментарий, но вы же просто не хотите убут, можно и алвинеровский с автоматической настройкой DDR - у него только сама настройка памяти в виде бинарной библиотеки без исходников. Тема вообще ниочём. Про "критическую важность" boot0 - найдите сначала хоть один пример на r40/a40i/v40/t3 с памятью отличной от DDR3, а то может оказаться вы другую память вообще не сможеие запустить ни с каким загрузчиком, по мне так это намного критичней :)
  9. это можно проверить экспериментально если производитель не догадался маркировать изделия. И вообще загрузчик не обязательно обновлять.
  10. когда пользовался nuc970 шил через nuwriter (есть и для вин и для лин) он записывает конфиг DDR - ему просто указывается файл ini c настойками DDR, к ПО которое записывается это вообще никак не относится https://github.com/OpenNuvoton/NUC970_NuWriter_CMD/tree/master/nudata/sys_cfg тот кто записывает знает какой он процессор зашивает.
  11. каким образом (никаким) ПО связано с настройками внешней памяти ?
  12. это аналог boot0 и подобных бутстрапов для разных SoC, обычно в логе пишет что это SPL, он в дереве исходников u-boot но собирается в отдельный бинарник а потом просто "склеивается" в один файл с основным u-boot, хотя его можно и отдельно использовать. Виндовс я не пользуюсь больше 10 лет - не знаю как там wsl поживает, может через неё можно что-то придумать для сборки, эклипс есть и для линуксов но проще 3 команды набрать в командной строке для сборки чем перелопатить интернет в поисках рецептов настройки комбайна сомнительной цекнности.
  13. почему просто uboot не подходит ? у него свой "прелоадер" SPL c конфигуратором внешней памяти. boot0 это от легаси сборок производителя, в майнстримном убуте он не нужен. Судя по статусу легаси убутом нет смысла пользоваться в настоящее время https://linux-sunxi.org/U-Boot#Status_Matrix
  14. chosen { stdout-path = &uart3; }; попробуйте так chosen { stdout-path = "serial2:115200n8"; }; и в DT помоему надо добавлять для uarta u-boot,dm-pre-reloc; https://wiki.st.com/stm32mpu/wiki/How_to_configure_U-Boot_for_your_board#Device_tree
  15. попробуйте вручную прерывание от используемого SD хоста повесить на второе ядро, по умолчанию они обрабатываются первым ядром и автоматом на армах помоему не раскидваются на SMP https://www.kernel.org/doc/html/v5.10/core-api/irq/irq-affinity.html второй вариант - попробовать повысить приоритет (man chrt) для своего приложения, если в штатном ядре ничего не даёт - накатить RT-патч и повысить приоритет своему приложению. Был случай - старое ядро, где-то в драйверах происходил дедлок, система висла намертво, с RT патчем дедлок не оказывал никаого влияния - система продолжала работать, потом я нашёл спинлок который вызывал дедлок.