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

Загрузка Petalinux 2023.1 на Microblaze. Плата Microphase A7-Lite (Artix A7-100)

Всем привет!

После минимального освоения сборки и загрузки линукса в Zynq-7, надо освоить аналогичные действия на софтовом Microblaze. Имеется плата Microphase A7-Lite с установленными fpga XC7A100T-2FGG484, DDR3 MT41K256M16TW-107:P (D9SHD), QSPI flash, RGMII RTL8211E, HDMI, EEPROM, 2xLED, 3xBUTTON .

Сразу скажу, что по мере освоения стало понятно, что установленного QSPI flash 16МБ для этих целей недостаточно. Так что заменил IS25LP128FBLE (16МБ) на MX25L25645GM2I-10G (32МБ). Подключение:

config.thumb.png.7758ce390751cd05de18804db66174fc.png

Чтобы не парить мозг каждый раз назначением ножек и т.п., когда делается новый проект для этой платы, сделал для платы "пакет поддержки", чтобы процесс был аналогичен прочим готовым платам для разработчиков. Дело не сильно хитрое, но пришлось пройти обряд танцев с бубном, ибо, если что-то Vivado не понравится в файлах описания платы, то он тупо ничего не скажет, просто платы в общем списке плат не окажется.

Далее, посмотрев видео о том, как быстро "поднять" Petalinux + Microblaze на другой похожей по сути плате Arty A7-100 и почитав документацию, собрал свой проект в Vivado:

design.thumb.png.beb4ff2df5b34298e06f599944da0f03.png

Настройки ограничений касались только QSPI:

Quote

set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]

Чтобы флешка стала загрузочной, выставил соответствующую опцию (она disable, т.к. параметры настройки корки сделаны в "пакете поддержки"):

qspi.thumb.png.63c1966924c8392b231328c5c153188e.png

Далее стандартные шаги по компиляции, экспорту оборудования в файл.

Затем переход на виртуальную машину vmware с установленной Ubuntu, Vivado, Petalinux и прочим зоопарком. Запускаю терминал в папке, в которой будет создан проект с именем "qspi".

1. Начальные действия по созданию проекта Petalinux:

Quote

source ~/petalinux/2023_1/settings.sh

petalinux-create --type project --template microblaze --name qspi

cd qspi

2. Копирую в папку проекта файл описания оборудования, экспортированный из Vivado.

3. Запускаю конфигурирование проекта в соответствии с оборудованием:

Quote

petalinux-config --get-hw-description=.

Когда откроется окно конфигуратора, делаю следующие настройки. Снимаю галку TFTPD:

Quote

Image Packaging Configuration->[ ]Copy final images to tftpboot

Задаю настройки областей в памяти QSPI Flash:

Quote

    Primary Flash (axi_quad_spi_0)  --->
[ ] Advanced Flash Auto Configuration
    *** partition 0 ***
(spi0-fpga) name
(0x400000) size
    *** partition 1 ***
(spi0-boot) name
(0x100000) size
    *** partition 2 ***
(spi0-bootenv) name
(0x100000) size
    *** partition 3 ***
(spi0-kernel) name
(0x1900000) size
    *** partition 4 ***
()  name  

Область spi0-fpga для бит-файла fpga, модифицированного внедрённым кодом загрузчика первого этапа FS-Boot. С запасом - 4 МБ.

Область spi0-boot - для загрузчика u-boot. Его размер чуть более 526 кБ, так что взял с запасом 1 МБ.

Область spi0-bootenv - резерв под bootenv, тоже взял с запасом, округлив для простоты до 1 МБ (хотя столько не надо).

Область spi0-kernel - под образ ядра линукс, точнее, FIT-файл image.ub, составленный из следующего (содержимое готового файла, взято командой dumpimage -l image.ub, но это уже после компиляции):

Quote

FIT description: Kernel fitImage for PetaLinux/6.1.5-xilinx-v2023.1+gitAUTOINC+716921b6d7/microblaze-generic-7a100t
Created:         Fri Apr 21 10:47:58 2023
 Image 0 (kernel-1)
  Description:  Linux kernel
  Created:      Fri Apr 21 10:47:58 2023
  Type:         Kernel Image
  Compression:  gzip compressed
  Data Size:    3860528 Bytes = 3770.05 KiB = 3.68 MiB
  Architecture: MicroBlaze
  OS:           Linux
  Load Address: 0x80000000
  Entry Point:  0x80000000
  Hash algo:    sha256
  Hash value:   fad3b9a9155a3013c2f6874225276da8988483f8ee3e9349e31872a194706ab5
 Image 1 (fdt-system-top.dtb)
  Description:  Flattened Device Tree blob
  Created:      Fri Apr 21 10:47:58 2023
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    16809 Bytes = 16.42 KiB = 0.02 MiB
  Architecture: MicroBlaze
  Hash algo:    sha256
  Hash value:   543745f752da3494a97bdf8b1372c46466c02d9a5b88d94c83a2dc0ccf704616
 Image 2 (ramdisk-1)
  Description:  petalinux-image-minimal
  Created:      Fri Apr 21 10:47:58 2023
  Type:         RAMDisk Image
  Compression:  uncompressed
  Data Size:    9219377 Bytes = 9003.30 KiB = 8.79 MiB
  Architecture: MicroBlaze
  OS:           Linux
  Load Address: unavailable
  Entry Point:  unavailable
  Hash algo:    sha256
  Hash value:   ac6f980065616e1777f22393e5b3492ed8f49961cdaac7af8bc8727eb5893fd5
 Default Configuration: 'conf-system-top.dtb'
 Configuration 0 (conf-system-top.dtb)
  Description:  1 Linux kernel, FDT blob, ramdisk
  Kernel:       kernel-1
  Init Ramdisk: ramdisk-1
  FDT:          fdt-system-top.dtb
  Hash algo:    sha256
  Hash value:   unavailable

Почему 0x1900000 (25МБ) - чуть ниже.

Задаю настройки u-boot, находящиеся здесь:

Quote

u-boot Configuration->u-boot script configuration->QSPI/OSPI image offsets

Меняю только те, что для FIT-образа (мой случай):

Quote

(0x600000) QSPI/OSPI fit image offset
(0x1900000) QSPI/OSPI fit image size

Офсет взят исходя из того, что перед FIT образом в flash лежат: fpga=4МБ + u-boot=1МБ + bootenv=1МБ = 6МБ => 0x600000.

Размер под FIT образ взят до конца размера флешки 32МБ с учётом того, что в последний 1МБ пишется скрипт загрузки boot.scr: 32МБ (0x2000000) - 6МБ - 1МБ = 25МБ (0x1900000).

Почему-то эти настройки человек из видео не делал, но у него всё запускается и грузится (правда, у него Vivado 2018). В документации (UG1144, стр.69) прямо написано:

Quote

Note: You should check and update offset which is specified in petalinux-config  → u-boot
Configuration → u-boot script configuration QSPI/OSPI fit image offset should be match with the
kernel offset in petalinux-config  → Subsystem AUTO Hardware Settings  → Flash Settings. If they
do not match, the process can fail at U-Boot prompt.

4. В конце надо сохранить конфигурацию. После выхода из конфигуратора будет сгенерирована конфигурация проекта.

5. Конфигурирование файловой системы rootfs (можно выбрать программы для установки, но это увеличивает размер образа!):

Quote

petalinux-config -c rootfs

Я выбрал только эти две (вторая в надежде на то, что система будет время синхронизировать по NTP, но не знаю как в деле):
 

Quote

Filesystem Packages->base->[*]busybox
Filesystem Packages->network->ntp->[*]ntp

В видео человек ещё выбирал Python и с ним всё умещалось в 16МБ на его плате Arty-A7. В моём случае можно было выбрать только Python3, но это увеличивает размер image.ub до 25МБ, что под завязку или не влезет в 32МБ (6МБ ведь занято уже).

Далее сохраняем настройки и выходим.

6. Запускаю построение petalinux:

Quote

petalinux-build

7. После успешной сборки выходные файлы образов будут в папке images/linux:

2023-09-0510-09-24.thumb.png.a80e5c6fe180be0b4ef6587f0fd0fdc8.png

На всякий случай, вот содержимое файла boot.prm:

Quote

===================================
Configuration Memory information
===================================
File Format        MCS
Interface          SPIX4
Size               32M
Start Address      0x00000000
End Address        0x01FFFFFF

Addr1         Addr2         Date                    File(s)
0x00000000    0x003A607B    Sep  3 00:19:37 2023    /home/dimonira/petalinux/a7lite/qspi/images/linux/download.bit
0x00400000    0x00480A03    Sep  3 00:14:16 2023    /home/dimonira/petalinux/a7lite/qspi/images/linux/u-boot-s.bin
0x00600000    0x0127DF87    Sep  3 00:18:12 2023    /home/dimonira/petalinux/a7lite/qspi/images/linux/image.ub
0x01F00000    0x01F00BBD    Sep  3 00:09:24 2023    /home/dimonira/petalinux/a7lite/qspi/images/linux/boot.scr

8. Подготовка окружения Vivado (у вас путь установки Vivado может отличаться):

Quote

source ~/Xilinx/Vivado/2023.1/settings64.sh

9. Генерация mcs файла для прошивки (у вас название бит-файла может отличаться):

Quote

petalinux-package --boot --force --fpga design_1_wrapper.bit --u-boot --kernel --flash-size 32 --flash-intf SPIx4

Лог:
 

Quote

[INFO] Sourcing buildtools
WARNING: Auto detecting MMI file with XSA
INFO: Creating download.bit...
INFO: Fpga bitstream: /home/dimonira/petalinux/a7lite/qspi/design_1_wrapper.bit
INFO: Fpga bitstream MMI file: /tmp/tmp.BEaIaXg56e/design_1_wrapper.mmi
INFO: Fsbl file: /home/dimonira/petalinux/a7lite/qspi/images/linux/fs-boot.elf
INFO: Output download.bit: /home/dimonira/petalinux/a7lite/qspi/images/linux/download.bit
INFO: Add bitstream "/home/dimonira/petalinux/a7lite/qspi/images/linux/download.bit" to 0.
INFO: Add datafile "/home/dimonira/petalinux/a7lite/qspi/images/linux/u-boot-s.bin" to 0x400000.
INFO: Add datafile "/home/dimonira/petalinux/a7lite/qspi/images/linux/image.ub" to 0x600000.
INFO: Add datafile "/home/dimonira/petalinux/a7lite/qspi/images/linux/boot.scr" to 0x1f00000.
INFO: Generating MCS file...

10. Далее стандартная процедура прошивки итогового файла boot.mcs в QSPI flash средствами Vivado.

11. Теперь о грустном. Система НЕ запускается! Судя по логу, который я ловлю терминалом:

Quote

FS-BOOT First Stage Bootloader (c) 2013-2014 Xilinx Inc.
Build date: May  1 2023 00:38:12  
Serial console: Uartlite
FS-BOOT: Booting from FLASH.

FPGA успешно загружается и загрузчик первого этапа FS-BOOT запускается и начинает работать (по крайней мере выводит в лог сообщения). И раз он работает, значит работает и проект, во всяком случае Microblaze+BRAM+UART+клоки.

Но FS-BOOT работает из локальной памяти FPGA и должен загрузить уже во внешнюю DDR3 следующий загрузчик - U-BOOT, но судя по всему этого то и не происходит. В чём могут быть грабли?

Читая документацию, я так до конца и не понял, как работает вывод CCLK? В начале понятно, выдаёт клоки на загрузку бит-файла в FPGA, но что потом в USER-MODE, будут клоки идти или нет? Бит настройки "Enable STARTUP primitive" я установил, но достаточно ли этого? В документации нет конкретики (или не нашёл). Осциллографом пока поленился тыкать, надо делать "преобразования" на столе.

Другой момент. Я посмотрел содержимое итогового файла прошивки boot.mcs. По смещению 0x400000 (после бит-файла), где должен находится u-boot, я вижу заголовок:

boot_mcs.thumb.png.d3dde3bca427826d5afa8cf927473f43.png

Где (см. UG1144 стр.200):

0xb8b40008 - маркер

0x80000000 - размер BIN-образа

0x80100000 - стартовый адрес загрузки образа, по которому FS-BOOT загружает U-BOOT

0x9400c001 - где начинается BIN-образ

Непонятно второе и последнее значения. Ну, размер ладно, больше - не меньше. Но адрес 0x9400c001 откуда взят? И что это за адрес, внутри флешки или в адресном пространстве Microblaze?

В проекте память Microblaze распределена так:

memory.thumb.png.3bad096ae166f733939240f9479721e2.png

Ничего похожего на 0x9400c001 не наблюдаю. Во всяком случае, U-BOOT лежит во флешке и смещение по идее должно быть взято оттуда.

И ещё. Есть подозрения на endian. Я так и не понял, на видео у человека после загрузки системы в логах видно, что Microblaze работает в little-endian. Но в документации (UG984) написано:

Quote

Big endian format is supported when using the MMU in virtual or protected mode 
(C_USE_MMU  > 1) or when reorder instructions are enabled ( C_USE_REORDER_INSTR  = 1).

...

The  C_ENDIANNESS  parameter is always set to little endian

Но у меня как раз и стоит в настройках Microblaze Linux MMU + Virtual (как в видео). Плюс я где-то видел при компиляции big-endian, но где не могу вспомнить. Сам я ничего не менял, даже непонятно где это выставляется, видимо косвенно.

Где искать проблему?

PS. Работоспособность DDR3 проверил в другом проекте bare-metal на Microblaze с использованием моего "пакета поддержки" и стандартного шаблона mem_test - работает.

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


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

Продолжил разбираться. Создал проект на основе шаблона mba_fs_boot для отладки FS-BOOT:

mba_fs_boot.thumb.png.067143d926865c7e0e70213436c20a64.png

Конечно, без обычного обряда танца с бубном не обошлось - проект не собирался из-за ошибок, вызванных отсутствием нескольких определений констант.

Одно из определений - CONFIG_PRIMARY_FLASH_SPI. Судя по всему, это определяется в проекте Petalinux, а Vitis про это не знает. Другие константы - адреса и размеры, которые в заголовке xparameters.h, описывающем аппаратуру платы, есть, но имена имеют другие.

Так что для успеха компиляции добавил в fs-boot.h (после #include "xparameters.h") следующие строки:

#define CONFIG_PRIMARY_FLASH_SPI
#define CONFIG_FS_BOOT_OFFSET     0x400000
#define CONFIG_XILINX_ERAM_SIZE   (XPAR_MIG_7SERIES_0_HIGHADDR-XPAR_MIG_7SERIES_0_BASEADDR)
#define CONFIG_XILINX_ERAM_START  XPAR_MIG_7SERIES_0_BASEADDR

#include "spi-flash.h"

Включить spi-flash.h пришлось из-за ругани компилятора на отсутствие объявления функции spi_flash_read. CONFIG_FS_BOOT_OFFSET = 0x400000 - это адрес старта размещения u-boot в флешке (точнее на заголовок перед ним).

А в файл xspi.h в аналогичное место вставил это:

#define CONFIG_PRIMARY_FLASH_SPI_BASEADDR XPAR_AXI_QUAD_SPI_0_BASEADDR
#define CONFIG_FLASH_SPI_MODE             XPAR_AXI_QUAD_SPI_0_SPI_MODE
#define CONFIG_FLASH_SPI_FIFO_DEPTH       XPAR_AXI_QUAD_SPI_0_FIFO_DEPTH

Для избегания пары предупреждений пришлось убрать volatile в вызовах spi_flash_read. Но это не критично.

Далее запустил отладку и пошёл. Выяснилось, что:

1. FS-BOOT выполняется корректно.

2. Смещение для поиска u-boot в флешке записано корректно, а вот Xilinx дезинформировал, что размер u-boot берётся из заголовка по смещению 0x4. На самом деле целевой адрес загрузки и размер u-boot читаются как два соседних слова, в итоге всё корректно:

0x80100000 - целевой адрес загрузки

0x000808F8 - размер u-boot (526584 байта), точно, как на самом деле размер файла u-boot.bin.

3. Слово 0x9400c001, которое было непонятно, на самом деле первое слово кода u-boot. Оно как раз находится по смещению 0x10C и называется в руководстве как "Where the BIN file start".

 

Следующие картинки всё показывают, в том числе отличие u-boot.bin от u-boot-s.bin (последний тот же u-boot.bin, но с заголовком в начале).

addresses.thumb.png.9f5f0083a7c7d74d0f759c6b9abf2cee.png

u-boot-s_vs_u-boot.thumb.png.8fea98dbc2ad979fd1247556a1feffc9.png

В итоге FS-BOOT корректно реально загружает u-boot в DDR3 (видно на картинке по дампу памяти с началом в 0x80100000) и передаёт управление на его начало. В терминале я вижу:

Quote

FS-BOOT First Stage Bootloader (c) 2013-2014 Xilinx Inc.
Build date: Sep  5 2023 20:27:39  
Serial console: Uartlite
FS-BOOT: Booting from FLASH.
Jumping to 0x80100000

А вот дальше - тишина. Не работает u-boot!

Почему - непонятно. Во весь рост встаёт вопрос о endian. Я с Microblaze детально не знаком и по двоичному коду не могу понять какой endian. Может знает кто?

Или есть другие идеи? Надо разбираться с u-boot... Или с endian у Microblaze, попробую покрутить его настройки.

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


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

Конечно u-boot не сконфигурирован, как оказалось...

Посмотреть какой реальный endian у Microblaze можно в файле design_1_wrapper.mmi, в котором приводится описание памяти (как раз для внедрения FS-BOOT в бит-файл):

Quote

  <Processor Endianness="Little" InstPath="design_1_i/microblaze_0">

А вот с u-boot сложнее. Как выяснилось, он почему-то оказался настроен под virtex5 и big endian! Для его конфигурирования делается команда:

Quote

petalinux-config -c u-boot

После её запуска придётся подождать, пока не появится окно конфигуратора. Кратко пока поменял вот что:

MicroBlaze architecture-> (0x1F00000) Boot script offset [не менял, просто для справки, что оно тут - смещение для размещения boot.scr]
MicroBlaze architecture-> (artix7) Targeted FPGA family  [было: virtex5!!!]
Endianness selection (Little endian)                     [было: Big endian!!!]
API->[ ] Enable U-Boot API                               [?наверное можно при надобности выбрать, оставил]
Boot options->Boot media->[*] Support for booting from QSPI flash      [не обязательно, но по-моему укоротит скрипт boot.scr до запуска сразу с заданного места - QSPI flash]
Boot options->[ ] Enable preboot   [снял галку, вроде мне не нужно]
Device Drivers->Ethernet PHY (physical media interface) support [отключил ненужные PHY]
(где-то включил RGMII, посмотреть, может ещё что-то ненужное отключить)

Компиляция...
 

Пока не пошло 😞

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


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

Опять вернулся к FS-BOOT. Подхожу отладчиком к команде перехода на начало u-boot на адрес 0x80100000. Вызвал окно дизассемблера.

go.thumb.png.0a2f0a77a72dcb7bc85f84e0a79ef97b.png

Но после нажатия на шаг вперёд ничего не происходит! Процессор стоит на месте! Если нажать на паузу, то возникает окно, где об этом сообщается - процессор стоит на адресе 0xb5c:

b5c.thumb.png.e095ec1a46ff3161658ddab101b3cc4c.png

Причём, если посмотреть содержимое регистров, то адрес точки перехода 0x80100000 в регистре r7, но этот регистр в команде перехода не участвует! А далее команды зацикливания, там процессор и стоит.

Получается, что до u-boot дело не доходит. В чём может быть проблема? Кэш? Но вроде он отключается в начале FS-BOOT: XCACHE_DISABLE_CACHE();

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


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

Ничего с полным проектом так и не добился. Создал проект попроще, только процессор, ddr3, uart, gpio, timer, qspi:

sys.thumb.png.34d6addb0035917e124e30b7aad109c1.png

Далее сделал всё аналогично предыдущему, настроил только адреса и размеры, а настройки rootfs и u-boot не менял.

После этого u-boot таки загрузился! Но радость была короткой: u-boot почему-то не захотел увидеть флешку и что-либо грузить с неё.

Лог при старте такой:

Spoiler

U-Boot 2023.01 (Mar 29 2023 - 13:08:40 +0000)

Model: Xilinx MicroBlaze
DRAM:  512 MiB
Core:  7 devices, 7 uclasses, devicetree: embed
Loading Environment from nowhere... OK
In:    serial
Out:   serial
Err:   serial
Model: Xilinx MicroBlaze
U-BOOT for microblaze-generic

Hit any key to stop autoboot:  0 
JTAG: Trying to boot script at 9f200000
## Executing script at 9f200000
Trying to load boot images from jtag
Wrong Image Format for bootm command
ERROR: can't get kernel image!
Trying to load boot images from qspi

Далее зависает. Иногда возникает исключение:

Spoiler

U-Boot 2023.01 (Mar 29 2023 - 13:08:40 +0000)

Model: Xilinx MicroBlaze
DRAM:  512 MiB
Core:  7 devices, 7 uclasses, devicetree: embed
Loading Environment from nowhere... OK
In:    serial
Out:   serial
Err:   serial
Model: Xilinx MicroBlaze
U-BOOT for microblaze-generic

Hit any key to stop autoboot:  0 
JTAG: Trying to boot script at 9f200000
## Executing script at 9f200000
Trying to load boot images from jtag
Wrong Image Format for bootm command
ERROR: can't get kernel image!
Trying to load boot images from qspi
Hardware exception at 0x1ee7ffb4 address
Illegal op-code exception
Return address from exception 0x1ee7ffb8
### ERROR ### Please RESET the board ###

 

Прервав выполнение u-boot, я попробовал команду из boot.scr, которая инициализирует флешку:

Quote

sf probe 0 0 0

Именно на ней u-boot и зависает. В чём может быть проблема?

Может частота клоков большая, 50 МГц? Но флешка может вдвое больше. Странно, fs-boot работал с флешкой без проблем, хотя в конфигурации стоит 33 МГц. Похоже без осциллографа не обойтись.

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


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

11 часов назад, Dimonira сказал:

Именно на ней u-boot и зависает. В чём может быть проблема?

А с чего вы взяли что он должен увидеть вашу флэшку? Вы поставили контролер qspi по произвольным адресам, а что там прописано в u-boot смотрели? u-boot грузится вместе с плис, т.к. должен быть интегрирован в лмб память микроблэйза - все остальные загрузки делаются уже софтово микроблэйзом.

Если есть сомнения в работе ядра qspi, то запустите на микроблэйзе тесты флэшки из исходников этого ядра.

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


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

On 9/7/2023 at 11:25 AM, fguy said:

А с чего вы взяли что он должен увидеть вашу флэшку? Вы поставили контролер qspi по произвольным адресам, а что там прописано в u-boot смотрели? u-boot грузится вместе с плис, т.к. должен быть интегрирован в лмб память микроблэйза - все остальные загрузки делаются уже софтово микроблэйзом.

Если есть сомнения в работе ядра qspi, то запустите на микроблэйзе тесты флэшки из исходников этого ядра.

Вы, видимо невнимательно читали. Загрузчик fs-boot грузится вместе с плис (а не u-boot) и работает, из флешки загружает код u-boot в память ddr3. Это всё делает microblaze из флешки через контроллер qspi. Значит железо заработало, а дальше не работает u-boot. Причину я только что выяснил.

Всё оказалось банально, как только я достал осциллограф и обнаружил, что тактовые импульсы на флешку нестабильны, то они есть, то они пропадают. После того, как я увидел, что была попытка таки начала работы u-boot и загрузка ядра, я задумался, что что-то не так с железкой.

Недолго чесал репу и предположил - дело в питании, плате не хватает тока!

Дело в том, что плата запитывается от двух USB-C разъёмов - jtag и uart, питание с которых объединено дерез диоды и далее идёт на dc/dc. Плюс, точнее по факту минус: у платы нет кнопки сброса плис на PROG, только на user i/o. В результате для полного сброса надо передёргивать питание. Я плату запитывал двумя кабелями с одного usb3.0 хаба TP-LINK, один из выходов которого 1.5А, другой стандартный. Плата кушает под 0.5А, но, видимо, хаб не даёт такого тока в момент старта (при старте может и больше бросок), и плата встаёт раком. Тогда я подал питание на плату с отдельного блока питания на разъём jtag, причём увеличил до 5.5В (чтобы перекрыть питание с второго usb), а потом подключил к хабу второй конец с uart. И всё пошло!

Зря я тужился с настройками и компиляциями u-boot, только время терял. Ладно хоть освоил "тему". Лог загрузки, правда не с самого начала (было 4 секунды, и плюс я пока втыкал и запускал терминал), такой:

Spoiler

SF: 26214400 bytes @ 0x600000 Read: OK
## Loading kernel from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x90000114
     Data Size:    3860528 Bytes = 3.7 MiB
     Architecture: MicroBlaze
     OS:           Linux
     Load Address: 0x80000000
     Entry Point:  0x80000000
     Hash algo:    sha256
     Hash value:   bfc32d71b8e6d4298f68e13770714ce3056e25a0c783b0b89d37d0dcc54e2e08
   Verifying Hash Integrity ... sha256+ OK
## Loading ramdisk from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'ramdisk-1' ramdisk subimage
     Description:  petalinux-image-minimal
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x903b1fdc
     Data Size:    8719663 Bytes = 8.3 MiB
     Architecture: MicroBlaze
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha256
     Hash value:   111181d1bf9c93b5a4c5a16078899ee3abdad29fcd7d3878bb3190f254b898de
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'fdt-system-top.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x903aea58
     Data Size:    13485 Bytes = 13.2 KiB
     Architecture: MicroBlaze
     Hash algo:    sha256
     Hash value:   62cf4979d8f617408708416c472d3671b4cfdc3cb81ead06b315542075584dff
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x903aea58
Working FDT set to 903aea58
   Uncompressing Kernel Image
   Loading Ramdisk to 9f656000, end 9fea6d2f ... OK
   Loading Device Tree to 9f64f000, end 9f6554ac ... OK
Working FDT set to 9f64f000

Starting kernel ...

Ramdisk addr 0x9f656000, 
FDT at 0x9f64f000
earlycon: uartlite_a0 at MMIO 0x40600000 (options '115200n8')
printk: bootconsole [uartlite_a0] enabled
cma: Reserved 16 MiB at 0x9e400000
Linux version 6.1.5-xilinx-v2023.1 (oe-user@oe-host) (microblazeel-xilinx-linux-gcc (GCC) 12.2.0, GNU ld (GNU Binutils) 2.39.0.20220819) #1 Fri Apr 21 07:47:58 UTC 2023
setup_memory: max_mapnr: 0x20000
setup_memory: min_low_pfn: 0x80000
setup_memory: max_low_pfn: 0xa0000
setup_memory: max_pfn: 0xa0000
Zone ranges:
  DMA      [mem 0x0000000080000000-0x000000009fffffff]
  Normal   empty
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000080000000-0x000000009fffffff]
Initmem setup node 0 [mem 0x0000000080000000-0x000000009fffffff]
setup_cpuinfo: initialising cpu 0
setup_cpuinfo: Using full CPU PVR support
wt_msr_noirq
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0 
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyUL0,115200 earlycon root=/dev/ram0 rw
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:all(zero), heap alloc:off, heap free:off
Memory: 485600K/524288K available (6090K kernel code, 566K rwdata, 1520K rodata, 180K init, 296K bss, 22304K reserved, 16384K cma-reserved, 0K highmem)
NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
irq-xilinx: /amba_pl/interrupt-controller@41200000: num_irq=4, sw_irq=0, edge=0x6
xilinx_timer_init: Timer base: 0xf0020000, Clocksource base: 0xf0020010
clocksource: xilinx_clocksource: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
/amba_pl/timer@41c00000: irq=1, cpu_id 0
xilinx_timer_shutdown
xilinx_timer_set_periodic
Calibrating delay loop... 49.35 BogoMIPS (lpj=246784)
pid_max: default: 4096 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 16 (order: -4, 448 bytes, linear)
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
audit: initializing netlink subsys (disabled)
audit: type=2000 audit(0.310:1): state=initialized audit_enabled=0 res=1
gpio gpiochip0: (40000000.gpio): not an immutable chip, please consider fixing it!
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
PTP clock support registered
vgaarb: loaded
clocksource: Switched to clocksource xilinx_clocksource
NET: Registered PF_INET protocol family
IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 5120 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 5, 163840 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 12288 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 12288 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
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 32
Trying to unpack rootfs image as initramfs...
workingset: timestamp_bits=30 max_order=17 bucket_order=0
Key type cifs.idmap registered
romfs: ROMFS MTD (C) 2007 Red Hat, Inc.
io scheduler mq-deadline registered
io scheduler kyber registered
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
40600000.serial: ttyUL0 at MMIO 0x40600000 (irq = 2, base_baud = 0) is a uartlite
printk: console [ttyUL0] enabled
printk: console [ttyUL0] enabled
printk: bootconsole [uartlite_a0] disabled
printk: bootconsole [uartlite_a0] disabled
brd: module loaded
spi-nor spi0.0: found mx25l25635e, expected n25q512a
spi-nor spi0.0: mx25l25635e (32768 Kbytes)
Freeing initrd memory: 8512K
4 fixed-partitions partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":
0x000000000000-0x000000400000 : "spi0-fpga"
0x000000400000-0x000000500000 : "spi0-boot"
0x000000500000-0x000000600000 : "spi0-bootenv"
0x000000600000-0x000001f00000 : "spi0-kernel"
NET: Registered PF_PACKET protocol family
Key type dns_resolver registered
Key type encrypted registered
Freeing unused kernel image (initmem) memory: 180K
This architecture does not have kernel memory protection.
Run /init as init process
  with arguments:
    /init
  with environment:
    HOME=/
    TERM=linux
INIT: version 3.04 booting
Starting mdev... OK
Fri Mar  9 12:34:56 UTC 2018
random: crng init done
Configuring packages on first boot....
 (This may take several minutes. Please do not power off the machine.)
Running postinst /etc/rpm-postinsts/100-sysvinit-inittab...
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
INIT: Entering runlevel: 5
Configuring network interfaces... Cannot find device "eth0"
Starting Dropbear SSH server: Generating 2048 bit rsa key, this may take a while...

Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCZbnNUeWQwRomopd6kPdwS4M+QhS2kg7526j63cqBTzvACzUOFrFdhBECrpdgcQR0J3qVmgBfHyKTfsZMQavzyGicR0MOGRFcGVf1YuMWv/Y7keE3hUMoK+vBk9I28LuD7y+1IVsmmA+BffRyJNbwoahmm6cgtJDsAZQPaY1LyaibJ7syzPs4epr0M05jOcgic2yimp3XAD3G2LpIJM4yZ4qY24nlcPk7we8Huxocvjq035MFR3uu4Ud53kcL/Dy79bYbHVrAr0iiSuLg7Ywt0ekbUKART54vXKQcwpdUT2Ve3bXeAgCNv0xsvq2mUuGlwE4g5emBjyKMymuZhOhXR root@minlinux
Fingerprint: SHA256:moGh7slzMOGA3w9y5MefEx+vbuOE5ji2yMd6OM/NyWw
dropbear.
Starting internet superserver: inetd.
Starting syslogd/klogd: done
Starting tcf-agent: OK

PetaLinux 2023.1+release-S05010539 minlinux ttyUL0

minlinux login: 

Из-за того, что в этом проекте нет сетевого контроллера (eth0), на некоторых сетевых моментах ядро тупило, но в итоге дошло до запроса логина.

Теперь надо вернуться к предыдущему проекту с ethernet и попробовать его.

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


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

Радость была недолгой. На следующий день я слегка поменял настройки системы, после чего загрузка снова прекратилась. Самое интересное, что прошитый вчерашний проект, тоже не загружался, хотя загружался накануне.

Потом я снова почитал документацию - PG153 и оказалось, что я делал тактовую частоту ext_spi_clk 100МГц, что судя по таблице недопустимо:

spi_clk.thumb.png.87797a71ad2c23375b9a8c8bd7265769.png

Причём, указанные клоки для режима SPIx1, а для других неведомы. Я сделал 66.6, но это тоже не помогло. Сейчас 50 - безрезультатно. Добавил констрейны для QSPI (из PG153) - лучше не стало.

Снова взял осциллограф. Оказалось, что когда крутишь плату в руках и подключаешь землю щупа к земле платы, то она часто загружается как положено. Если ядро уже загрузилось, то дальше глюков нет.

Выходит глюки именно при обмене по QSPI. Когда загрузки ядра нет, осциллограф говорит, что импульсов на выходе CCLK нет вообще (есть только в момент загрузки бит-файла в fpga). Если подаю питание и импульсы CCLK какое-то продолжительное время есть, значит загрузка ядра пошла (хотя, может и не до конца).

Так что дело было не в питании, все dc/dc на плате выдают нужные напряжения. Основной такт 50 МГц тоже нормальный. Может микросхемы дохлые, флешку брал на Aliexpress, как и саму плату...

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


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

Всё, в главном вроде разобрался, линукс стартует стабильно, плата работает от одного порта хаба. Правда, пока оставил ext_spi_clk = 50МГц, т.е. флешка тактируется 25 МГц, потому ядро из флешки грузится примерно 20 с - долго.

Сначала я изменил настройки microblaze - руками переключил кэш инструкций и данных на всю память DDR, ибо почему-то вивада автоматически устанавливала кэш на периферию.

После этого ядро начало стабильно грузится, но начинало паниковать при попытке подключения к ethernet:

Spoiler

JTAG: Trying to boot script at 9f200000
## Executing script at 9f200000
Wrong image format for "source" command
JTAG: SCRIPT FAILED: continuing...
SF: Detected mx25l25635e with page size 256 Bytes, erase size 64 KiB, total 32 MiB
device 0 offset 0x1f00000, size 0x40000
SF: 262144 bytes @ 0x1f00000 Read: OK
QSPI: Trying to boot script at 9f200000
## Executing script at 9f200000
Trying to load boot images from jtag
Wrong Image Format for bootm command
ERROR: can't get kernel image!
Trying to load boot images from qspi
SF: Detected mx25l25635e with page size 256 Bytes, erase size 64 KiB, total 32 MiB
device 0 offset 0x600000, size 0xf00000
SF: 15728640 bytes @ 0x600000 Read: OK
## Loading kernel from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x90000114
     Data Size:    3860528 Bytes = 3.7 MiB
     Architecture: MicroBlaze
     OS:           Linux
     Load Address: 0x80000000
     Entry Point:  0x80000000
     Hash algo:    sha256
     Hash value:   51c6a58fbe1c0b6f859dd4ab9ff63e1def3eb508e877a1fc82b093782318287f
   Verifying Hash Integrity ... sha256+ OK
## Loading ramdisk from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'ramdisk-1' ramdisk subimage
     Description:  petalinux-image-minimal
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x903b2d04
     Data Size:    8719646 Bytes = 8.3 MiB
     Architecture: MicroBlaze
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha256
     Hash value:   416daa421d25978c994dfa9f261393a9a191a9e3fb55c091728c38c89afa3e38
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'fdt-system-top.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x903aea58
     Data Size:    16853 Bytes = 16.5 KiB
     Architecture: MicroBlaze
     Hash algo:    sha256
     Hash value:   965b66c7183824819a4614052bd02e7956a457e315d6224f6fed452587723785
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x903aea58
Working FDT set to 903aea58
   Uncompressing Kernel Image
   Loading Ramdisk to 9f641000, end 9fe91d1e ... OK
   Loading Device Tree to 9f639000, end 9f6401d4 ... OK
Working FDT set to 9f639000

Starting kernel ...

Ramdisk addr 0x9f641000, 
FDT at 0x9f639000
earlycon: uartlite_a0 at MMIO 0x40600000 (options '115200n8')
printk: bootconsole [uartlite_a0] enabled
cma: Reserved 16 MiB at 0x9e400000
Linux version 6.1.5-xilinx-v2023.1 (oe-user@oe-host) (microblazeel-xilinx-linux-gcc (GCC) 12.2.0, GNU ld (GNU Binutils) 2.39.0.20220819) #1 Fri Apr 21 07:47:58 UTC 2023
setup_memory: max_mapnr: 0x20000
setup_memory: min_low_pfn: 0x80000
setup_memory: max_low_pfn: 0xa0000
setup_memory: max_pfn: 0xa0000
Zone ranges:
  DMA      [mem 0x0000000080000000-0x000000009fffffff]
  Normal   empty
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000080000000-0x000000009fffffff]
Initmem setup node 0 [mem 0x0000000080000000-0x000000009fffffff]
setup_cpuinfo: initialising cpu 0
setup_cpuinfo: Using full CPU PVR support
wt_msr_noirq
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0 
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyUL0,115200 earlycon root=/dev/ram0 rw
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:all(zero), heap alloc:off, heap free:off
Memory: 485592K/524288K available (6090K kernel code, 566K rwdata, 1520K rodata, 180K init, 296K bss, 22312K reserved, 16384K cma-reserved, 0K highmem)
NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
irq-xilinx: /amba_pl/interrupt-controller@41200000: num_irq=7, sw_irq=0, edge=0x28
xilinx_timer_init: Timer base: 0xf0020000, Clocksource base: 0xf0020010
clocksource: xilinx_clocksource: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
/amba_pl/timer@41c00000: irq=1, cpu_id 0
xilinx_timer_shutdown
xilinx_timer_set_periodic
Calibrating delay loop... 49.56 BogoMIPS (lpj=247808)
pid_max: default: 4096 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 16 (order: -4, 448 bytes, linear)
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
audit: initializing netlink subsys (disabled)
audit: type=2000 audit(0.290:1): state=initialized audit_enabled=0 res=1
gpio gpiochip0: (40000000.gpio): not an immutable chip, please consider fixing it!
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
PTP clock support registered
vgaarb: loaded
clocksource: Switched to clocksource xilinx_clocksource
NET: Registered PF_INET protocol family
IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 5120 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 5, 163840 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 12288 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 12288 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
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 32
Trying to unpack rootfs image as initramfs...
workingset: timestamp_bits=30 max_order=17 bucket_order=0
Key type cifs.idmap registered
romfs: ROMFS MTD (C) 2007 Red Hat, Inc.
io scheduler mq-deadline registered
io scheduler kyber registered
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
40600000.serial: ttyUL0 at MMIO 0x40600000 (irq = 5, base_baud = 0) is a uartlite
printk: console [ttyUL0] enabled
printk: console [ttyUL0] enabled
printk: bootconsole [uartlite_a0] disabled
printk: bootconsole [uartlite_a0] disabled
brd: module loaded
spi-nor spi0.0: found mx25l25635e, expected n25q512a
spi-nor spi0.0: mx25l25635e (32768 Kbytes)
Freeing initrd memory: 8512K
4 fixed-partitions partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":
0x000000000000-0x000000400000 : "spi0-fpga"
0x000000400000-0x000000500000 : "spi0-boot"
0x000000500000-0x000000600000 : "spi0-bootenv"
0x000000600000-0x000001f00000 : "spi0-kernel"
xilinx_axienet 40c00000.ethernet: TX_CSUM 0
xilinx_axienet 40c00000.ethernet: RX_CSUM 0
xilinx_axienet 40c00000.ethernet: missing/invalid xlnx,addrwidth property, using default
xilinx_axienet 40c00000.ethernet: pcs-handle (preferred for 1000BaseX/SGMII) or phy-handle required for external PHY
xilinx_axienet: probe of 40c00000.ethernet failed with error -22
Oops: kernel access of bad area, sig: 11
CPU: 0 PID: 1 Comm: swapper Not tainted 6.1.5-xilinx-v2023.1 #1
 Registers dump: mode=8102FBBC
 r1=F0160FFF, r2=00000000, r3=00000001, r4=00000000
 r5=C07FE778, r6=00000000, r7=00000000, r8=C102D740
 r9=000065A2, r10=C102D740, r11=00000060, r12=000065A0
 r13=00000000, r14=00000000, r15=C03AADCC, r16=00000000
 r17=C03AADD8, r18=14948495, r19=6B6B6B6B, r20=C05E6840
 r21=00000000, r22=00000001, r23=C2E11CD8, r24=C102FCF8
 r25=0000000A, r26=C080D0B4, r27=C083A05C, r28=C083675C
 r29=00000000, r30=00000000, r31=C102D740, rPC=C03AADD4
 msr=000045AA, ear=C00EE358, esr=C0184164, fsr=C100B8D4
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]---

После этого беглый поиск по сети навёл на мысль, что надо поменять интерфейс axi_ethernet с процессором с fifo на dma. Проделов это, пересобрав проект и линукс, я получил те же результаты - панику ядра.

Лог загрузки практически был такой же, так что не привожу. Обратил внимание на эту строчку лога:

Quote

xilinx_axienet 40c00000.ethernet: pcs-handle (preferred for 1000BaseX/SGMII) or phy-handle required for external PHY

Стало понятно, что ядро не знает про PHY. В дереве устройств про него не было ничего. Тогда добавил в этот файл (в проекте petalinux):

Quote

<имя_папки-проекта>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

следующие строки, сразу за теми, что уже были в начале (это есть в видео, о котором было в первом посте, но часть строк уже была в генерируемом дереве, так вставлял только отсутствующие):

Quote

&axi_ethernet_0 {
  xlnx,has-mdio = <0x1>;
  phy-handle = <&phy0>;
  mdio {
    phy0: phy@1 {
      device_type = "ethernet-phy";
      reg = <1>;
    };
  };
};

phy@1 соответствует адресу phy на шине mdio, в моём случае = 1. Далее пересобрал проект petalinux и прошил флешку.

В итоге всё грузится, паники ядра нет, сеть видна, 1 гигабит, пинг есть. Eset сообщил об обнаружении нового устройства в сети. Лог загрузки u-boot (сразу после отсчёта 4 секунд) и ядра:

Spoiler

JTAG: Trying to boot script at 9f200000
## Executing script at 9f200000
Wrong image format for "source" command
JTAG: SCRIPT FAILED: continuing...
SF: Detected mx25l25635e with page size 256 Bytes, erase size 64 KiB, total 32 MiB
device 0 offset 0x1f00000, size 0x40000
SF: 262144 bytes @ 0x1f00000 Read: OK
QSPI: Trying to boot script at 9f200000
## Executing script at 9f200000
Trying to load boot images from jtag
Wrong Image Format for bootm command
ERROR: can't get kernel image!
Trying to load boot images from qspi
SF: Detected mx25l25635e with page size 256 Bytes, erase size 64 KiB, total 32 MiB
device 0 offset 0x600000, size 0xf00000
SF: 15728640 bytes @ 0x600000 Read: OK
## Loading kernel from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x90000114
     Data Size:    3860528 Bytes = 3.7 MiB
     Architecture: MicroBlaze
     OS:           Linux
     Load Address: 0x80000000
     Entry Point:  0x80000000
     Hash algo:    sha256
     Hash value:   7e728086e197cb7488eeb52b55ed73a87d7935f50c7fb12b96ec457419e309e1
   Verifying Hash Integrity ... sha256+ OK
## Loading ramdisk from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'ramdisk-1' ramdisk subimage
     Description:  petalinux-image-minimal
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x903b294c
     Data Size:    9219381 Bytes = 8.8 MiB
     Architecture: MicroBlaze
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha256
     Hash value:   0f180b70687ea3f43e3fbaaf41ef7c6179fbb1e881b516c18d23c05f2ce9cc1a
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 90000000 ...
   Using 'conf-system-top.dtb' configuration
   Trying 'fdt-system-top.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x903aea58
     Data Size:    15904 Bytes = 15.5 KiB
     Architecture: MicroBlaze
     Hash algo:    sha256
     Hash value:   4531b66ed19d6da8d36a6021d86b53875dd6b784cdde51a3883278d20fbfb8a6
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x903aea58
Working FDT set to 903aea58
   Uncompressing Kernel Image
   Loading Ramdisk to 9f5c7000, end 9fe91d35 ... OK
   Loading Device Tree to 9f5c0000, end 9f5c6e1f ... OK
Working FDT set to 9f5c0000

Starting kernel ...

Ramdisk addr 0x9f5c7000, 
FDT at 0x9f5c0000
earlycon: uartlite_a0 at MMIO 0x40600000 (options '115200n8')
printk: bootconsole [uartlite_a0] enabled
cma: Reserved 16 MiB at 0x9e400000
Linux version 6.1.5-xilinx-v2023.1 (oe-user@oe-host) (microblazeel-xilinx-linux-gcc (GCC) 12.2.0, GNU ld (GNU Binutils) 2.39.0.20220819) #1 Fri Apr 21 07:47:58 UTC 2023
setup_memory: max_mapnr: 0x20000
setup_memory: min_low_pfn: 0x80000
setup_memory: max_low_pfn: 0xa0000
setup_memory: max_pfn: 0xa0000
Zone ranges:
  DMA      [mem 0x0000000080000000-0x000000009fffffff]
  Normal   empty
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000080000000-0x000000009fffffff]
Initmem setup node 0 [mem 0x0000000080000000-0x000000009fffffff]
setup_cpuinfo: initialising cpu 0
setup_cpuinfo: Using full CPU PVR support
wt_msr_noirq
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0 
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyUL0,115200 earlycon root=/dev/ram0 rw
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:all(zero), heap alloc:off, heap free:off
Memory: 485104K/524288K available (6090K kernel code, 566K rwdata, 1520K rodata, 180K init, 296K bss, 22800K reserved, 16384K cma-reserved, 0K highmem)
NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
irq-xilinx: /amba_pl/interrupt-controller@41200000: num_irq=8, sw_irq=0, edge=0x50
xilinx_timer_init: Timer base: 0xf0020000, Clocksource base: 0xf0020010
clocksource: xilinx_clocksource: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
/amba_pl/timer@41c00000: irq=1, cpu_id 0
xilinx_timer_shutdown
xilinx_timer_set_periodic
Calibrating delay loop... 49.56 BogoMIPS (lpj=247808)
pid_max: default: 4096 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 16 (order: -4, 448 bytes, linear)
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
audit: initializing netlink subsys (disabled)
audit: type=2000 audit(0.280:1): state=initialized audit_enabled=0 res=1
gpio gpiochip0: (40000000.gpio): not an immutable chip, please consider fixing it!
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
PTP clock support registered
vgaarb: loaded
clocksource: Switched to clocksource xilinx_clocksource
NET: Registered PF_INET protocol family
IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 5120 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 5, 163840 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 12288 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 12288 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
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 32
Trying to unpack rootfs image as initramfs...
workingset: timestamp_bits=30 max_order=17 bucket_order=0
Key type cifs.idmap registered
romfs: ROMFS MTD (C) 2007 Red Hat, Inc.
io scheduler mq-deadline registered
io scheduler kyber registered
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
40600000.serial: ttyUL0 at MMIO 0x40600000 (irq = 6, base_baud = 0) is a uartlite
printk: console [ttyUL0] enabled
printk: console [ttyUL0] enabled
printk: bootconsole [uartlite_a0] disabled
printk: bootconsole [uartlite_a0] disabled
brd: module loaded
spi-nor spi0.0: found mx25l25635e, expected n25q512a
spi-nor spi0.0: mx25l25635e (32768 Kbytes)
Freeing initrd memory: 9000K
4 fixed-partitions partitions found on MTD device spi0.0
Creating 4 MTD partitions on "spi0.0":
0x000000000000-0x000000400000 : "spi0-fpga"
0x000000400000-0x000000500000 : "spi0-boot"
0x000000500000-0x000000600000 : "spi0-bootenv"
0x000000600000-0x000001f00000 : "spi0-kernel"
xilinx_axienet 40c00000.ethernet: TX_CSUM 0
xilinx_axienet 40c00000.ethernet: RX_CSUM 0
xilinx_axienet 40c00000.ethernet (unnamed net_device) (uninitialized): Setting assumed host clock to 100000000
NET: Registered PF_PACKET protocol family
Key type dns_resolver registered
Key type encrypted registered
Freeing unused kernel image (initmem) memory: 180K
This architecture does not have kernel memory protection.
Run /init as init process
  with arguments:
    /init
  with environment:
    HOME=/
    TERM=linux
INIT: version 3.04 booting
Starting mdev... OK
Fri Mar  9 12:34:56 UTC 2018
random: crng init done
Configuring packages on first boot....
 (This may take several minutes. Please do not power off the machine.)
Running postinst /etc/rpm-postinsts/100-sysvinit-inittab...
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
INIT: Entering runlevel: 5
Configuring network interfaces... net eth0: Promiscuous mode disabled.
xilinx_axienet 40c00000.ethernet eth0: PHY [axienet-40c00000:01] driver [Generic PHY] (irq=POLL)
xilinx_axienet 40c00000.ethernet eth0: configuring for phy/rgmii link mode
net eth0: Promiscuous mode disabled.
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting discover
xilinx_axienet 40c00000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
udhcpc: broadcasting discover
udhcpc: no lease, forking to background
done.
Starting Dropbear SSH server: Generating 2048 bit rsa key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjkpMwsOLVbaIYNLIbyMcx4jTeuiYDRrVobPUOgnJxiqjAVHNlne4aOcD6a9LE3cfuU/y8CQy4SkRXPJltaTAfQ8PaCVOJggaC2yp2dZtKoaCCvZVA3716Ju4E2AYdSwKEGRpQF+mW45hghI/sscM7FvlefBEbpjR9eujEYJg+lYA+CDyaHxa3MWlTIiNLXHJggI7DBOT7OQrbWXt1xi4h5x/PXn27nGKDkIHw3w24KriAcC4o2+fSyzK27mqKcjMSj5B+cFWi2TW3poIJW9UUs+lmKowzEdhotMjuhsYh1JO2xNhhV+THoxS8yyg0ik42y43oqffOzaRNgnn2cgav root@linux
Fingerprint: SHA256:Dw5HQexVLJT+P+qoBvlpPKtXFjr8grR4A5MtWu6jjCU
dropbear.
Starting internet superserver: inetd.
Starting ntpd: ntpd: daemon startup monitoring timed out.
done
Starting syslogd/klogd: done
Starting tcf-agent: OK

PetaLinux 2023.1+release-S05010539 linux ttyUL0

linux login: petalinux
You are required to change your password immediately (administrator enforced).
New password: 
Retype new password: 
linux:~$

 

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


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

Добрый день! Занимался аналогичной темой по этому же видео, думал о том, чтобы докинуть в проект SD-карточку через SPI-контроллер, но линух в упор ее не видит — случаем не занимались/не планируете в эту сторону развивать проект?

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


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

On 9/17/2023 at 6:23 PM, anton_sosnitzkij said:

Добрый день! Занимался аналогичной темой по этому же видео, думал о том, чтобы докинуть в проект SD-карточку через SPI-контроллер, но линух в упор ее не видит — случаем не занимались/не планируете в эту сторону развивать проект?

Да, думаю ещё разобраться с микро SD-картой и выходом HDMI. Наскоком не получилось, надо разбираться.

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


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

1 час назад, Dimonira сказал:

Да, думаю ещё разобраться с микро SD-картой и выходом HDMI. Наскоком не получилось, надо разбираться.

По карточке с контроллерами проблема: sdhc-контроллер в вивадо платный, плюс на него драйверы написаны на C++, не компилируется в составе ядра, но можно подключить карточку по SPI стандартным ядром, попутно в настройках указав везде поддержку MMC over SPI (правда тут проблема вообще другая уже — эта настройка слетает в процессе сборки, что бы я ни делал). В результате в лучшем случае добивался того, что карточку видит, но когда начинается попытка ее смонтировать — ошибки чтения секторов — тут уже видимо глубины встроенной фифо не хватает (ставил 256 и это не хватает):

image.thumb.jpeg.9c55c7aac258c03561780e7eb2c0d9f3.jpeg

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


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

On 9/19/2023 at 10:58 PM, anton_sosnitzkij said:

По карточке с контроллерами проблема: sdhc-контроллер в вивадо платный, плюс на него драйверы написаны на C++, не компилируется в составе ядра, но можно подключить карточку по SPI стандартным ядром, попутно в настройках указав везде поддержку MMC over SPI (правда тут проблема вообще другая уже — эта настройка слетает в процессе сборки, что бы я ни делал). В результате в лучшем случае добивался того, что карточку видит, но когда начинается попытка ее смонтировать — ошибки чтения секторов — тут уже видимо глубины встроенной фифо не хватает (ставил 256 и это не хватает):

Платный контроллер?! Не может быть! 😉

Про интерфейс SPI - может попробовать тактовую частоту уменьшить?

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


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

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

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

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

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

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

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

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

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

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