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

Портирование рабочего проекта с Cyclone V на Zynq

Коллеги, нужна Ваша помощь по переносу проекта с Cyclone V на Zynq.

С FPGA частью проблем нет. Там чистый VHDL и SV.

Возникла проблема с Linux для ARM.

Хочу перенести его с минимальными доработками.

1. Правильно ли я понимаю, что вместо preloader у Xilinx используется так называемый FSBL и он должен лежать на FAT разделе в файле BOOT.bin, а загрузочный сектор на SD карте должен быть затерт командой dd?

Тут вроде все получилось и FSBL стартует и даже доходит до u-boot.

Но дальше возникает проблема.

2. Я не понимаю как указать u-boot в каком файле лежит собранное ядро Linux.

3. Достаточно ли просто пересобрать имеющееся ядро просто заменив драйвер для загрузки FPGA и переписать DTS под новую периферию?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0. Мы за какой Zynq говорим, 7Z или ZU?

1. Грузитесь с SD?

2. Если грузитесь с SD - явно грузите ядро+DTB командой fatload/extNload и потом bootm

3. Зависит от того, какие у вас задачи, и какие специфичные блоки использовались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0. 7Z. Отладочная плата ZC706.

1. Да. Взял SD от рабочего проекта для Cyclone V SoCkit.

sda3 - preloader (затер командой dd)

sda1 - FAT. Закинул сюда BOOT.bin. Здесь же лежит zImage.

sda2 - EXT3. Файловая система с библиотеками, конфигами и т.д.

3. Никаких специфичных блоков не было. Пользовательская периферия висела на AXI процессора через мост AXI<->Avalon. Это продолжение темы про ATA контроллер. Теперь у меня наконец появилась возможность проверить все на целевой платформе. До этого у меня была только плата с Cyclone V.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. boot.bin (который сгенерился bootgen'ом) пишем через program_flash

2. а где лежит DTB? Image не обязан лежать на FAT. Я бы задумался о FIT

3. Чисто Memory Mapped, без DMA?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Можно поподробнее как это сделать?

До этого не приходилось работать с Zynq :(

2. Там же на FAT разделе.

3. DMA в контроллере есть, но в драйвере и процессорной части пока не поднимал. Решил отложить до появления отладочной платы с целевой ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. UG821. Ну и SDK-Xilinx-Program Flash

2. Ничто не мешает Image/DTB/FIT лежать на любом разделе.

3. Тогда для начала добейтесь загрузки ядра без косяков...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытаюсь загрузить Linux с root-fs на SD карте.

Файл uEnv.txt:

bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext3 rootwait";

Вылезает следующая ошибка:

U-Boot 2019.01 (Jul 31 2019 - 12:11:43 -0400) Xilinx Zynq ZC706

CPU:   Zynq 7z045
Silicon: v3.1
Model: Xilinx ZC706 board
DRAM:  ECC disabled 1 GiB
MMC:   mmc@e0100000: 0
Loading Environment from SPI Flash... SF: Detected s25fl128s_64k with page size 512 Bytes, erase size 128 KiB, total 32 MiB
*** Warning - bad CRC, using default environment

In:    serial@e0001000
Out:   serial@e0001000
Err:   serial@e0001000
97 bytes read in 10 ms (8.8 KiB/s)
Importing environment from SD ...
Hit any key to stop autoboot:  0
## Error: "bootcmd_mmc" not defined
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
SF: Detected s25fl128s_64k with page size 512 Bytes, erase size 128 KiB, total 32 MiB
device 0 offset 0xfc0000, size 0x40000
SF: 262144 bytes @ 0xfc0000 Read: OK
## Executing script at 00020000
Wrong image format for "source" command
SCRIPT FAILED: continuing...
starting USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

Device 0: unknown device
!!!
!!! Booting cmd is deprecated (will be removed in 2020).
!!! Please move to distro bootcmd.
!!!
Device: mmc@e0100000
Manufacturer ID: 28
OEM: 4245
Name:
Bus Speed: 50000000
Mode : SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.9 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
97 bytes read in 7 ms (12.7 KiB/s)
Loaded environment from uEnv.txt
Importing environment from SD ...
Copying Linux from SD to RAM...
4145072 bytes read in 246 ms (16.1 MiB/s)
19644 bytes read in 18 ms (1 MiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-4.19.0-xilinx
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4145008 Bytes = 4 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Device Tree to 1fff8000, end 1ffffcbb ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.19.0-xilinx (swub@swub) (gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11-rc1)) #2 SMP PREEMPT Thu Aug 1 09:10:23 EDT 2019
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
Memory policy: Data cache writealloc
cma: Reserved 16 MiB at 0x3f000000
random: get_random_bytes called from start_kernel+0x7c/0x364 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: console=ttyPS0,115200 earlyprintk
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 1012944K/1048576K available (6144K kernel code, 205K rwdata, 1612K rodata, 1024K init, 133K bss, 19248K reserved, 16384K cma-reserved, 245760K highmem)
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)   ( 134 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: 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 (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
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537538477 ns
timer #0 at (ptrval), irq=17
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 666.66 BogoMIPS (lpj=3333333)
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: 19112604462750000 ns
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 a xuartps
console [ttyPS0] enabled
GPIO IRQ not connected
XGpio: gpio@41200000: registered, base is 1020
GPIO IRQ not connected
XGpio: gpio@41210000: registered, base is 1017
GPIO IRQ not connected
XGpio: gpio@41220000: registered, base is 1013
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@linux.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
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.
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_Events-16
brd: module loaded
loop: module loaded
m25p80 spi0.0: found s25fl128s, expected n25q512a
m25p80 spi0.0: s25fl128s (32768 Kbytes)
4 fixed-partitions partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":
0x000000000000-0x000000e00000 : "boot"
0x000000e00000-0x000000e20000 : "bootenv"
0x000000e20000-0x0000018a0000 : "kernel"
0x0000018a0000-0x000002000000 : "spare"
libphy: Fixed MDIO Bus: probed
CAN device driver interface
libphy: MACB_mii_bus: probed
Marvell 88E1116R e000b000.ethernet-ffffffff:07: attached PHY driver [Marvell 88E1116R] (mii_bus:phy_addr=e000b000.ethernet-ffffffff:07, irq=POLL)
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 28 (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
chipidea-usb2 e0002000.usb: e0002000.usb supply vbus not found, using dummy regulator
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: 2019-6-3 19:85: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 at (ptrval) 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.sdhci [e0100000.sdhci] 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 2019-06-09 11:27:49 UTC (1560079669)
of_cfs_init
of_cfs_init: OK
ALSA device list:
  No soundcards found.
VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
0100           16384 ram0
 (driver?)
0101           16384 ram1
 (driver?)
0102           16384 ram2
 (driver?)
0103           16384 ram3
 (driver?)
0104           16384 ram4
 (driver?)
0105           16384 ram5
 (driver?)
0106           16384 ram6
 (driver?)
0107           16384 ram7
 (driver?)
0108           16384 ram8
mmc0: new high speed SDHC card at address 59b4
 (driver?)
0109           16384 ram9
 (driver?)
010a           16384 ram10
mmcblk0: mmc0:59b4       14.9 GiB
 (driver?)
010b           16384 ram11
 (driver?)
010c           16384 ram12
 (driver?)
010d           16384 ram13
 (driver?)
010e           16384 ram14
 mmcblk0: p1 p2 p3
 (driver?)
010f           16384 ram15
 (driver?)
1f00           14336 mtdblock0
 (driver?)
1f01             128 mtdblock1
 (driver?)
1f02           10752 mtdblock2
 (driver?)
1f03            7552 mtdblock3
 (driver?)
b300        15637504 mmcblk0
 driver: mmcblk
  b301          512000 mmcblk0p1 45cc32ac-01

  b302        14848000 mmcblk0p2 45cc32ac-02

  b303           10240 mmcblk0p3 45cc32ac-03

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU1: stopping
CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.19.0-xilinx #2
Hardware name: Xilinx Zynq Platform
[<c010f078>] (unwind_backtrace) from [<c010b00c>] (show_stack+0x10/0x14)
[<c010b00c>] (show_stack) from [<c06866a8>] (dump_stack+0x80/0xa0)
[<c06866a8>] (dump_stack) from [<c010d658>] (ipi_cpu_stop+0x3c/0x70)
[<c010d658>] (ipi_cpu_stop) from [<c010de9c>] (handle_IPI+0x6c/0x90)
[<c010de9c>] (handle_IPI) from [<c032a3c4>] (gic_handle_irq+0x84/0x90)
[<c032a3c4>] (gic_handle_irq) from [<c0101a0c>] (__irq_svc+0x6c/0xa8)
Exception stack(0xef085f30 to 0xef085f78)
5f20:                                     00000000 00000000 2eea1000 00000000
5f40: ef7e2478 ffffe000 ef7e2478 00000000 8b64d741 8bacf796 00000000 00000000
5f60: fffffff5 ef085f80 c050ce30 c050ce58 60000113 ffffffff
[<c0101a0c>] (__irq_svc) from [<c050ce58>] (cpuidle_enter_state+0xf8/0x1d8)
[<c050ce58>] (cpuidle_enter_state) from [<c013f4e8>] (do_idle+0x1ac/0x23c)
[<c013f4e8>] (do_idle) from [<c013f6d4>] (cpu_startup_entry+0x18/0x1c)
[<c013f6d4>] (cpu_startup_entry) from [<001023ac>] (0x1023ac)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так у вас местоположение rootfs не указано нигде, вот ядро и психануло. U-Boot держит Environment во флеше, но его там нет, от слова совсем, он ставит некий дефолт, который и пытается отработать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, gosha-z said:

Ну так у вас местоположение rootfs не указано нигде, вот ядро и психануло. U-Boot держит Environment во флеше, но его там нет, от слова совсем, он ставит некий дефолт, который и пытается отработать.

А разве root=/dev/mmcblk0p2 не является указанием на SD карту?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, BSACPLD said:

А разве root=/dev/mmcblk0p2 не является указанием на SD карту?

Да, только U-Boot ничего не знает про это указание

1 hour ago, gosha-z said:

U-Boot держит Environment во флеше, но его там нет, от слова совсем

 

2 hours ago, BSACPLD said:

Loading Environment from SPI Flash... SF: Detected s25fl128s_64k with page size 512 Bytes, erase size 128 KiB, total 32 MiB *** Warning - bad CRC, using default environment

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, gosha-z said:

Да, только U-Boot ничего не знает про это указание

А можно как-то прописать указание на SD карту при сборке U-Boot?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, BSACPLD said:

А можно как-то прописать указание на SD карту при сборке U-Boot?

Можно, раздел Environment

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно поподробнее как это сделать?

Поставил загрузку настроек с FAT. Создал на FAT разделе uboot.env

setenv root=/dev/mmcblk0p2

Пишет Loading Environment from FAT... ** No device specified **

Я так понимаю нужно еще как-то указать с какого раздела брать uboot.env.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прописал bootargs в настройках U-Boot и все запустилось :)

Но возникла еще одна проблема :(

Сбросился логин/пароль.

При попытке зайти под логином/паролем который я задавал до замены ядра и U-Boot, выдает ошибку:
Login incorrect

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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