Jump to content

    

Aleksei_Rostov

Свой
  • Content Count

    311
  • Joined

  • Last visited

Posts posted by Aleksei_Rostov


  1. On 7/3/2020 at 10:09 AM, карамболь said:

    1. А как насчет Линаро ? 

    2. Так ли нужен SDK ? Vitis для установки под 100 Гигов хочет, а как отдельно установить SDK  я не нашел. Если я правильно понял, то все необходимое для запуска Линукс, можно скачать с репозитория ксайлинка и собирать без SDK. По сути, от SDK нужет только тулчейн. Я прав ?

    3. Читаю разные доки и окончательно запутался. по поводу U-Boot Environment Variables. В одной доке его редактируют в SDK, путем копирования из одного хэдера в другой. В другой доке через uEnv.txt (где его брать ?).

    4. Если правильно понял, то   U-Boot Environment Variables можно хранить в SPI flash ? А как ее туда записать ? И можно ли хранить скрипт убута в отдельном файле на SD карте ?

     

    Вчера получил наконец плату живую, запустил из готового Линукс, убедился, что плата живая. Хочется полностью контролировать весь процесс. 

    Попробовал импортировать настройки из Vivado в SDK, получил проект, но там кроме PMU, FSBL и битстрима ничего нет. В темплейтах надеялся увидеть ATF и DTS но их там нет.

     

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

    4. ---

    При компиляции u-boot у вас есть файл типа zynq_zed.h в котором прописываете CONFIG_EXTRA_ENV_SETTINGS, например так:

    /* Extra U-Boot Env settings */
    #define CONFIG_EXTRA_ENV_SETTINGS \ 
    	"ethaddr=00:0a:35:00:01:22\0" \
        "kernel_size=0x140000\0" \
        "ramdisk_size=0x200000\0" \
    	"sdboot=echo Copying Linux from SD to RAM...;" \
    		"mmcinfo;" \
    		"fatload mmc 0 0x3000000 uImage;" \
    		"fatload mmc 0 0x2A00000 system.dtb;" \
    		"fatload mmc 0 0x2000000 uramdisk.image.gz;" \
    		"bootm 0x3000000 0x2000000 0x2A00000\0" \
    ""
    #define CONFIG_BOOTCOMMAND	"run sdboot"

    то есть есть команда sdboot которая и запускает скрипт. В команде sdboot можете указать загрузку напрямую из sd например (как у меня) или проверку наличия uEnv.txt файла и его чтение, и если такого нет, то загрузка далее продолжается (например опять же из sd).

     

  2. On 7/16/2020 at 4:22 PM, карамболь said:

    Неужели никто не собирал Убут для mpsoc без petalinux ? Или я вопросы некорректно сформулировал ? 

    собирал u-boot без petalinux для Zynq и ZynqMP. DT файлы в идеале должны не отличаться. Если собираете U-boot используя OSL (open source linux), то нужно для сборки  u-boot положить dts файл в папку u-boot-xlnx/arch/arm/dts и редактировать конфигурационный файл.

    Тут себе памятку делал и там же редактирование скрипта загрузки (в .h файле):

    https://rostovalexey.blogspot.com/2020/07/zynq-fpga-u-boot-creation-by-using.html

  3. Добрый день.

    С помощью buildroot собираю rootfs.cpio.gz в который добавил tcf  агент. Ядро (zImage), BOOT.BIN и dt собрал из исходников Xilinx или в SDK.

    Загружаюсь:

    --------------------------------------------------------------------------------
    Xilinx First Stage Boot Loader (TE modified)
    Release 2018.3  May  9 2019-09:18:05
    
    Device IDCODE: 1372C093
    Device Name: 7z030 (C)
    Device Revision: 1
    --------------------------------------------------------------------------------
    TE0715 TE_FsblHookBeforeHandoff_Custom
    Configure TE715 SI5338
    Si5338 Init Registers Write.
    Si5338 Init Complete
    
    --------------------------------------------------------------------------------
    
    
    U-Boot 2019.01 (Jun 22 2020 - 07:49:13 +0000) Xilinx Zynq ZC702
    
    CPU:   Zynq 7z030
    Silicon: v3.1
    DRAM:  ECC disabled 1 GiB
    MMC:   mmc@e0100000: 0
    Loading Environment from SPI Flash... SF: Detected n25q256 with page size 256 By                                                                                                                                                             tes, erase size 4 KiB, total 32 MiB
    *** Warning - bad CRC, using default environment
    
    In:    serial@e0000000
    Out:   serial@e0000000
    Err:   serial@e0000000
    Net:   ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
    eth0: ethernet@e000b000
    U-BOOT for trenz
    
    Hit any key to stop autoboot:  0
    Zynq> bootm 30000000
    ## Loading kernel from FIT Image at 30000000 ...
       Using 'conf@1' configuration
       Verifying Hash Integrity ... OK
       Trying 'kernel@0' kernel subimage
         Description:  Linux Kernel
         Type:         Kernel Image
         Compression:  uncompressed
         Data Start:   0x300000d4
         Data Size:    4165888 Bytes = 4 MiB
         Architecture: ARM
         OS:           Linux
         Load Address: 0x00080000
         Entry Point:  0x00080000
         Hash algo:    sha1
         Hash value:   cf7e74cc2824daef369cf94a40ebe556ad6e3b00
       Verifying Hash Integrity ... sha1+ OK
    ## Loading ramdisk from FIT Image at 30000000 ...
       Using 'conf@1' configuration
       Verifying Hash Integrity ... OK
       Trying 'ramdisk@0' ramdisk subimage
         Description:  ramdisk
         Type:         RAMDisk Image
         Compression:  gzip compressed
         Data Start:   0x303fc378
         Data Size:    1221778 Bytes = 1.2 MiB
         Architecture: ARM
         OS:           Linux
         Load Address: unavailable
         Entry Point:  unavailable
         Hash algo:    sha1
         Hash value:   6a734df666c7ec56efc59456cfc25acea63de606
       Verifying Hash Integrity ... sha1+ OK
    ## Loading fdt from FIT Image at 30000000 ...
       Using 'conf@1' configuration
       Verifying Hash Integrity ... OK
       Trying 'fdt@0' fdt subimage
         Description:  Flattened Device Tree blob
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Start:   0x303f92c8
         Data Size:    12288 Bytes = 12 KiB
         Architecture: ARM
         Hash algo:    sha1
         Hash value:   8eb780b47e2abe5535963b3d84d43347a1943124
       Verifying Hash Integrity ... sha1+ OK
       Booting using the fdt blob at 0x303f92c8
       Loading Kernel Image ... OK
       Loading Ramdisk to 07ed5000, end 07fff492 ... OK
       Loading Device Tree to 07ecf000, end 07ed4fff ... OK
    
    Starting kernel ...
    
    Booting Linux on physical CPU 0x0
    Linux version 5.4.0-xilinx (zynq@ubuntu) (gcc version 9.3.0 (Buildroot 2020.08-g                                                                                                                                                             it-00488-gc329495)) #1 SMP PREEMPT Wed Jul 1 07:29:21 PDT 2020
    CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
    CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
    OF: fdt: Machine model: xlnx,zynq-7000
    earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
    printk: bootconsole [cdns0] enabled
    Memory policy: Data cache writealloc
    Reserved memory: created CMA memory pool at 0x30000000, size 256 MiB
    OF: reserved mem: initialized node buffer@0, compatible id shared-dma-pool
    percpu: Embedded 15 pages/cpu s31820 r8192 d21428 u61440
    Built 1 zonelists, mobility grouping on.  Total pages: 260608
    Kernel command line: earlycon
    Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)
    Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
    mem auto-init: stack:off, heap alloc:off, heap free:off
    Memory: 766016K/1048576K available (6144K kernel code, 195K rwdata, 1800K rodata                                                                                                                                                             , 1024K init, 130K bss, 20416K reserved, 262144K cma-reserved, 0K highmem)
    rcu: Preemptible hierarchical RCU implementation.
    rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
            Tasks RCU enabled.
    rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
    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: 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
    random: get_random_bytes called from start_kernel+0x260/0x420 with crng_init=0
    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: 0x4ce07af025                                                                                                                                                             , max_idle_ns: 440795209040 ns
    Switching to timer-based delay loop, resolution 3ns
    Console: colour dummy device 80x30
    printk: console [tty0] enabled
    printk: bootconsole [cdns0] disabled
    Booting Linux on physical CPU 0x0
    Linux version 5.4.0-xilinx (zynq@ubuntu) (gcc version 9.3.0 (Buildroot 2020.08-g                                                                                                                                                             it-00488-gc329495)) #1 SMP PREEMPT Wed Jul 1 07:29:21 PDT 2020
    CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
    CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
    OF: fdt: Machine model: xlnx,zynq-7000
    earlycon: cdns0 at MMIO 0xe0000000 (options '115200n8')
    printk: bootconsole [cdns0] enabled
    Memory policy: Data cache writealloc
    Reserved memory: created CMA memory pool at 0x30000000, size 256 MiB
    OF: reserved mem: initialized node buffer@0, compatible id shared-dma-pool
    percpu: Embedded 15 pages/cpu s31820 r8192 d21428 u61440
    Built 1 zonelists, mobility grouping on.  Total pages: 260608
    Kernel command line: earlycon
    Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)
    Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
    mem auto-init: stack:off, heap alloc:off, heap free:off
    Memory: 766016K/1048576K available (6144K kernel code, 195K rwdata, 1800K rodata                                                                                                                                                             , 1024K init, 130K bss, 20416K reserved, 262144K cma-reserved, 0K highmem)
    rcu: Preemptible hierarchical RCU implementation.
    rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
            Tasks RCU enabled.
    rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
    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: 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
    random: get_random_bytes called from start_kernel+0x260/0x420 with crng_init=0
    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: 0x4ce07af025                                                                                                                                                             , max_idle_ns: 440795209040 ns
    Switching to timer-based delay loop, resolution 3ns
    Console: colour dummy device 80x30
    printk: console [tty0] enabled
    printk: bootconsole [cdns0] disabled
    Calibrating delay loop (skipped), value calculated using timer frequency.. 666.6                                                                                                                                                             6 BogoMIPS (lpj=3333333)
    pid_max: default: 32768 minimum: 301
    Mount-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
    Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
    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: 1911                                                                                                                                                             2604462750000 ns
    futex hash table entries: 512 (order: 3, 32768 bytes, linear)
    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)
    e0000000.serial: ttyPS0 at MMIO 0xe0000000 (irq = 25, base_baud = 6249999) is a                                                                                                                                                              xuartps
    printk: 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
    mc: 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@l                                                                                                                                                             inux.it>
    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
    thermal_sys: Registered thermal governor 'step_wise'
    NET: Registered protocol family 2
    tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
    TCP established hash table entries: 8192 (order: 3, 32768 bytes, linear)
    TCP bind hash table entries: 8192 (order: 4, 65536 bytes, linear)
    TCP: Hash tables configured (established 8192 bind 8192)
    UDP hash table entries: 512 (order: 2, 16384 bytes, linear)
    UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)
    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.
    PCI: CLS 0 bytes, default 64
    Trying to unpack rootfs image as initramfs...
    Freeing initrd memory: 1196K
    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 mq-deadline registered
    io scheduler kyber registered
    zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
    brd: module loaded
    loop: module loaded
    libphy: Fixed MDIO Bus: probed
    CAN device driver interface
    libphy: MACB_mii_bus: probed
    Marvell 88E1510 e000b000.ethernet-ffffffff:00: attached PHY driver [Marvell 88E1                                                                                                                                                             510] (mii_bus:phy_addr=e000b000.ethernet-ffffffff:00, irq=POLL)
    macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 27 (00                                                                                                                                                             :0a:35:00:1e:53)
    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
    i2c /dev entries driver
    cdns-i2c e0005000.i2c: 400 kHz mmio e0005000 irq 22
    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
    clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 5375                                                                                                                                                             38477 ns
    timer #0 at (ptrval), irq=40
    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 20190810) max_hops=1
    Registering SWP/SWPB emulation handler
    of-fpga-region fpga-full: FPGA Region probed
    hctosys: unable to open rtc device (rtc0)
    of_cfs_init
    of_cfs_init: OK
    ALSA device list:
      No soundcards found.
    Freeing unused kernel memory: 1024K
    Run /init as init process
    Starting syslogd: OK
    Starting klogd: OK
    Running sysctl: OK
    Saving random seed: random: dd: uninitialized urandom read (512 bytes read)
    OK
    Starting network: OK
    Starting tcf-agent: OK
    
    Welcome to Buildroot
    buildroot login: root
    # ifconfig eth0 192.168.2.10
    # ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0A:35:00:1E:53
              inet addr:192.168.2.10  Bcast:192.168.2.255  Mask:255.255.255.0
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
              Interrupt:27 Base address:0xb000
    
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    # macb e000b000.ethernet eth0: link up (1000/Full)
    IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    random: fast init done

    В логе выдается, что tcf агент запущен, но при попытке подключиться к плате из Xilinx SDK, SDK выдает, что на таргете не запущен tcf-агент.

    Пингуюсь в обе стороны без проблем. Если заменить rootfs.cpio.gz из проекта Petalinux, то tcf агент работает без проблем.

    Что необходимо указать в настройках Buildroot или подредактировать в rootfs.cpio.gz или что то еще, чтобы tcf агент запустился?

     

     

  4. 20 hours ago, powerf12 said:

    Добрый день!

    У меня возникли вопросы по созданию проекта через petalinux .

    Я делаю так:

    1)$ petalinux-create --type project --zynq --name <имя проекта>

    2)$ cd <путь к папке проекта созданного в пункте 1>

    3)$ petalinux-config --get-hw-description= <путь где лежит hdf файл>

    4)$ petalinux-build

    5)$ petalinux-package --boot --fsbl images/linux/fsbl.elf  --fpga images/linux/*.bit --u-boot

    Получаю в итоге два файла BOOT.bin и image.ub и отправляю все это дело на SD карту, которую я уже разбил на две части(rootfs и BOOT).

    Теперь вопросы

    1)Куда подсовывать проект, который я сделал в SDK? (как я понял, hdf файл - это файл PL логики)

    2)После запуска с SD кард(в BOOT раздел я бросил BOOT.bin и image.ub) я могу подключиться к плате только через eth, и то через ipv6. Когда выбираю serial, вижу загрузку , а в конце надпись bootconsole [earlyecon0] disabled, как включить консоль?

    3)Зачем нужен раздел rootfs? там надо развернуть файловую систему? тогда как правильно ее сделать через petalinux?

     

    Вроде все, заранее спасибо!

     

    Можете сделать так:

    1. Собираете проект в Petalinux (в настройках Image Packaging Configuration->Root filesystem type -> SD card).

    2. Разбиваете SD карту на две части (rootfs и BOOT).

    3. Копируете (в BOOT раздел я бросил BOOT.bin и image.ub) и для ROOTFS sudo dd if=rootfs.ext4 of=/dev/sdb2 

    4. Загружаетесь с SD, выставляете IP (ifconfig eth0 192.168.2.1 например) и запускаете Xilinx SDK, проверяете TCF соединение.

    5. Создаете новый проект  на Linux и можете отлаживать и запускать ваши приложения (elf файл автоматически сохраняется в папке mnt/).

     

    После того как приложение отлажено вы можете его добавить в rootfs через тот же Petalinux.

     

  5. remap делаю без проблем. Не понятно вот что. Записываю дескрипторы

    
    			iowrite32 ( desc_physicalAddress + 0x40, desc_virtualAddress + 0x0000);
    			iowrite32 ( lp->dma_buffer_physical_address, desc_virtualAddress + 0x0008);
    			iowrite32 ( 0x8000080, desc_virtualAddress + 0x0018);
    			
    			iowrite32 ( desc_physicalAddress + 0x40, desc_virtualAddress + 0x0040);
    			iowrite32 ( lp->dma_buffer_physical_address + 0x80, desc_virtualAddress + 0x0048);
    			iowrite32 ( 0x4000080, desc_virtualAddress + 0x0058);			
    			

    Виртуальный адрес получаю с помощью memremap

    start = desc_physicalAddress; // 0x380000000 -- in DDR address
    len   = 512*1024;
    	
    desc_virtualAddress = memremap(desc_physicalAddress, len, MEMREMAP_WB);

    Так вот, если  desc_physicalAddress подставляю адрес BRAM, то SG DMA работает, а если desc_physicalAddress подставляю адрес зарезервированной в DDR памяти, то SG DMA вычитывает правильно только несколько первых дескрипторов и виснет.

     

    Пока вам отвечал, разобрался)) Ошибка на невнимательность - не проинициализировал desc_physicalAddress (когда использую BRAM там все нули сразу), когда DDR - там мусор. Вообщем SG вычитывал правильные дескрипторы и мусор, поэтому и вис.

    Проинициализировал зарезервированную область DDR и все заработало

  6. 23 minutes ago, gosha-z said:

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

    за ссылки спасибо, но я быстрей запустился используя platform_get_resource для работы с регистрами DMA, прерываниями и dma_alloc_coherent для буфера ДМА.

    Если выложите простой пример запуска DMA_FROM_DEVICE канала DMA на основе документации по вашей ссылке, буду очень признателен.

  7. Добрый день! Уважаемые специалисты подскажите пожалуйста, что делаю не так.

    Написал свой kernel module для SG AXI DMA (канал S2MM).

    Для тестирования задал в дескрипторах два пакета по 32 слова (32 бита на слово).

    На мастер SG M AXI отмапировал DDR и BRAM, чтобы по-тестировать модуль при дескрипторах сохраненных в одну или вторую память.

    mem.thumb.png.649f67b57b3e33c49e620082c7d99e6e.png

    Отображаю BRAM в виртуальное пространство ядра.

    
    	start = desc_physicalAddress; // 0x400000000 -- BRAM address
    	len   = 8*1024;
    	
    	desc_virtualAddress = memremap(desc_physicalAddress, len, MEMREMAP_WB);
    
    	if ( ! desc_virtualAddress ) {
    		printk(KERN_ERR "%s: ERROR: desc_virtualAddress remapping FAILED\n", __FUNCTION__);
    	}
    	printk ( KERN_DEFAULT "%s:%i Descriptors memory phys addr is 0x%x and virt is 0x%x\n", __FUNCTION__, __LINE__, desc_physicalAddress, desc_virtualAddress );
    	

    Записываю дескрипторы, запускаю DMA.

    На шине axi memory для SG наблюдаю как DMA вычитывает все дескрипторы.

    sg_br1.thumb.png.92e8744b5f7c1ce70112707bccc4c072.png

    sg_br2.thumb.png.1249e92557f8b704956d5b1db77f3bc5.png

    SG DMA отрабатывает как и задумано.

    Теперь пробую сохранить дескрипторы в DDR. В DT резервирую память.

    
    / {
       reserved-memory {
          #address-cells = <1>;
          #size-cells = <1>;
          ranges;
      
          reserved: buffer@0x38000000 {
             no-map;
             reg = <0x38000000 0x00080000>;
          };
       };
      
       reserved-driver@0 {
          compatible = "xlnx,reserved-memory";
          memory-region = <&reserved>;
       };
    };

    После старта ядра проверяю, что память успешно зарезервировалась (под дескрипторы 0x38000000-0x380800000 ).

    root@test:~# cat /proc/iomem
    00000000-37ffffff : System RAM
    	00008000-008fffff : Kernel code
    	00a00000-00a517bf : Kernel data
    38080000-3fffffff : System RAM

     

    Получаю указатель на память в виртуальном пространстве

    
    	start = desc_physicalAddress; // 0x380000000 -- in DDR address
    	len   = 512*1024;
    	
    	desc_virtualAddress = memremap(desc_physicalAddress, len, MEMREMAP_WB);
    
    	if ( ! desc_virtualAddress ) {
    		printk(KERN_ERR "%s: ERROR: desc_virtualAddress remapping FAILED\n", __FUNCTION__);
    	}
    	printk ( KERN_DEFAULT "%s:%i Descriptors memory phys addr is 0x%x and virt is 0x%x\n", __FUNCTION__, __LINE__, desc_physicalAddress, desc_virtualAddress );

    Запускаю AXI DMA и получаю ошибку SGIntErr (internal error). Проверяю данные на axi шине SG. действительно, дескрипторы вычитаны неправильно.

    sg_ddr.thumb.png.54202359216d8a568e44cf01dce1de65.png

    По сравнению с BRAM все одинаково. Не могу понять, что не так. 

     

  8. Уважаемые специалисты, подскажите как подключить gsl библиотеку в Xilinx SDK на windows 10.

    На Zynq Ultrascale+ крутиться линукс. Отлаживаю ПО Через TCF агент. Возникла необходимость  использовать GSL scientific библиотеку.

    На виртуальной машине запустил Линукс, установил компилятор aarch64-linux-gnu- , скачал исходники GSL, скомпилировал и две папки (lib и include скопировал на Win 10).

    Прописал в настройках SDK инклюды, пути к библиотекам (libgsl.so, libgslcblas.so) и сами библиотеки (gsl, gslcblas). Запускаю на компиляцию, SDK хеадеры видит, но не может найти библиотеки. В чем может быть причина?

    Перекомпилировал библиотеку и получил сообщение:

    error while loading shared libraries: libgsl.so.23: cannot open shared object file: No such file or directory

  9. Продам отладочную плату 

    https://store.digilentinc.com/arty-z7-apsoc-zynq-7000-development-board-for-makers-and-hobbyists/

    В упаковке, рабочая. Отличный вариант для работы с Video-Image processing. Стоимость - 150 уе. Территориально в Минске. Переслать в другой город\страну не проблема.

     

  10. On 5/25/2020 at 2:42 PM, Volkov said:

    256 МБ, по умолчанию в настройках ядра стоит. Я увеличивал до 512, но это ничего не меняло.

    А есть простой пример, как по этой дороге пройти? Я не подниму это все, кажется.  

     

     

    Можно свой модуль DMA написать. Модуль через регистры работает с DMA и выделяет буфер. Только Xilinx драйвер в настройках ядра необходимо отключить. 

  11. On 12/23/2019 at 4:43 PM, Digi said:

    Не знаю, в ту ли ветку пишу, но назрел вопрос.

    Есть удалённая железка на Raspbian, на ней работают некоторые программные модули. На железке есть хреновый мобильный интернет и можно открыть несколько портов. Один порт открыт для SSH.  Редактировать код, запускаемый на малине, необходимо с локального компа. Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

    Пока есть идея использовать в качестве облака - GitHub. Залить на него изменённый код, затем при помощи скрипта на малине, запускаемого через SSH, выполнить необходимые действия. 

    Может есть какое либо более изящное решение ?

     

    Основных способов для отладки ПО с локальной машины всего два: компилируем на локальной машине (кросс компиляция) и отправляем на плату или компилируем непосредственно на плате. Для первого способа выбираете IDE для разработки, прописываете компилятор и как связываетесь с платой (TCF агент, SSH), для второго способа использую SSH и Visual Studio, проект создаю для удаленной компиляции под Линуксом. В этом случае исходники копируются на плату и там собираются. Запускать и отлаживать можно в VS. 

  12. 1 hour ago, Alexey_Rostov said:

    Спасибо. тогда может найти на какой device tree указывает конфиг zynq_zc702_defconfig, подредактировать под мой DT с платы и запуститься. То есть проблема в разных DT, которые описывают периферию без PL части?

    Действительно, получилось. Создал свой arty_defconfig файл, добавил папку с названием arty в u-boot-xlnx/board/xilinx/zynq с файлами ps7_init_gpl.c, ps7_init_gpl.h, ps7_init.c, ps7_init.h, в папку dts arty.dts и добавил в Makefile в папке dts arty.dtb.

  13. 3 minutes ago, gosha-z said:

    После того. как вы точно воспроизвели конфигурацию PCW Arty7?

    Device Tree разный, например. 

    Спасибо. тогда может найти на какой device tree указывает конфиг zynq_zc702_defconfig, подредактировать под мой DT с платы и запуститься. То есть проблема в разных DT, которые описывают периферию без PL части?

  14. 24 minutes ago, gosha-z said:

    1. Откуда брался fsbl?

    2. А если "вручную" запустить U-Boot с инициализацией скриптами - он запускается?

    1. FSBL сгенерерованный в Xilinx SDK.

    2. Не вижу смысла в ином способе запуска: BOOT.BIN читается из микроСД карты, с uboot из петалинукса грузится, c uboot из исходников -- нет. пытаюсь понять в чем разница. 

  15. Есть вопрос к специалистам:

    собираю u boot для Arty Z7-20 платы на Zynq'е средствами кросс - компиляции по вики Xilinx:

    https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841973/Build+U-Boot

    Потом собираю BOOT.BIN добавив fsbl.elf, .bit файл прошивки и u-boot.elf скомпилированный с исходников из гита Xilinx.

    Запускаюсь, предварительно разрешив дебаг в FSBL, вот лог:

    
    Xilinx First Stage Boot Loader
    Release 2019.1  May 24 2020-00:58:05
    Devcfg driver initialized
    Silicon Version 3.1
    Boot mode is SD
    SD: rc= 0
    SD Init Done
    Flash Base Address: 0xE0100000
    Reboot status register: 0x60600000
    Multiboot Register: 0x0000C000
    Image Start Address: 0x00000000
    Partition Header Offset:0x00000C80
    Partition Count: 3
    Partition Number: 1
    Header Dump
    Image Word Len: 0x000F6EC0
    Data Word Len: 0x000F6EC0
    Partition Word Len:0x000F6EC0
    Load Addr: 0x00000000
    Exec Addr: 0x00000000
    Partition Start: 0x000075D0
    Partition Attr: 0x00000020
    Partition Checksum Offset: 0x00000000
    Section Count: 0x00000001
    Checksum: 0xFFD13B7E
    Bitstream
    In FsblHookBeforeBitstreamDload function
    PCAP:StatusReg = 0x40000A30
    PCAP:device ready
    PCAP:Clear done
    Level Shifter Value = 0xA
    Devcfg Status register = 0x40000A30
    PCAP:Fabric is Initialized done
    PCAP register dump:
    PCAP CTRL 0xF8007000: 0x4C00E07F
    PCAP LOCK 0xF8007004: 0x0000001A
    PCAP CONFIG 0xF8007008: 0x00000508
    PCAP ISR 0xF800700C: 0x0802000B
    PCAP IMR 0xF8007010: 0xFFFFFFFF
    PCAP STATUS 0xF8007014: 0x00008A30
    PCAP DMA SRC ADDR 0xF8007018: 0x00100001
    PCAP DMA DEST ADDR 0xF800701C: 0xFFFFFFFF
    PCAP DMA SRC LEN 0xF8007020: 0x000F6EC0
    PCAP DMA DEST LEN 0xF8007024: 0x000F6EC0
    PCAP ROM SHADOW CTRL 0xF8007028: 0xFFFFFFFF
    PCAP MBOOT 0xF800702C: 0x0000C000
    PCAP SW ID 0xF8007030: 0x00000000
    PCAP UNLOCK 0xF8007034: 0x757BDF0D
    PCAP MCTRL 0xF8007080: 0x30800100
    
    DMA Done !
    
    FPGA Done !
    In FsblHookAfterBitstreamDload function
    Partition Number: 2
    Header Dump
    Image Word Len: 0x00021F48
    Data Word Len: 0x00021F48
    Partition Word Len:0x00021F48
    Load Addr: 0x04000000
    Exec Addr: 0x04000000
    Partition Start: 0x000FE490
    Partition Attr: 0x00000011
    Partition Checksum Offset: 0x00000000
    Section Count: 0x00000001
    Checksum: 0xF7E9BB25
    Application
    Handoff Address: 0x04000000
    In FsblHookBeforeHandoff function
    SUCCESSFUL_HANDOFF
    FSBL Status = 0x1

    U-boot не грузится. Беру u-boot из проекта petalinux, созданного для этой же платы, собираю boot.bin, загрузка u-boot проходит нормально.

    Не могу понять, почему не работает u-boot, полученный из исходников Xilinx.

    Команды для компиляции использую следующие:

     

    export CROSS_COMPILE=arm-linux-gnueabihf-
    export ARCH=arm
    make distclean
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig
    make ARCH=arm

    Пробовал компилировать и с arm-none-eabi- компилятором. При загрузке с U-boot из петалинукса в логе упоминается zynq_zc702_defconfig конфиг.

    Может необходимо какие либо настройки в zynq_zc702_defconfig поменять до компиляции?

     

  16. 1 hour ago, gosha-z said:

    Описание размера блока CMA в Device Tree

    Тестирую свой модуль. С параметром CMA интересно получилось - задал значение 256 Мб, а в модуле могу зарезервировать максимум только 128 Мб. Задал значение 512 Мб, резервирую максимум 256....

  17. 1 minute ago, gosha-z said:

    ПО мне так вариант с DT более правильный и гибкий.

    А что значит с DT?

    И в соседнем посте вы как то ответили, что от петалинукса лучше отказаться для сборки модулей (и я так понимаю образа Линукса в целом), чем Петалинукс плох?

  18. Здравствуйте! Уважаемые специалисты не получается зарезервировать буфер для ДМА объемом свыше 8 Мбайт в kernel модуле.

    Написал свой драйвер для ДМА (axi dma Zynq 7000), в котором резервирую буфер для ДМА. 

    static int my_axi_dma_probe(struct platform_device *pdev)
    {
    	struct resource *r_irq; /* Interrupt resources */
    	struct resource *r_mem; /* IO mem resources */
    	struct device *dev = &pdev->dev;
    	struct my_axi_dma_local *lp = NULL;
      
      ......................................................
        
        lp = (struct my_axi_dma_local *) kmalloc(sizeof(struct my_axi_dma_local), GFP_KERNEL);
    	if (!lp) {
    		dev_err(dev, "Cound not allocate my-axi-dma device\n");
    		return -ENOMEM;
    	}
      
      .....................................................
        
        
        lp->dma_buffer_virtual_address = dma_alloc_coherent ( dev, 0x00080000, &lp->dma_buffer_physical_address , GFP_KERNEL );
    	dev_info(dev,"my-axi-dma buffer physical address: %x, virtual address: %x\n",
    		lp->dma_buffer_physical_address,
    		lp->dma_buffer_virtual_address
    	);
      
      ....................................................
    };

    Вот когда в функцию dma_alloc_coherent размер буфера записываю больше, чем 8 Мб , то dev_info выдает значение физического адреса 0xFFFFFFFF и виртуального 0. При размере буфера 8 и менее Мб все работает.

    Объем ДДР у меня 512 Мб.

    Вопросы:

    1. Почему не получается зарезервировать буфер более 8 Мб  и увеличение объема ДДР решит проблему?

    2. Чем определяется максимальный объем памяти, резервируемый функцией dma_alloc_coherent?

    3. Можно ли самому назначить физический адрес начала буфера (lp->dma_buffer_physical_address)?

  19. 25 minutes ago, gosha-z said:

    1. Выкинуть пиволинукс

    2. Собрать все отдельно

    3. Перекомпилировать только модуль.

    А можно немного деталей)

    1. Понятно

    2. Тут BUILDROOT в помощь?

    3. Это прописать архитектуру АРМ, кросс компилятор и make модуль, что то вроде вот так:

    export ARCH=arm
    export CROSS_COMPILE=arm-linux-gnueabihf-
    KERNELDIR=/opt/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf
    echo "Build the module"
    make -C $KERNELDIR M=`pwd` modules_install

     

  20. Здравствуйте уважаемые специалисты! Поделитесь пожалуйста опытом кто как компилирует kernel module для Zynq 7000 / Zynq Ultrascale+?

    Пока делаю так: создал проект в petalinux 2019.1, далее создаю свой module, добавляю исходники в папку с созданным модулем, запускаю petalinux-build -c mymodule для компиляции и потом в недрах проекта petalinux нахожу mymodule.ko файл. Файл загружаю в ОС и тестирую драйвер. 

    Путь долговатый. Может есть другие варианты, например с использованием того же Xilinx SDk?

  21. 10 minutes ago, gosha-z said:

    Не в U-Boot, а в dts и самом эмуляторе

    Спасибо, а что конкретно редактировать необходимо? Я пока в настройках kernel или rootfs  в Petalinux пытаюсь уменьшить размер образа, согласно их UG1144 "Managing Image Size"