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

Kiryanov

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

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

  • Посещение

Весь контент Kiryanov


  1. Добрый вечер. Простите за задержку. Попробоавал на отладочной плате с dma-proxy: - у меня более старая версия драйвера под 4.9 ядро. Изменил так: //timeout = wait_for_completion_timeout(&pchannel_p->cmp, timeout); wait_for_completion(pchannel_p->cookie); timeout = 1; status = dma_async_is_tx_complete(pchannel_p->channel_p, pchannel_p->cookie, NULL, NULL); Получилось вот такое: # xilinx-vdma 40400000.axidma0: Cannot start channel ef207e10: 24209 Alignment trap: not handling instruction e1902f9f at [<c0539e10>] Unhandled fault: alignment exception (0x001) at 0x00000006 pgd = ee800000 [00000006] *pgd=00000000 Internal error: Oops - BUG: 1 [#1] PREEMPT SMP ARM Modules linked in: dma_proxy(O) usb_f_rndis u_ether libcomposite xilinx_dma [last unloaded: dma_proxy] CPU: 1 PID: 847 Comm: ReceiveWorkHF_A Tainted: G O 4.9.0-xilinx #5 Hardware name: Xilinx Zynq Platform task: ef07d180 task.stack: ee9c2000 PC is at _raw_spin_lock_irq+0x24/0x5c LR is at wait_for_common+0x20/0x134 pc : [<c0539e14>] lr : [<c0537448>] psr: 60000093 sp : ee9c3eb8 ip : ef148040 fp : bea8ec7c r10: 00000000 r9 : ee9c2000 r8 : 00000002 r7 : 00000006 r6 : ee9976c0 r5 : 00000002 r4 : 7fffffff r3 : ee9c2000 r2 : 00000001 r1 : 7fffffff r0 : 00000006 Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment none Control: 18c5387d Table: 2e80004a DAC: 00000051 Process ReceiveWorkHF_A (pid: 847, stack limit = 0xee9c2210) Stack: (0xee9c3eb8 to 0xee9c4000) 3ea0: ef207e1c 20000013 3ec0: 00000001 00000012 bf04ae00 ef144ab8 ee9976c0 bf04ae00 ef144ab8 ee9976c0 3ee0: bea8ec40 ee9976c0 ee9c2000 bf04a13c bf04ae00 00000000 00000001 00000000 3f00: bf04ae00 bf04a22c bea8ec40 c01db720 bea8ec40 c01db8f8 00000000 00000000 3f20: ee9c2000 40000001 00000002 c011dc24 00000000 00000000 00400000 0000000a 3f40: ef242480 00000000 ef242488 eec6acd0 00000002 00000000 bea8eab0 c01cc6c0 3f60: 00000000 00000000 0000000a ee9976c0 00000005 00000000 bea8ec40 ee9976c0 3f80: ee9c2000 00000000 bea8ec7c c01dc118 7f5fcf2c 00000000 7f5eadcc 00000036 3fa0: c0106ec4 c0106d00 7f5fcf2c 00000000 00000005 00000000 bea8ec40 00000000 3fc0: 7f5fcf2c 00000000 7f5eadcc 00000036 00000000 00000000 7f5fcf2c bea8ec7c 3fe0: 7f5fcf60 bea8eb80 7f5eb6c8 b6d54b34 60000010 00000005 bdee57cc 8cd051cd [<c0539e14>] (_raw_spin_lock_irq) from [<c0537448>] (wait_for_common+0x20/0x134) [<c0537448>] (wait_for_common) from [<bf04a13c>] (wait_for_transfer+0x20/0x80 [dma_proxy]) [<bf04a13c>] (wait_for_transfer [dma_proxy]) from [<bf04a22c>] (ioctl+0x20/0x28 [dma_proxy]) [<bf04a22c>] (ioctl [dma_proxy]) from [<c01db720>] (vfs_ioctl+0x20/0x38) [<c01db720>] (vfs_ioctl) from [<c01db8f8>] (do_vfs_ioctl+0x9c/0x884) [<c01db8f8>] (do_vfs_ioctl) from [<c01dc118>] (SyS_ioctl+0x38/0x54) [<c01dc118>] (SyS_ioctl) from [<c0106d00>] (ret_fast_syscall+0x0/0x3c) Code: e2822001 e5832004 f590f000 e1902f9f (e2823801) ---[ end trace ffe0c43a49eeadec ]--- note: ReceiveWorkHF_A[847] exited with preempt_count 1 Где ReceiveWorkHF - это рабочая программа из UserSpace. Последний драйвер от [ilinx : https://github.com/Xilinx-Wiki-Projects/software-prototypes/tree/master/linux-user-space-dma/Software - в ядро insmod'ится, но не работает. Не приходит ни одного прерывания dma-proxy.c dma-proxy.h Вместо https://github.com/bperez77/xilinx_axidma применил https://github.com/corna/xilinx_axidma в котором есть возможность мониорить остаток свободного места в буфере для rx-канала с помощью функции axidma_get_residue - это заработало. А вот dma-proxy пока не желает.
  2. Еще на один момент набрел, уже с DMA_proxy: На C программу пишу - не видно эффектов, а на C++ memcpy(tx_proxy_interface_p->buffer, &HF_Receive.receive_buf[0], n); int var = ioctl(tx_proxy_fd, 0, &dummy); if(var != 0) perror("DMA ioctl:"); сама функция perror не пишет ничего плохого: DMA ioctl:: Success , но идет ожидание тайм аута и выдается сообщение: xilinx-vdma 40400000.axidma0: Channel ef100c10 has errors 200, cdr 0 tdr ef100c00 DMA timed out Опять же откуда-то берется vdma, которого нет. Описание второй DMA-корки в dts: axi_dma_1: axidma0@40400000 { #dma-cells = <1>; compatible = "xlnx,axi-dma", "xlnx,axi-dma-6.03.a", "xlnx,axi-dma-1.00.a"; reg = <0x40400000 0x10000>; clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>, <&clkc 15>; clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk"; xlnx,include-sg; xlnx,addrwidth = <32>; dma-mm2s-channel@40400000 { compatible = "xlnx,axi-dma-mm2s-channel"; dma-channels = <1>; xlnx,datawidth = <32>; xlnx,device-id = <0>; interrupt-parent = <&intc>; interrupts = <0 31 4>; }; dma-s2mm-channel@40400030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <1>; xlnx,datawidth = <32>; xlnx,device-id = <1>; interrupt-parent = <&intc>; interrupts = <0 32 4>; }; }; Оно почти не отличается от axi_dma_0, только драйвера разные. Как убрать это обращение к vdma в обоих случаях?
  3. Сложность в том, что никакого VDMA у меня в принципе нет, и почему он обращается вообще к нему - мне не понятно. axi_dma_0: axidma0@40000000 { #dma-cells = <1>; compatible = "xlnx,axi-dma", "xlnx,axi-dma-6.03.a", "xlnx,axi-dma-1.00.a"; reg = <0x40000000 0x10000>; clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>, <&clkc 15>; clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk"; xlnx,include-sg; xlnx,addrwidth = <32>; dma-mm2s-channel@40000000 { compatible = "xlnx,axi-dma-mm2s-channel"; dma-channels = <1>; xlnx,datawidth = <256>; xlnx,device-id = <0>; interrupt-parent = <&intc>; interrupts = <0 29 4>; }; dma-s2mm-channel@40000030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <1>; xlnx,datawidth = <256>; xlnx,device-id = <1>; interrupt-parent = <&intc>; interrupts = <0 30 4>; }; }; Вот это фрагмент dts-файла обращения к используемой корке DMA с помощью драйвера axidma от bperez77. Или здесь нужно напрячься и реализовать все же поллинг?
  4. День добрый! Попробовал - так вообще не работает: # axidma: axidma_dma.c: axidma_start_transfer: 307: DMA transmit transaction timed out. это сообщение вылетает сразу. Ну и такое поведение, наверное, сразу предусмотрено здесь: if (time_remain == 0) { axidma_err("%s %s transaction timed out.\n", type, direction); rc = -ETIME; goto stop_dma; парой строк ниже. И еще момент: ожидать до бесконечности, как я понимаю, не подойдет, потому-что у меня не должно быть бесконечных блокировок. В работе изделия предусмотрено: по управляющим сигналам (из другого потока) у меня включается либо канал tx либо канал rx. И если я переключу в другой режим в тот момент, когда на функции axidma_oneway_transfer устройство будет в режиме бесконечного ожидания (например для канала rx), и в это же время начнется подача данных для канала tx - это ситуация не рабочая. Нужно не оэжидание до бесконечности, а все же корректный стоп dma-канала, но чтобы при его старте возобновлялась работоспособность. Сейчас стоп происходит некорректно, и все вываливается: # axidma: axidma_dma.c: axidma_start_transfer: 307: DMA receive transaction timed out. xilinx-vdma 40000000.axidma0: Cannot stop channel ef100e10: 10008 и корректного возобновления работы не происходит. После этого не работает и tx канал, даже при подаче на него данных и он вываливается по таймауту с теми же сообщениями.
  5. Спасибо за подсказку. В целом - я вообще не знал даже куда копать. Не скрою: в написании драйверов я пока новичок, разве что на уровне _module_init() _module_exit(). Не могли бы вы мне посоветовать: где хотя бы посмотреть? Используемые структуры - более-менее понятно. А вот названия функций, их объявление, где они прописываются - пока темный лес. Можно ли где-то найти примеры реализации? Основательно читать Linux Device Drivers сейчас времени нет, нужно срочное решение. Спасибо!
  6. День добрый всем! Я работаю с коркой AXI DMA от Xilinx. В системе их пара. 1. Одна корка используется так: данные передаются в FPGA на дециматор по одному каналу в одном потоке, а децимированный сигнал обратно забирается с помощью 2-го канала в другом потоке. Драйвер был взят DMA-proxy от Xilinx. Требуется забирать данные по заполнению буфера при получении сигнала с дециматора. Была попытка использовать такие инструменты linux как select и poll, вида: #include <poll.h> int ret = poll( &freceive, 1, -1); if(ret == -1) perror("poll"); if(ret > 0 && (freceive.revents & POLLIN)) { printf("ret = %i\n\n", ret); ioctl(rx_proxy_fd, 0, &dummy); } но они срабатывают и в случае, когда данных в буфере нет, во всяком случае при вызове ioctl для пересылки - система впадает в ожидание и сообщает об истечении таймаута. Проблема в том, что хотелось бы вызывать ioctl именно тогда, когда буфер заполнен, чтобы своевременно забирать данные из него, и не стартовать тогда, когда он не заполнен. Есть ли у кого опыт решения подобной задачи? 2. С использованием второй корки - несколько еще веселее. Был выбран драйвер, который не поддерживает многопоточность. Он здесь: https://github.com/bperez77/xilinx_axidma Здесь также используются оба канала DMA: через первый (TX) данные поступают на интерполятор и дальше в DAC, а через второй (RX) канал данные поступают с FPGA. Здесь тоже хотелось бы вызывать пересылку только в момент, когда данные есть в буфере (в частности это касается второго канала - RX), потому-что если их нет - то команда зависнет на время таймаута, что недопустимо в системе. Имеется ли опыт работы с таким у кого-то? Подскажите пожалуйста.
  7. Это понятно. Ну а как тогда? Пету вообще не запустить на zc706?
  8. День добрый всем! При изучении embedded linux'а возникла очередная проблема. Совершенно не понятно откуда растут ее ноги. В общем я прогрузил нужный bsp ( xilinx-zc706-v2018.3-final.bsp ), и запустил на сборку. Не понятно, как его конфигурировать в некоторых деталях. Фигня получилась, что сначала не работала загрузка ядра, останавливалось все на boot - это исправляется так, как сказано здесь: https://forums.xilinx.com/t5/Embedded-Linux/Zedboard-Unknown-command-booti-PetaLinux/td-p/899108 изменением booti на bootm в файле /<директория проекта>/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. После этого загрузка пошла, но останавливается на: bootconsole [earlycon0] disabled . Привожу вывод из терминала U-Boot 2018.01 (Mar 11 2021 - 13:54:32 +0000) Xilinx Zynq ZC706 Model: Zynq ZC706 Development Board Board: Xilinx Zynq Silicon: v3.1 I2C: ready DRAM: ECC disabled 1 GiB MMC: mmc@e0100000: 0 (SD) SF: Detected s25fl128s_64k with page size 512 Bytes, erase size 128 KiB, total B *** Warning - bad CRC, using default environment In: serial@e0001000 Out: serial@e0001000 Err: serial@e0001000 Model: Zynq ZC706 Development Board Board: Xilinx Zynq Silicon: v3.1 Net: ZYNQ GEM: e000b000, phyaddr 7, interface rgmii-id eth0: ethernet@e000b000 U-BOOT for xilinx-zc706-2018_3 ethernet@e000b000 Waiting for PHY auto negotiation to complete....... done BOOTP broadcast 1 BOOTP broadcast 2 BOOTP broadcast 3 BOOTP broadcast 4 BOOTP broadcast 5 BOOTP broadcast 6 BOOTP broadcast 7 BOOTP broadcast 8 BOOTP broadcast 9 BOOTP broadcast 10 BOOTP broadcast 11 BOOTP broadcast 12 BOOTP broadcast 13 BOOTP broadcast 14 BOOTP broadcast 15 BOOTP broadcast 16 BOOTP broadcast 17 Retry time exceeded Hit any key to stop autoboot: 0 Device: mmc@e0100000 Manufacturer ID: 3 OEM: 5344 Name: SS08G Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 7.4 GiB Bus Width: 4-bit Erase Group Size: 512 Bytes reading image.ub 3785300 bytes read in 225 ms (16 MiB/s) Device: mmc@e0100000 Manufacturer ID: 3 OEM: 5344 Name: SS08G Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 7.4 GiB Bus Width: 4-bit Erase Group Size: 512 Bytes reading system.dtb 15631 bytes read in 16 ms (953.1 KiB/s) ## Loading kernel from FIT Image at 10000000 ... Using '[email protected]' configuration Verifying Hash Integrity ... OK Trying 'kernel@1' kernel subimage Description: Linux kernel Type: Kernel Image Compression: gzip compressed Data Start: 0x10000104 Data Size: 3763634 Bytes = 3.6 MiB Architecture: ARM OS: Linux Load Address: 0x00008000 Entry Point: 0x00008000 Hash algo: sha1 Hash value: d5d8af69765a88f853ecc91baba385151b747bd2 Verifying Hash Integrity ... sha1+ OK ## Flattened Device Tree blob at 23fff000 Booting using the fdt blob at 0x23fff000 Uncompressing Kernel Image ... OK Loading Device Tree to 07ff9000, end 07fffd0e ... OK Starting kernel ... Booting Linux on physical CPU 0x0 Linux version 4.14.0-xilinx-v2018.3 (oe-user@oe-host) (gcc version 7.3.0 (GCC))1 CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache OF: fdt: Machine model: Zynq ZC706 Development Board bootconsole [earlycon0] enabled Memory policy: Data cache writealloc cma: Reserved 16 MiB at 0x3f000000 random: fast init done percpu: Embedded 16 pages/cpu @ef7c9000 s34764 r8192 d22580 u65536 Built 1 zonelists, mobility grouping on. Total pages: 260608 Kernel command line: console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootp PID hash table entries: 4096 (order: 2, 16384 bytes) Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) Memory: 1012872K/1048576K available (6144K kernel code, 233K rwdata, 1480K roda) Virtual kernel memory layout: vector : 0xffff0000 - 0xffff1000 ( 4 kB) fixmap : 0xffc00000 - 0xfff00000 (3072 kB) vmalloc : 0xf0800000 - 0xff800000 ( 240 MB) lowmem : 0xc0000000 - 0xf0000000 ( 768 MB) pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB) modules : 0xbf000000 - 0xbfe00000 ( 14 MB) .text : 0xc0008000 - 0xc0700000 (7136 kB) .init : 0xc0900000 - 0xc0a00000 (1024 kB) .data : 0xc0a00000 - 0xc0a3a640 ( 234 kB) .bss : 0xc0a3a640 - 0xc0a60444 ( 152 kB) Preemptible hierarchical RCU implementation. RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2. Tasks RCU enabled. RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2 NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 efuse mapped to f0802000 slcr mapped to f0804000 L2C: platform modifies aux control register: 0x72360000 -> 0x72760000 L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000 L2C-310 erratum 769419 enabled L2C-310 enabling early BRESP for Cortex-A9 L2C-310 full line of zeros enabled for Cortex-A9 L2C-310 ID prefetch enabled, offset 1 lines L2C-310 dynamic clock gating enabled, standby mode enabled L2C-310 cache controller enabled, 8 ways, 512 kB L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001 zynq_clock_init: clkc starts at f0804100 Zynq clock init sched_clock: 64 bits at 333MHz, resolution 3ns, wraps every 4398046511103ns clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x4ce07af02s Switching to timer-based delay loop, resolution 3ns clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537s timer #0 at f080c000, irq=17 Console: colour dummy device 80x30 Calibrating delay loop (skipped), value calculated using timer frequency.. 666.) pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 2048 (order: 1, 8192 bytes) Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes) CPU: Testing write buffer coherency: ok CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 Setting up static identity map for 0x100000 - 0x100060 Hierarchical SRCU implementation. smp: Bringing up secondary CPUs ... CPU1: thread -1, cpu 1, socket 0, mpidr 80000001 smp: Brought up 1 node, 2 CPUs SMP: Total of 2 processors activated (1333.33 BogoMIPS). CPU: All CPU(s) started in SVC mode. devtmpfs: initialized VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4 clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 191s futex hash table entries: 512 (order: 3, 32768 bytes) pinctrl core: initialized pinctrl subsystem NET: Registered protocol family 16 DMA: preallocated 256 KiB pool for atomic coherent allocations cpuidle: using governor menu hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers. hw-breakpoint: maximum watchpoint size is 4 bytes. zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0xf0880000 zynq-pinctrl 700.pinctrl: zynq pinctrl initialized e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 26, base_baud = 3125000) is as `��k˽���[ttyPS0] enabled console [ttyPS0] enabled bootconsole [earlycon0] disabled bootconsole [earlycon0] disabled Облазил все места где можно переконфигурировать uart для вывода, но ничего не получается. Что-то об этом написано на форуме xilinx: https://forums.xilinx.com/t5/Embedded-Linux/bootconsole-earlycon0-disabled/m-p/749298#M18595 но у меня это хозяйство не работает. После этой модификации банально не собирается devicetree.dtb (не компилится). Еще пробовал в devicetree вносить изменения: /* * CAUTION: This file is automatically generated by Xilinx. * Version: * Today is: Thu Mar 11 12:48:50 2021 */ /dts-v1/; #include "zynq-7000.dtsi" #include "zc706.dtsi" #include "pl.dtsi" #include "pcw.dtsi" / { chosen { //bootargs = "earlycon"; //stdout-path = "serial0:115200n8"; bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 nolock rw rootwait ip=dhcp"; stdout-path = "serial0:115200ns"; }; aliases { ethernet0 = &gem0; i2c0 = &i2c0; serial0 = &uart1; spi0 = &qspi; }; memory { device_type = "memory"; reg = <0x0 0x40000000>; }; }; //#include "system-user.dtsi" Обратите внимание: в разделе chosen. Это не помогает. Важный момент: нужна rootfs на разделе sd карточки ( /dev/mmcblk0p2 ) Также вопрос: как убрать загрузку по сети (BOOTP broadcast X)? Мне это совершенно не нужно. Народ, если сталкивался кто - помогите пожалуйста. Вообще ничего не понимаю. Долблюсь над этим долго. С уважением, Константин.
  9. Всем привет! В общем сначала победил эту проблему на рабочем девайсе, затем и на отладочной плате. Версию linux поменял на xlnx-linux 4.19 rebase. Все в принципе так, как показано здесь: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842272/Zynq+Linux+USB+Device+Driver за исключением нескольких моментов: Если собираете с нуля (например с помощью buildroot), то нужно включить следующее: Device Drivers ---> [*] USB support ---> [*] OTG support <*> USB Gadget Support ---> <M> USB Gadget functions configurable through configfs [*] RNDIS [*] Mass storage <M> USB Gadget precomposed configurations <M> Gadget Zero (DEVELOPMENT) <M> Ethernet Gadget (with CDC Ethernet support) [*] RNDIS support <M> Gadget Filesystem <M> Mass Storage Gadget С такой конфигурацией собирается ядро, затем в devicetree.dts изменяется конфигурация usb: По умолчанию она: usb@e0002000 { compatible = "xlnx,zynq-usb-2.20a", "chipidea,usb2"; status = "okay"; clocks = <0x1 0x1c>; interrupt-parent = <0x4>; interrupts = <0x0 0x15 0x4>; reg = <0xe0002000 0x1000>; phy_type = "ulpi"; usb-reset = <0x5 0x32 0x0>; usb-phy = <0x8>; dr_mode = "host"; }; изменяется: dr_mode = "host"; на dr_mode = "peripheral"; компилируется в dtb. Запускается скрипт (назовем его) enet.sh : #!/bin/bash modprobe libcomposite.ko modprobe u_ether.ko modprobe usb_f_rndis.ko mount -t configfs none /sys/kernel/config cd /sys/kernel/config/usb_gadget mkdir g1 cd g1 echo "64" > bMaxPacketSize0 echo "0x200" > bcdUSB echo "0x100" > bcdDevice echo "0x03FD" > idVendor echo "0x0500" > idProduct mkdir functions/rndis.rn0 mkdir configs/c1.1 ln -s functions/rndis.rn0 configs/c1.1/ echo "ci_hdrc.0" > UDC ifconfig usb0 10.10.70.1 netmask 255.255.255.0 ifconfig usb0 up #end и если нет проблем с физикой - все поднимается и взлетает, пингуется и есть обмен по сокетам. (надеюсь, кому-нибудь полезно). Всем спасибо. Проблема решена.
  10. В общем пришлось все пересобрать с использованием glibc и все заработало. И программы начали запускаться. Правильное ли решение? Можно ли того же результата добиться, используя uClibc?
  11. $ file devmem devmem: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=4e1095fa86aea13b54f42b142a370bdccc49b7df, not stripped по shell-соединению подключился. Получилось
  12. Каким образом если я опции кросскомпилятора указал для arm? file devmem что сообщает? Это программа, которая показывает содержимое памяти
  13. Еще наткнулся на такое: на собранном linux не запускаются никакие бинарники. Всем известная программка devmem - ее запуск дает вот такой результат: # ./devmem -sh: ./devmem: not found С чем это может быть связано? chmod +x devmem - выполнял. При этом скрипты sh - выполняются. Все выполняю на zc-706, Гуглил много - но не понятно. Кросскомпилятор для получения бинарника - установлен, выбран из xsdk-2017, собираю все с его помощью. Тут может из-за незнания: мне нужно подключаться по ftp к плате с помощью mc на хосте. Именно для этого я его включил. Но как заставить работать хостовый mc с платой по ftp?
  14. Да, простите еще вопрос: как на нем заставить работать ftp или sftp? Они включаются в target packages -> networking applications -> lftp [*] lftp [*] FTP protocol [*] SFTP protocol Но не работает, по крайней мере в midnight commander
  15. Нет, корневая ФС не сохраняет изменения, она: uramdisk.image.gz согласно: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842369/Build+Linux+for+Zynq-7000+AP+SoC+using+Buildroot То есть, распаковывается в RAM. Я просто скопировал все сгенерированные ключи, и вкинул в output/target/etc/ssh/ и пересобрал все. PS. Спасибо за рекомендацию
  16. Спасибо, это в целом заработало. Правда приходится всегда долго ждать генерации ключей. Starting network: OK random: rngd: uninitialized urandom read (16 bytes read) random: rngd: uninitialized urandom read (4 bytes read) random: crng init done ssh-keygen: generating new host keys: RSA random: 2 urandom warning(s) missed dg # здесь каждый раз приходится долго ждать DSA ECDSA ED25519 Starting sshd: OK Starting tcf-agent: OK Starting squid: OK Только если оно неправильное - почему? И есть ли какое-то более правильное решение?
  17. Понимаете, вешается и так и так. Когда я оставляю только dropbear, или только openssh - все по-любому вешается. Starting network: OK и на этом все. Попробовал собрать для платы ZC-706 - та же ж... только в профиль. Причем ядро грузится, остальное вешается. Вот примет только с openssh: U-Boot 2018.01 (Feb 19 2021 - 16:33:55 +0300) Xilinx Zynq ZC706 Model: Zynq ZC706 Development Board Board: Xilinx Zynq Silicon: v3.1 I2C: ready DRAM: ECC disabled 1 GiB MMC: sdhci@e0100000: 0 (SD) SF: Detected s25fl128s_64k with page size 512 Bytes, erase size 128 KiB, total B *** Warning - bad CRC, using default environment In: serial@e0001000 Out: serial@e0001000 Err: serial@e0001000 Net: ZYNQ GEM: e000b000, phyaddr 7, interface rgmii-id eth0: ethernet@e000b000 Hit any key to stop autoboot: 0 Device: sdhci@e0100000 Manufacturer ID: 3 OEM: 5344 Name: SS08G Tran Speed: 50000000 Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 7.4 GiB Bus Width: 4-bit Erase Group Size: 512 Bytes ** Unable to read file uEnv.txt ** Copying Linux from SD to RAM... reading uImage 4127864 bytes read in 234 ms (16.8 MiB/s) reading devicetree.dtb 13506 bytes read in 15 ms (878.9 KiB/s) reading uramdisk.image.gz 8769433 bytes read in 486 ms (17.2 MiB/s) ## Booting kernel from Legacy Image at 02080000 ... Image Name: Linux-4.19.0-xilinx Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 4127800 Bytes = 3.9 MiB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK ## Loading init Ramdisk from Legacy Image at 04000000 ... Image Name: Image Type: ARM Linux RAMDisk Image (uncompressed) Data Size: 8769369 Bytes = 8.4 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK ## Flattened Device Tree blob at 02000000 Booting using the fdt blob at 0x2000000 Loading Kernel Image ... OK Loading Ramdisk to 1f7a3000, end 1fffff59 ... OK Loading Device Tree to 1f79c000, end 1f7a24c1 ... OK Starting kernel ... Booting Linux on physical CPU 0x0 Linux version 4.19.0-xilinx (konstantin@David) (gcc version 10.2.0 (Buildroot 21 CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache OF: fdt: Machine model: Xilinx ZC706 board Memory policy: Data cache writealloc cma: Reserved 16 MiB at 0x3f000000 random: get_random_bytes called from start_kernel+0x84/0x3d4 with crng_init=0 percpu: Embedded 16 pages/cpu @(ptrval) s35916 r8192 d21428 u65536 Built 1 zonelists, mobility grouping on. Total pages: 260608 Kernel command line: Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) Memory: 1004380K/1048576K available (6144K kernel code, 205K rwdata, 1628K roda) Virtual kernel memory layout: vector : 0xffff0000 - 0xffff1000 ( 4 kB) fixmap : 0xffc00000 - 0xfff00000 (3072 kB) vmalloc : 0xf0800000 - 0xff800000 ( 240 MB) lowmem : 0xc0000000 - 0xf0000000 ( 768 MB) pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB) modules : 0xbf000000 - 0xbfe00000 ( 14 MB) .text : 0x(ptrval) - 0x(ptrval) (7136 kB) .init : 0x(ptrval) - 0x(ptrval) (1024 kB) .data : 0x(ptrval) - 0x(ptrval) ( 206 kB) .bss : 0x(ptrval) - 0x(ptrval) ( 133 kB) rcu: Preemptible hierarchical RCU implementation. rcu: RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2. Tasks RCU enabled. rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2 NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 efuse mapped to (ptrval) slcr mapped to (ptrval) L2C: platform modifies aux control register: 0x02060000 -> 0x32460000 L2C: DT/platform modifies aux control register: 0x02060000 -> 0x32460000 L2C-310 erratum 769419 enabled L2C-310 enabling early BRESP for Cortex-A9 L2C-310 full line of zeros enabled for Cortex-A9 L2C-310 dynamic clock gating enabled, standby mode enabled L2C-310 cache controller enabled, 8 ways, 512 kB L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x46460001 zynq_clock_init: clkc starts at (ptrval) Zynq clock init sched_clock: 64 bits at 333MHz, resolution 3ns, wraps every 4398046511103ns clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x4ce07af02s Switching to timer-based delay loop, resolution 3ns clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537s timer #0 at (ptrval), irq=17 Console: colour dummy device 80x30 console [tty0] enabled Calibrating delay loop (skipped), value calculated using timer frequency.. 666.) pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 2048 (order: 1, 8192 bytes) Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes) CPU: Testing write buffer coherency: ok CPU0: Spectre v2: using BPIALL workaround CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 Setting up static identity map for 0x100000 - 0x100060 rcu: Hierarchical SRCU implementation. smp: Bringing up secondary CPUs ... CPU1: thread -1, cpu 1, socket 0, mpidr 80000001 CPU1: Spectre v2: using BPIALL workaround smp: Brought up 1 node, 2 CPUs SMP: Total of 2 processors activated (1333.33 BogoMIPS). CPU: All CPU(s) started in SVC mode. devtmpfs: initialized VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4 clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 191s futex hash table entries: 512 (order: 3, 32768 bytes) pinctrl core: initialized pinctrl subsystem NET: Registered protocol family 16 DMA: preallocated 256 KiB pool for atomic coherent allocations cpuidle: using governor menu hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers. hw-breakpoint: maximum watchpoint size is 4 bytes. zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0x(ptrval) zynq-pinctrl 700.pinctrl: zynq pinctrl initialized e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 26, base_baud = 3125000) is as console [ttyPS0] enabled vgaarb: loaded SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb media: Linux media interface: v0.10 videodev: Linux video capture interface: v2.00 pps_core: LinuxPPS API ver. 1 registered pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@> PTP clock support registered EDAC MC: Ver: 3.0.0 FPGA manager framework Advanced Linux Sound Architecture Driver Initialized. clocksource: Switched to clocksource arm_global_timer NET: Registered protocol family 2 tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes) TCP established hash table entries: 8192 (order: 3, 32768 bytes) TCP bind hash table entries: 8192 (order: 4, 65536 bytes) TCP: Hash tables configured (established 8192 bind 8192) UDP hash table entries: 512 (order: 2, 16384 bytes) UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. Trying to unpack rootfs image as initramfs... Freeing initrd memory: 8564K hw perfevents: no interrupt-affinity property for /pmu@f8891000, guessing. hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available workingset: timestamp_bits=30 max_order=18 bucket_order=0 jffs2: version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc. bounce: pool size: 64 pages io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) io scheduler mq-deadline registered io scheduler kyber registered dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330 dma-pl330 f8003000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Eve6 brd: module loaded loop: module loaded m25p80 spi0.0: found s25fl128s, expected n25q128a11 m25p80 spi0.0: s25fl128s (32768 Kbytes) 5 fixed-partitions partitions found on MTD device spi0.0 Creating 5 MTD partitions on "spi0.0": 0x000000000000-0x000000100000 : "qspi-fsbl-uboot" 0x000000100000-0x000000600000 : "qspi-linux" 0x000000600000-0x000000620000 : "qspi-device-tree" 0x000000620000-0x000000c00000 : "qspi-rootfs" 0x000000c00000-0x000001000000 : "qspi-bitstream" libphy: Fixed MDIO Bus: probed CAN device driver interface libphy: MACB_mii_bus: probed Marvell 88E1116R e000b000.ethernet-ffffffff:07: attached PHY driver [Marvell 88) macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 28 (0) e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k e1000e: Copyright(c) 1999 - 2015 Intel Corporation. ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci-pci: EHCI PCI platform driver usbcore: registered new interface driver usb-storage chipidea-usb2 e0002000.usb: e0002000.usb supply vbus not found, using dummy regr chipidea-usb2 e0002000.usb: Linked as a consumer to regulator.0 ULPI transceiver vendor/product ID 0x0424/0x0007 Found SMSC USB3320 ULPI transceiver. ULPI integrity check: passed. ci_hdrc ci_hdrc.0: EHCI Host Controller ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1 ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected i2c /dev entries driver cdns-i2c e0004000.i2c: 400 kHz mmio e0004000 irq 23 si570 1-005d: registered, current frequency 148500000 Hz i2c i2c-0: Added multiplexed i2c bus 1 i2c i2c-0: Added multiplexed i2c bus 2 at24 3-0054: 1024 byte 24c08 EEPROM, writable, 1 bytes/write i2c i2c-0: Added multiplexed i2c bus 3 i2c i2c-0: Added multiplexed i2c bus 4 rtc rtc0: invalid alarm value: 2020-10-2 24:8:0 rtc-pcf8563 5-0051: rtc core: registered rtc-pcf8563 as rtc0 i2c i2c-0: Added multiplexed i2c bus 5 i2c i2c-0: Added multiplexed i2c bus 6 i2c i2c-0: Added multiplexed i2c bus 7 i2c i2c-0: Added multiplexed i2c bus 8 pca954x 0-0074: registered 8 multiplexed busses for I2C switch pca9548 ucd9000 8-0065: Device ID UCD90120A|2.3.4.0000|110603 random: fast init done cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10s EDAC MC: ECC not enabled Xilinx Zynq CpuIdle Driver started sdhci: Secure Digital Host Controller Interface driver sdhci: Copyright(c) Pierre Ossman sdhci-pltfm: SDHCI platform and OF driver helper mmc0: SDHCI controller on e0100000.mmc [e0100000.mmc] using ADMA ledtrig-cpu: registered to indicate activity on CPUs usbcore: registered new interface driver usbhid usbhid: USB HID core driver fpga_manager fpga0: Xilinx Zynq FPGA Manager registered NET: Registered protocol family 10 Segment Routing with IPv6 sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver NET: Registered protocol family 17 can: controller area network core (rev 20170425 abi 9) NET: Registered protocol family 29 can: raw protocol (rev 20170425) can: broadcast manager protocol (rev 20170425 t) can: netlink gateway (rev 20170425) max_hops=1 Registering SWP/SWPB emulation handler of-fpga-region fpga-full: FPGA Region probed rtc-pcf8563 5-0051: setting system clock to 2020-10-03 17:03:21 UTC (1601744601) of_cfs_init of_cfs_init: OK ALSA device list: mmc0: new high speed SDHC card at address aaaa No soundcards found. mmcblk0: mmc0:aaaa SS08G 7.40 GiB Freeing unused kernel memory: 1024K Run /init as init process mmcblk0: p1 Starting syslogd: OK Starting klogd: OK Running sysctl: OK Saving random seed: random: dd: uninitialized urandom read (512 bytes read) OK Starting network: OK
  18. Дело в том, что я и отключая собирал, и просто с dropbear и с openssh. Результат не меняется. Здесь дело в настройках buildroot. Исходно было установлено: BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_TARBALL=y BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,Xilinx,linux-xlnx,xilinx-v2017.3)/linux-xilinx-v2017.3.tar.gz" BR2_LINUX_KERNEL_DEFCONFIG="xilinx_zynq" Я поменял на: BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_GIT=y BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/Xilinx/linux-xlnx.git" BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="xlnx_rebase_v4.19" BR2_LINUX_KERNEL_DEFCONFIG="xilinx_zynq" Ядро собирается, но в rootfs собирается такой ssh-keygen. Работает он только с 4.9 но не работает с 4.19. Это уже получилось методом перебора, что оба способа включил, так как ничего не работает. Пока не разобрался еще.
  19. Еще обратил внимание вот на что: Собираю ядро xilinx-linux4.9 (старье) - все генерируется и запускается нормально. А когда собираю более новое: xilinx-linux-rebase-4.19 - именно тогда происходят фокусы со всякими зависаниями. В чем может быть дело?
  20. # cat /proc/cmdline ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 nolock rw rootwait #
  21. В данном случае я могу не все понимать, но мне кажется на декомпилированном dtb в dts файле вот это: chosen { bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 nolock rw rootwait ip=dhcp"; stdout-path = "serial0:115200ns"; };
×
×
  • Создать...