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

Обновление прошивки FPGA и пользовательской программы под Petalinux на плате Zedboard

Здравствуйте, уважаемые форумчане

 

Возникла потребность обновлять образ FPGA и программ на собранном Linux под процессор Zync

 

Если я все понимаю, то обновление программы должно происходить так:

1. загрузить новую прошивку в соответствующий раздел

2. изменить переменную окружающей среды(bootenv), чтобы она грузила RootFS с нового раздела

3. перезагрузить модуль

Как переключаться между прошивками FPGA пока не знаю, а именно, что менять в bootenv для этого

 

Для конфигурации и получения соответствующих образов использовал Petalinux 2017.4

настроил Petalinux через команду petalinux-config следующим образом:
1. Subsystem AUTO Hardware Settings
->Flash Settings 
выделил следуюшие разделы mtd:
dev:    size   erasesize  name
mtd0: 00500000 00010000 "boot"
mtd1: 00020000 00010000 "bootenv"
mtd2: 00a80000 00010000 "kernel"
mtd3: 00a80000 00010000 "jffs2"
mtd4: 00010000 00010000 "spare"
-> Advanced bootable images storage Settings
  -> boot image settings
     - image storage media = primary flash
     - flash partition name = boot
     - image name = BOOT.BIN
  -> u-boot env partition settings
     - image storage media = primary flash
     - flash partition name = bootenv
  -> kernel image settings
     - image storage media = primary flash
     - flash partition name = kernel
     - image name = image.ub
  -> jffs2 rootfs image settings
     - image storage media = primary flash
     - flash partition name = jffs2
     - image name = rootfs.jffs2
  -> dtb image settings
     - image storage media = from boot image
     - image name = system.dtb
2. Image Packaging Configuration
-> Root filesystem type = JFFS2
-> jffs2 erase block size = 64 Kib
-> name for bootable kernel image = image.ub

 

после этого набрал команду для сборки petalinux-build
cгенерировал BOOT.BIN для загрузки в QSPI FLASH командой:
petalinux-package --boot --fsbl /opt/pkg/petalinux/mil_eth/images/linux/zynq_fsbl.elf --fpga /opt/pkg/petalinux/mil_eth/images/linux/ethernet_1553ud2.bit --u-boot --kernel --force

 

сгенерировался файл BOOT.BIN, который содержит образ ОС Linux, но он явно не содержит RootFS, т.к. ее надо загружать отдельно

прошивал QSPI FLASH я через утилитку Program Flash Memory, которая входит в состав Vivado SDK

сейчас выдает ошибку загрузки файловой системы при загрузке Линукса

 

вопрос 1:
как загрузить файл rootfs.jffs2 в QSPI FLASH?
я загружал образы в QSPI FLASH всегда через утилитку Program Flash Memory, возможно ли средствами petalinux все необходимое загрузить?
какое смещение необходимо задать в Program Flash Memory, чтобы попасть в mtd3 "jffs2", я так понимаю, что именно в этот раздел я должен скопировать файл rootfs.jffs2???

 

Загружаю образ Линукса через утилитку Program Flash Memory(файл BOOT.BIN)
затем я файл rootfs.jffs2 перевожу в формат MCS через утилитку Create Boot Image, 
посчитал смещение mtd3 относительно начала, вышло 0x500000+0x20000+0xA80000=0xFA0000, данное смещение вбиваю в поле Offset в утилитке Program Flash Memory и прошиваю полученный файл JFFS2.MCS в QSPI FLASHПри старте модуля ZedBord при загрузке Linux выдает ошибку загрузки файловой системы

 0
SF: Detected s25fl256s_64k with page size 256 Bytes, erase size 64 KiB, total 32 MiB
device 0 offset 0x520000, size 0xa80000
SF: 11010048 bytes @ 0x520000 Read: OK
## Loading kernel from FIT Image at 10000000 ...
   Using 'conf@2' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel@0' kernel subimage
     Description:  Linux Kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x100000d4
     Data Size:    3747256 Bytes = 3.6 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00008000
     Entry Point:  0x00008000
     Hash algo:    sha1
     Hash value:   5226f85855534a82f6f18fb528855ebb37ed6032
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 10000000 ...
   Using 'conf@2' configuration
   Trying 'fdt@0' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x10392f80
     Data Size:    14184 Bytes = 13.9 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   9c6769fe771579f8dafa6c861d8c6ab2879340e3
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x10392f80
   Loading Kernel Image ... OK
   Loading Device Tree to 07ff9000, end 07fff767 ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Linux version 4.9.0-xilinx-v2017.4 (sokolovd@ubuntu) (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11) ) #1 SMP PREEMPT Tue Jan 22 12:14:17 MSK 2019
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
bootconsole [earlycon0] enabled
cma: Reserved 16 MiB at 0x1f000000
Memory policy: Data cache writealloc
percpu: Embedded 14 pages/cpu @debca000 s25932 r8192 d23220 u57344
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyPS0,115200 earlyprintk root=mtd:jffs2 rw rootfstype=jffs2
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 493036K/524288K available (6144K kernel code, 200K rwdata, 1460K rodata, 1024K init, 229K bss, 14868K reserved, 16384K cma-reserved, 0K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xe0800000 - 0xff800000   ( 496 MB)
    lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    modules : 0xbf000000 - 0xbfe00000   (  14 MB)
      .text : 0xc0008000 - 0xc0700000   (7136 kB)
      .init : 0xc0900000 - 0xc0a00000   (1024 kB)
      .data : 0xc0a00000 - 0xc0a32000   ( 200 kB)
       .bss : 0xc0a32000 - 0xc0a6b698   ( 230 kB)
Preemptible hierarchical RCU implementation.
        Build-time adjustment of leaf fanout to 32.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=32, nr_cpu_ids=2
NR_IRQS:16 nr_irqs:16 16
efuse mapped to e0800000
slcr mapped to e0802000
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 e0802100
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 e080a000, 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: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100058
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 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
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 @ 0xe0840000
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 25, base_baud = 3125000) is a xuartps
`▒▒׋▒Led
console [ttyPS0] enabled
bootconsole [earlycon0] disabled
bootconsole [earlycon0] disabled
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
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
fpga-region fpga-full: FPGA Region probed
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource arm_global_timer
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 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: enabled with armv7_cortex_a9 PMU driver, 7 counters available
futex hash table entries: 512 (order: 3, 32768 bytes)
workingset: timestamp_bits=30 max_order=17 bucket_order=0
jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
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
xdevcfg f8007000.devcfg: ioremap 0xf8007000 to e0828000
[drm] Initialized
brd: module loaded
loop: module loaded
m25p80 spi0.0: found s25fl256s1, expected n25q512a
m25p80 spi0.0: s25fl256s1 (32768 Kbytes)
5 ofpart partitions found on MTD device spi0.0
Creating 5 MTD partitions on "spi0.0":
0x000000000000-0x000000500000 : "boot"
0x000000500000-0x000000520000 : "bootenv"
0x000000520000-0x000000fa0000 : "kernel"
0x000000fa0000-0x000001a20000 : "jffs2"
0x000001a20000-0x000001f20000 : "spare"
libphy: Fixed MDIO Bus: probed
CAN device driver interface
libphy: MACB_mii_bus: probed
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 27 (00:0a:35:00:ea:16)
Marvell 88E1510 e000b000.etherne:00: attached PHY driver [Marvell 88E1510] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1)
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
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer at e0942000 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
NET: Registered protocol family 10
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20161123 t)
can: netlink gateway (rev 20130117) max_hops=1
Registering SWP/SWPB emulation handler
hctosys: unable to open rtc device (rtc0)
of_cfs_init
of_cfs_init: OK
ALSA device list:
  No soundcards found.
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000000: 0xfffe instead
mmc0: new high speed SDHC card at address 59b4
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000004: 0xfffe instead
mmcblk0: mmc0:59b4 SDC   7.51 GiB
 mmcblk0: p1 p2
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000008: 0xfffe instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000000c: 0xfffe instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000010: 0xfffe instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000014: 0xfffe instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000018: 0xfffe instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000001c: 0xfffe instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000020: 0x5566 instead
jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000024: 0x4e58 instead
jffs2: Further such events for this erase block will not be printed
jffs2: Empty flash at 0x000000a0 ends at 0x000000a4
jffs2: Empty flash at 0x000000a8 ends at 0x000000ac
jffs2: Empty flash at 0x000000b0 ends at 0x000000b4
jffs2: Empty flash at 0x000000b8 ends at 0x000000bc
jffs2: Empty flash at 0x000000c0 ends at 0x000000c4
jffs2: Empty flash at 0x000000c8 ends at 0x000000cc
jffs2: Empty flash at 0x000000d0 ends at 0x000000d4
jffs2: Empty flash at 0x000000d8 ends at 0x000000dc
jffs2: Empty flash at 0x000000e0 ends at 0x000000e4
jffs2: Empty flash at 0x000000e8 ends at 0x000000ec
jffs2: Empty flash at 0x000000f0 ends at 0x000000f4
jffs2: Empty flash at 0x000000f8 ends at 0x000000fc
jffs2: Empty flash at 0x00000100 ends at 0x00000104
jffs2: Empty flash at 0x00000108 ends at 0x0000010c
jffs2: Empty flash at 0x00000110 ends at 0x00000114
jffs2: Empty flash at 0x00000118 ends at 0x0000011c
random: fast init done

 

Я попробовал грузить временно RootFS с SD карточки, переконфигурировал Petalinux и запустил

Для того, чтобы осуществить загрузку из другого раздела, необходимо поправить содержимое раздела bootenv

но вот команды изменения переменных окружающей среды(ENV) из загруженного на Zedboard Линукса, а именно fw_printenv, fw_setenv, не обнаруживаются при вводе их, вышел из положения вот таким образом:

добавил в конец файла в проекте /project-spec/meta-user/conf/petalinuxbsp.conf следующее:

IMAGE_INSTALL_append += " \
    u-boot-fw-utils \

    "

и пересобрал его, после этого fw_printenv и fw_setenv добавились в сборку

вот что выдает при выполнении fw_printenv

root@mil_eth:/# fw_printenv
Warning: Bad CRC, using default environment
bootcmd=run $modeboot
bootdelay=3
baudrate=115200
fit_image=fit.itb
load_addr=0x2000000
fit_size=0x800000
flash_off=0x100000
nor_flash_off=0xE2100000
fdt_high=0x20000000
initrd_high=0x20000000
norboot=echo Copying FIT from NOR flash to RAM... && cp.b ${nor_flash_off} ${load_addr} ${fit_size} && bootm ${load_addr}
sdboot=echo Copying FIT from SD to RAM... && load mmc 0 ${load_addr} ${fit_image} && bootm ${load_addr}
jtagboot=echo TFTPing FIT to RAM... && tftpboot ${load_addr} ${fit_image} && bootm ${load_addr}
usbboot=if usb start; then echo Copying FIT from USB to RAM... && load usb 0 ${load_addr} ${fit_image} && bootm ${load_addr}; fi
dfu_ram_info=set dfu_alt_info ${kernel_image} ram 0x3000000 0x500000\\;${devicetree_image} ram 0x2A00000 0x20000\\;${ramdisk_image} ram 0x2000000 0x600000
dfu_ram=run dfu_ram_info && dfu 0 ram 0
thor_ram=run dfu_ram_info && thordown 0 ram 0
dfu_mmc_info=set dfu_alt_info ${kernel_image} fat 0 1\\;${devicetree_image} fat 0 1\\;${ramdisk_image} fat 0 1
dfu_mmc=run dfu_mmc_info && dfu 0 mmc 0
thor_mmc=run dfu_mmc_info && thordown 0 mmc 0


но вот при изменении переменных через fw_setenv Линукс ругается на невозможность корректировки, 

я открыл файл /etc/fw_env.config и раскомментил одну строчку

# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is ommitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash

# NOR example
# MTD device name    Device offset    Env. size    Flash sector size    Number of sectors
/dev/mtd1        0x0000            0x20000        0x4000
#/dev/mtd2        0x0000        0x4000        0x4000

# MTD SPI-dataflash example
# MTD device name    Device offset    Env. size    Flash sector size    Number of sectors
#/dev/mtd1        0x500000    0x20000
#/dev/mtd6        0x4200        0x4200

# NAND example
#/dev/mtd0        0x4000        0x4000        0x20000            2

# Block device example
#/dev/mmcblk0        0xc0000        0x20000

# VFAT example
#/boot/uboot.env            0x0000          0x4000

после этого fw_setenv позволило изменить переменную среды(fw_setenv bootdelay 1), причем при просмотре видно, что она уже помещена в конец с измененным значением bootdelay=1

но вот при перезагрузке модуля получаю вот такую ошибку:

MMC:   sdhci@e0100000: 0 (SD)
SF: Detected s25fl256s_64k with page size 256 Bytes, erase size 64 KiB, total 32 MiB
In:    serial
Out:   serial
Err:   serial
Net:   ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - 1a:79:bb:ae:ba:89
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0
run - run commands in an environment variable

Usage:
run var [...]
    - run the commands in the environment variable(s) 'var'
Zynq>


вопрос 2:

как правильно изменить переменные в разделе bootenv?

какие переменные необходимо изменить, чтобы переключиться на другой раздел RootFS?

какие переменные необходимо изменить, чтобы переключиться на другую сборку Linux?

 

бьюсь уже третью неделю, буду благодарен за любую помощь

спасибо

Изменено пользователем xxxmatrixxx

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


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

Так, обо всем по порядку.

1. JFFS2 - не для QSPI

2. По поводу PL-части (FPGA) у вас есть два варианта - грузить его явным образом из U-Boot либо закатать внутрь FIT-файла (Flattened Image Tree, примеры в u-boot/doc/uImage.FIT). Разумеется, речь идет о Full Reconfiguration. Partial Reconfiguration тоже можно, но это бубен из другого ансамбля. Оба варианта подразумевают не битстрим, а бинарь, полученный из битстрима проходом bootgen, см.UG1283

3. По поводу ядра - ровно то же самое, два варианта - грузим отдельно либо в составе FIT. Второй вариант мне нравится больше - не надо заморачиваться разбивкой памяти при декомпрессии ядра (да-да, ядро можно сжать, например, lzma и сказать U-Boot'у декомпрессить его перед загрузкой, то же самое относится и к PL).

4. rootfs - три варианта: ext4 на sdcard, ramdisk в QSPI отдельно, ramdisk внутри FIT. Второй и третий варианты все равно потребуют какого-то writable storage для логов, /tmp и прочего, так что, ПМСМ, при наличии SDcard не имеют смысла.

Какую комбинацию вариантов из 2/3/4 применить - решать вам.

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


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

спасибо большое за ответ

 

не могли бы скинуть ссылки на документацию, где можно об этом прочитать

 

сейчас у меня стоит первостепенная задача:

1. по Ethernet грузить новый образ RootFS c измененной программой

2. загрузить его в новый раздел QSPI Flash(например, spare)

3.  затем изменить переменную окружения(пока я так же не понимаю, какую переменную там надо менять), чтобы подхватывался RootFS уже с раздела "spare"

Изменено пользователем xxxmatrixxx

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


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

3 hours ago, xxxmatrixxx said:

1. по Ethernet грузить новый образ RootFS c измененной программой

Из загруженного Linux или из U-Boot?

3 hours ago, xxxmatrixxx said:

2. загрузить его в новый раздел QSPI Flash(например, spare)

Тот же вопрос - из U-Boot или из Linux?

3 hours ago, xxxmatrixxx said:

3.  затем изменить переменную окружения(пока я так же не понимаю, какую переменную там надо менять), чтобы подхватывался RootFS уже с раздела "spare"

Менять bootcmd, чтобы она звала две разных последовательности команд.

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


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

17 minutes ago, gosha-z said:

Из загруженного Linux или из U-Boot?

Тот же вопрос - из U-Boot или из Linux?

Менять bootcmd, чтобы она звала две разных последовательности команд.

Все делается из Linux, т.е. я передаю файл rootfs по Ethernet на плату Zedboard, где крутится TCP сервер, принимаю данные, записываю их в файл, сохраняю файл, и затем записываю его в соответствующий раздел mtd (пока "spare"), вот такой командой:

flashcp -v /home/update.txt "/dev/mtd0"

 

я пока не могу понять:

1. как соответствующий раздел соотносится с rootfs при загрузке Линукс, т.е. как настроить petalinux, чтобы файловая система находилась именно в этом разделе mtd

2. как из линукса изменить bootenv(я пока только смог это сделать через fw_setenv после настроек и пересборки, описанной выше), чтобы изменить место с которого грузить файловую систему, при этом оставив резервной старую файловую систему

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


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

Делаете две последовательности, одна грузит rootfs из одного раздела, вторая- - из другого, в зависимости от того,откуда хотите грузить - меняете bootcmd.

 

UPD: Слегка наврал - bitstream в FIT компрессить нельзя, только "снаружи"

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


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

прочитал документацию по тому, как делаются последовательности

 

спасибо большое

 

я нашел файл /build/tmp/deploy/images/plnx_arm/fitimage.its в котором указаны данные последовательности, но он является генерируемым при при сборке самого проекта petalinux( petalinux-build)

 

где я могу найти исходник, т.е. из чего он генится, для данного файла при сборке под petalinux, либо сгенерированный файл fitimage.its надо после команды petalinux-build изменять, как мне надо, и пересобирать через mkimage -f fitimage.its fit.itb?

 

по документации мне необходимо ручками прописать во флэшку файл fit.itb, можно ли это сделать в автоматическом режиме при сборке самого проекта petalinux?

 

Изменено пользователем xxxmatrixxx

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


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

По поводу Petalinux: единственная от него польза - готовые toolchains, далее берете U-Boot (можно родной, можно Xilinx, примерно позавчера они уравнялись по версиям), ядро (в вашем случае лучше Xilinx fork, ибо в mainline нет драйвера Zynq QSPI, от Каденса не подходит, хотя и похож), buildroot, делаете все, что надо и собираете воедино. 

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


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

On 2/5/2019 at 11:34 AM, xxxmatrixxx said:

как загрузить файл rootfs.jffs2 в QSPI FLASH?

Отформатировать раздел /dev/mtd3, например, в ext4, и распаковать в него rootfs.tar.gz

On 2/6/2019 at 1:20 PM, xxxmatrixxx said:

я пока не могу понять:

1. как соответствующий раздел соотносится с rootfs при загрузке Линукс, т.е. как настроить petalinux, чтобы файловая система находилась именно в этом разделе mtd

В bootargs указываете root=/dev/mtd3 rw rootwait rootfstype=ext4 

Изменено пользователем Dvorkin

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


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

On 2/6/2019 at 1:20 PM, xxxmatrixxx said:

2. как из линукса изменить bootenv(я пока только смог это сделать через fw_setenv после настроек и пересборки, описанной выше), чтобы изменить место с которого грузить файловую систему, при этом оставив резервной старую файловую систему

Можно прочитать /dev/mtd1 (который bootenv) и посмотреть, в каком формате хранятся переменные u-boot.

Не маловат размер раздела 11 МБ для RootFS? И вообще, QSPI всего 32 МБ, проще грузиться с SD и хранить переменные u-boot в uEnv.txt

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


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

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

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

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

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

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

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

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

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

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