<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://buyordew.srns.ru/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://buyordew.srns.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dneprov+D</id>
		<title>SRNS - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://buyordew.srns.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dneprov+D"/>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Dneprov_D"/>
		<updated>2026-04-20T16:21:45Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.20.3</generator>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux</id>
		<title>Blog:Lipa/16.05.2018 PetaLinux</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux"/>
				<updated>2025-09-04T15:43:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Petalinux.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сборка PetaLinux для кастомной железки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
&lt;br /&gt;
Vivado 2018.1 (для single-gigabit ethernet можно более ранние версии)&lt;br /&gt;
&lt;br /&gt;
Начиная с petalinux_2018.1 отсутствует devcfg. Необходимо использовать FPGA manager. Технология нами пока не освоена&lt;br /&gt;
&lt;br /&gt;
Необходима Ubuntu-16.04&lt;br /&gt;
&lt;br /&gt;
Требуется поставить ряд пакетов, полный список приведен в документе [https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug1144-petalinux-tools-reference-guide.pdf#page=9 UG1144]&lt;br /&gt;
&lt;br /&gt;
Устанавливаем PetaLinux в систему. Дистрибутив есть на [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2018-1.html Xilinx], либо у меня на компьютере. '''Ставить PetaLinux необходимо БЕЗ прав суперюзера!'''&lt;br /&gt;
&lt;br /&gt;
кидаем в /components/yocto/ sstate-rel-v2017.4.tar.gz&lt;br /&gt;
&lt;br /&gt;
Подготовка завершена&lt;br /&gt;
&lt;br /&gt;
== Правка Vivado ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки MDIO в Vivado 17.1-17.4 нужен [https://www.xilinx.com/support/answers/69132.html патч]. Ставим!&lt;br /&gt;
&lt;br /&gt;
'''Не помогло.''' Ставим 2018.1&lt;br /&gt;
&lt;br /&gt;
== Сборка ==&lt;br /&gt;
&lt;br /&gt;
Пошаговое руководство по сборке содержится в документе UG1156&lt;br /&gt;
&lt;br /&gt;
В консоли пишем source/[путь к петалинух]/settings.sh&lt;br /&gt;
&lt;br /&gt;
Выполняем шаги из UG1156 по главе 5:&lt;br /&gt;
&lt;br /&gt;
* экспортируем из Vivado .hdf (в блок дизайн File-&amp;gt;Export-&amp;gt;Export Hardware)&lt;br /&gt;
&lt;br /&gt;
* создаем проект PetaLinux&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-create --type project --template zynq --name &amp;lt;PROJECT&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* переходим в папку с текущим проектом&lt;br /&gt;
&lt;br /&gt;
* подключаем файл .hdf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config --get-hw-description=[путь к папке с файлом .hdf]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* перед сборкой системы необходимо выполнить '''все''' команды конфигурации в данной последовательности:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c rootfs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config ===&lt;br /&gt;
&lt;br /&gt;
Если хотим спользовать внешний файл device-tree включаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Subsystem AUTO Hardware Settings-&amp;gt;&lt;br /&gt;
     Advances bootable images storage settings-&amp;gt;&lt;br /&gt;
          dtb image settings-&amp;gt;&lt;br /&gt;
               image storage media&lt;br /&gt;
                    primary sd&lt;br /&gt;
               &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset если оперативной памяти менее ~256МБ&lt;br /&gt;
&lt;br /&gt;
Для клоникуса с 256МБ ставим 8'000'000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выставляем точку начала распаковки образа системы&lt;br /&gt;
&lt;br /&gt;
Выключаем копирование образа по sftp (Image Packaging Configuration -&amp;gt; Copy final images)&lt;br /&gt;
&lt;br /&gt;
Отключаем интернет-sstate (Yocto Settings -&amp;gt; Enable Network sstate feeds)&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c kernel===&lt;br /&gt;
&lt;br /&gt;
* Подключаем в ядре поддержку физика и его дров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для oryx:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*]Ethernet driver support -&amp;gt;&lt;br /&gt;
               [*] Micrel devices&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Drivers for Micrel PHYs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для clonicus:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Texas Instruments DP83867 Gigabit PHY&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c rootfs ===&lt;br /&gt;
&lt;br /&gt;
Подключаем при необходимости ethtool, gdbserver, gdb, libstdc, libgcc, glib2.0, glibc(glibc &amp;amp; ltd)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc -&amp;gt;&lt;br /&gt;
          gcc-runtime -&amp;gt;&lt;br /&gt;
               [*] libstdc ++&lt;br /&gt;
          gdb --&amp;gt;&lt;br /&gt;
               [*] gdb&lt;br /&gt;
          glib-2.0&lt;br /&gt;
               [*] glib-2.0&lt;br /&gt;
          glibc&lt;br /&gt;
               [*] glibc&lt;br /&gt;
               [*] ldd&lt;br /&gt;
     devel -&amp;gt;&lt;br /&gt;
          python -&amp;gt;&lt;br /&gt;
               python -&amp;gt;&lt;br /&gt;
                    [*] python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опционально:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
          usbutils -&amp;gt;&lt;br /&gt;
               [*] usbutils&lt;br /&gt;
     console -&amp;gt;&lt;br /&gt;
          network -&amp;gt;&lt;br /&gt;
               ethtool -&amp;gt;&lt;br /&gt;
                    [*] ethtool // необходимо для oryx! для перенастройки autonegotiation&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно еще подключать дебаг i2c&lt;br /&gt;
&lt;br /&gt;
'''Необходимо убедиться, что  образ может распаковаться в размер оперативы'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если будут проблемы, то надо будет править netboot offset&lt;br /&gt;
&lt;br /&gt;
=== device tree ===&lt;br /&gt;
&lt;br /&gt;
Если необходимо внести изменения в device tree, то смотрим конец статьи&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841676/U-Boot+Flattened+Device+Tree Интересная статья по правке devicetree из uboot]&lt;br /&gt;
&lt;br /&gt;
=== Сборка проекта ===&lt;br /&gt;
&lt;br /&gt;
* далее (сборка идет 30-60 минут)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&lt;br /&gt;
cd /images/linux/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* делаем boot.bin в папке /images/linux/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --force&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --kernel --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* записываем в загрузочную область флешки файлы boot.bin и image.ub&lt;br /&gt;
&lt;br /&gt;
== Всякое ==&lt;br /&gt;
&lt;br /&gt;
Если мало памяти как у нас - возможна ошибка image is not a fdt [https://forums.xilinx.com/t5/Embedded-Processor-System-Design/Petalinux-problem-on-custom-board-quot-image-is-not-a-fdt-quot/td-p/754892 ссылка]&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Можно вручную загрузиться из u-boot'а.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ bootm 0xA000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
$ bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно поварьировать адрес&lt;br /&gt;
&lt;br /&gt;
------------&lt;br /&gt;
&lt;br /&gt;
Проверка статуса прошитости FPGA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /sys/class/xdevcfg/xdevcfg/device/prog_done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uboot==&lt;br /&gt;
&lt;br /&gt;
Для внесения правок в загрузку линукса используем список команд '''env'''&lt;br /&gt;
&lt;br /&gt;
Просмотр текущих команд '''printenv'''&lt;br /&gt;
&lt;br /&gt;
Сброс настроек в дефолт '''env default -a'''&lt;br /&gt;
&lt;br /&gt;
Создать переменную '''env set &amp;lt;имя&amp;gt; &amp;lt;значение&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Правка переменной '''env edit &amp;lt;имя переменной&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Для каждой платы делаем следующее:&lt;br /&gt;
&lt;br /&gt;
* Берем [[Файл:uboot.env.c]]&lt;br /&gt;
&lt;br /&gt;
* Удаляем в конце имени &amp;quot;.c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Записываем на флешку рядом с образом линукса&lt;br /&gt;
&lt;br /&gt;
* Запускаем плату и прерываем autoboot&lt;br /&gt;
&lt;br /&gt;
* Пишем '''editenv ethaddr'''&lt;br /&gt;
&lt;br /&gt;
* Редактируем MAC-адрес&lt;br /&gt;
&lt;br /&gt;
* Пишем '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
* Все! можем ребутать '''reset'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохранить в файл '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
==Автозапуск приложений==&lt;br /&gt;
&lt;br /&gt;
Во-первых [https://support.xilinx.com/s/question/0D52E00006hpahDSAQ/petalinux-runnning-a-script-file-at-startup?language=en_US тыц]&lt;br /&gt;
&lt;br /&gt;
Далее пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t apps --template install -n myapp-init --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим файл /project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# This file is the myapp-init recipe.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
SUMMARY = &amp;quot;Simple myapp-init application&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;PETALINUX/apps&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
LIC_FILES_CHKSUM = &amp;quot;file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SRC_URI = &amp;quot;file://myapp-init&amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FILESEXTRAPATHS_prepend := &amp;quot;${THISDIR}/files:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit update-rc.d&lt;br /&gt;
&lt;br /&gt;
INITSCRIPT_NAME = &amp;quot;myapp-init&amp;quot;&lt;br /&gt;
INITSCRIPT_PARAMS = &amp;quot;start 99 S .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
    install -d ${D}${sysconfdir}/init.d&lt;br /&gt;
    install -m 0755 ${S}/myapp-init ${D}${sysconfdir}/init.d/myapp-init&lt;br /&gt;
}&lt;br /&gt;
FILES_${PN} += &amp;quot;${sysconfdir}/*&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим сам исполняемый скрипт project-spec/meta-user/recipes-apps/myapp-init/files/myapp-init&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Autorun script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Try run custom_init&amp;quot;&lt;br /&gt;
sh /run/media/mmcblk0p1/custom_init.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Записываем на флешку скрипт custom_init.sh с нужными командами и делаем его исполняемым&lt;br /&gt;
&lt;br /&gt;
Записываем файл interfaces&lt;br /&gt;
&lt;br /&gt;
Скачать архив: [[Файл:Init_interfaces.rar]]&lt;br /&gt;
&lt;br /&gt;
==SSH==&lt;br /&gt;
&lt;br /&gt;
Как победить сохранение ssh-ключей:&lt;br /&gt;
&lt;br /&gt;
Добавляем в init_script следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /run/media/mmcblk0p2/.ssh&lt;br /&gt;
ln -s /run/media/mmcblk0p2/.ssh/ /home/root/&lt;br /&gt;
mkdir /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
chmod 400 /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
rm -r /etc/dropbear/&lt;br /&gt;
ln -s /run/media/mmcblk0p2/dropbear/ /etc/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создается ссылка на флешку, где хранятся авторизованные пользователи&lt;br /&gt;
* Создается папка для хранения секретного ключа платы&lt;br /&gt;
* При запуске платы свежесозданный ключ заменяется тем, что лежит на флешке&lt;br /&gt;
* При первом включении платы будет создан новый ключ&lt;br /&gt;
&lt;br /&gt;
Помимо добавления указанных команд в скрипт ничего больше делать не надо&lt;br /&gt;
&lt;br /&gt;
==Daemon==&lt;br /&gt;
&lt;br /&gt;
Для настройки демона:&lt;br /&gt;
&lt;br /&gt;
* Добавляем строки в файл custom_init.sh&lt;br /&gt;
* Кидаем на загрузочный раздел флешки папку из архива [[:File:daemon.rar]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp -r /run/media/mmcblk0p1/daemon/lsb /lib/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serial port на новом линуксе ===&lt;br /&gt;
Выяснилось, что без доп. настройки, в последовательный порт (dev/ttyPS0) после каждой посылки добавляются символы CR и LF. Оказалось, что и RTKLib, и софт Листопада не хотят работать с таким окончанием пакетов.&lt;br /&gt;
&lt;br /&gt;
Выше не совсем так, скорее мысль в том, что каждый символ LF (0x0A) в наших данных меняется на символы CR LF, т.е. (0x0D0A). И тогда, в нашем битовом потоке меняется размер и содержимое и парсеры работают некорректно.&lt;br /&gt;
Старый линукс на Ориксах добавляет только LF. Для решения проблемы нужно через stty выключить в настройках порта опцию '''onlcr''' (преобразовывать перевод строки в возврат каретки и новую строку).&lt;br /&gt;
&lt;br /&gt;
Сделать это удалось пока только изменив скрипт демона receiver. Для решения проблемы заходим в /run/media/mmcblk0p1/daemon/receiver, и в начале секции receiver_start() {...} добавляем команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stty -F /dev/ttyPS0 -onlcr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==device tree==&lt;br /&gt;
&lt;br /&gt;
Для внесения изменений в device tree добавляем нужные строки в файл&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
[https://www.xilinx.com/support/answers/61117.html пример]&lt;br /&gt;
&lt;br /&gt;
Для разборки device-tree [http://xillybus.com/tutorials/device-tree-zynq-1 ссылка]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dtb -O dts -o &amp;lt;name&amp;gt;.dts &amp;lt;name&amp;gt;.dtb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для сборки device-tree&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dts -O dtb -o &amp;lt;name&amp;gt;.dtb &amp;lt;name&amp;gt;.dts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Модификация device-tree ==&lt;br /&gt;
&lt;br /&gt;
После долгих мучений получилось поднять DP83867 только после добавления модификатора в файл [https://forums.xilinx.com/t5/Embedded-Linux/ZC702-Like-Board-with-DP83867CR-Ethernet-Petalinux-2017-4/td-p/831873 волшебная статья]&lt;br /&gt;
&lt;br /&gt;
[https://www.kernel.org/doc/Documentation/devicetree/bindings/net/ti%2Cdp83867.txt описание параметров]&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
=== Single Kit-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth1(с mdio) и выключен eth0.&lt;br /&gt;
&lt;br /&gt;
'''Так работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок =  Развернутый .dtb:}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dts-v1/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
	#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	compatible = &amp;quot;xlnx,zynq-7000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	cpus {&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
		cpu@0 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
			clock-latency = &amp;lt;0x3e8&amp;gt;;&lt;br /&gt;
			cpu0-supply = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			operating-points = &amp;lt;0xa2c2a 0xf4240 0x51615 0xf4240&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cpu@1 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fpga-full {&lt;br /&gt;
		compatible = &amp;quot;fpga-region&amp;quot;;&lt;br /&gt;
		fpga-mgr = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	pmu@f8891000 {&lt;br /&gt;
		compatible = &amp;quot;arm,cortex-a9-pmu&amp;quot;;&lt;br /&gt;
		interrupts = &amp;lt;0x0 0x5 0x4 0x0 0x6 0x4&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		reg = &amp;lt;0xf8891000 0x1000 0xf8893000 0x1000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fixedregulator {&lt;br /&gt;
		compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
		regulator-name = &amp;quot;VCCPINT&amp;quot;;&lt;br /&gt;
		regulator-min-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-max-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-boot-on;&lt;br /&gt;
		regulator-always-on;&lt;br /&gt;
		linux,phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	amba {&lt;br /&gt;
		u-boot,dm-pre-reloc;&lt;br /&gt;
		compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
&lt;br /&gt;
		adc@f8007100 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-xadc-1.00.a&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8007100 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x7 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0008000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x13 0x1 0x24&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0008000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1c 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0009000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x14 0x1 0x25&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0009000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x33 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		gpio@e000a000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-gpio-1.0&amp;quot;;&lt;br /&gt;
			#gpio-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2a&amp;gt;;&lt;br /&gt;
			gpio-controller;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x14 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000a000 0x1000&amp;gt;;&lt;br /&gt;
			emio-gpio-width = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			gpio-mask-high = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			gpio-mask-low = &amp;lt;0x5600&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0004000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0005000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		interrupt-controller@f8f01000 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-gic&amp;quot;;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			reg = &amp;lt;0xf8f01000 0x1000 0xf8f00100 0x100&amp;gt;;&lt;br /&gt;
			num_cpus = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			num_interrupts = &amp;lt;0x60&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cache-controller@f8f02000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl310-cache&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f02000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2 0x4&amp;gt;;&lt;br /&gt;
			arm,data-latency = &amp;lt;0x3 0x2 0x2&amp;gt;;&lt;br /&gt;
			arm,tag-latency = &amp;lt;0x2 0x2 0x2&amp;gt;;&lt;br /&gt;
			cache-unified;&lt;br /&gt;
			cache-level = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@f8006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ddrc-a05&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8006000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ocmc@f800c000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ocmc-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x3 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf800c000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0000000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x17 0x1 0x28&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0000000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1b 0x4&amp;gt;;&lt;br /&gt;
			device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
			port-number = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0001000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x18 0x1 0x29&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0001000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x32 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0006000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1a 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x19 0x1 0x22&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0007000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x31 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1a 0x1 0x23&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e000d000 {&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xa 0x1 0x2b&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-qspi-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x13 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000d000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@e000e000 {&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;memclk&amp;quot;, &amp;quot;aclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xb 0x1 0x2c&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,pl353-smc-r2p1&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x12 0x4&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			reg = &amp;lt;0xe000e000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			flash@e1000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;arm,pl353-nand-r2p1&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe1000000 0x1000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			flash@e2000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;cfi-flash&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe2000000 0x2000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000b000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000b000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x16 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1e 0x1 0x1e 0x1 0xd&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000c000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000c000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2d 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1f 0x1 0x1f 0x1 0xe&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
			xlnx,ptp-enet-clock = &amp;lt;0x69f6bcb&amp;gt;;&lt;br /&gt;
			local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
			phy-handle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
			xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			mdio {&lt;br /&gt;
				status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
				phy@12 {&lt;br /&gt;
					compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
					device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
					reg = &amp;lt;0xc&amp;gt;;&lt;br /&gt;
					ti,rx-internal-delay = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
					ti,tx-internal-delay = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
					ti,fifo-depth = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
					ti,min-output-impedance;&lt;br /&gt;
					ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
					status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
					linux,phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
					phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
				};&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0100000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x15 0x1 0x20&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x18 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0100000 0x1000&amp;gt;;&lt;br /&gt;
			xlnx,has-cd = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			xlnx,has-power = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			xlnx,has-wp = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0101000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x16 0x1 0x21&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2f 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0101000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		slcr@f8000000 {&lt;br /&gt;
			u-boot,dm-pre-reloc;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-slcr&amp;quot;, &amp;quot;syscon&amp;quot;, &amp;quot;simple-mfd&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8000000 0x1000&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			linux,phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			clkc@100 {&lt;br /&gt;
				u-boot,dm-pre-reloc;&lt;br /&gt;
				#clock-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				compatible = &amp;quot;xlnx,ps7-clkc&amp;quot;;&lt;br /&gt;
				fclk-enable = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
				clock-output-names = &amp;quot;armpll&amp;quot;, &amp;quot;ddrpll&amp;quot;, &amp;quot;iopll&amp;quot;, &amp;quot;cpu_6or4x&amp;quot;, &amp;quot;cpu_3or2x&amp;quot;, &amp;quot;cpu_2x&amp;quot;, &amp;quot;cpu_1x&amp;quot;, &amp;quot;ddr2x&amp;quot;, &amp;quot;ddr3x&amp;quot;, &amp;quot;dci&amp;quot;, &amp;quot;lqspi&amp;quot;, &amp;quot;smc&amp;quot;, &amp;quot;pcap&amp;quot;, &amp;quot;gem0&amp;quot;, &amp;quot;gem1&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;, &amp;quot;can0&amp;quot;, &amp;quot;can1&amp;quot;, &amp;quot;sdio0&amp;quot;, &amp;quot;sdio1&amp;quot;, &amp;quot;uart0&amp;quot;, &amp;quot;uart1&amp;quot;, &amp;quot;spi0&amp;quot;, &amp;quot;spi1&amp;quot;, &amp;quot;dma&amp;quot;, &amp;quot;usb0_aper&amp;quot;, &amp;quot;usb1_aper&amp;quot;, &amp;quot;gem0_aper&amp;quot;, &amp;quot;gem1_aper&amp;quot;, &amp;quot;sdio0_aper&amp;quot;, &amp;quot;sdio1_aper&amp;quot;, &amp;quot;spi0_aper&amp;quot;, &amp;quot;spi1_aper&amp;quot;, &amp;quot;can0_aper&amp;quot;, &amp;quot;can1_aper&amp;quot;, &amp;quot;i2c0_aper&amp;quot;, &amp;quot;i2c1_aper&amp;quot;, &amp;quot;uart0_aper&amp;quot;, &amp;quot;uart1_aper&amp;quot;, &amp;quot;gpio_aper&amp;quot;, &amp;quot;lqspi_aper&amp;quot;, &amp;quot;smc_aper&amp;quot;, &amp;quot;swdt&amp;quot;, &amp;quot;dbg_trc&amp;quot;, &amp;quot;dbg_apb&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x100 0x100&amp;gt;;&lt;br /&gt;
				ps-clk-frequency = &amp;lt;0x1fca055&amp;gt;;&lt;br /&gt;
				linux,phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			rstc@200 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,zynq-reset&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x200 0x48&amp;gt;;&lt;br /&gt;
				#reset-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			pinctrl@700 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,pinctrl-zynq&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x700 0x200&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		dmac@f8003000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl330&amp;quot;, &amp;quot;arm,primecell&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8003000 0x1000&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupt-names = &amp;quot;abort&amp;quot;, &amp;quot;dma0&amp;quot;, &amp;quot;dma1&amp;quot;, &amp;quot;dma2&amp;quot;, &amp;quot;dma3&amp;quot;, &amp;quot;dma4&amp;quot;, &amp;quot;dma5&amp;quot;, &amp;quot;dma6&amp;quot;, &amp;quot;dma7&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xd 0x4 0x0 0xe 0x4 0x0 0xf 0x4 0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x28 0x4 0x0 0x29 0x4 0x0 0x2a 0x4 0x0 0x2b 0x4&amp;gt;;&lt;br /&gt;
			#dma-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#dma-channels = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
			#dma-requests = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1b&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;apb_pclk&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		devcfg@f8007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-devcfg-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x8 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8007000 0x100&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc 0x1 0xf 0x1 0x10 0x1 0x11 0x1 0x12&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;;&lt;br /&gt;
			syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		efuse@f800d000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-efuse&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf800d000 0x20&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00200 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-global-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00200 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xb 0x301&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8001000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xa 0x4 0x0 0xb 0x4 0x0 0xc 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8001000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8002000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x25 0x4 0x0 0x26 0x4 0x0 0x27 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8002000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00600 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xd 0x301&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-twd-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00600 0x20&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0002000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1c&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x15 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0003000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1d&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2c 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0003000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		watchdog@f8005000 {&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2d&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,wdt-r1p2&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x9 0x1&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8005000 0x1000&amp;gt;;&lt;br /&gt;
			timeout-sec = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	chosen {&lt;br /&gt;
		bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk&amp;quot;;&lt;br /&gt;
		stdout-path = &amp;quot;serial0:115200n8&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	aliases {&lt;br /&gt;
		ethernet0 = &amp;quot;/amba/ethernet@e000c000&amp;quot;;&lt;br /&gt;
		serial0 = &amp;quot;/amba/serial@e0000000&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	memory {&lt;br /&gt;
		device_type = &amp;quot;memory&amp;quot;;&lt;br /&gt;
		reg = &amp;lt;0x0 0x10000000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
=== Single On-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
&lt;br /&gt;
'''Работает гигабит через type-c! Работает hot plug. Успех.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dual eth ===&lt;br /&gt;
&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Dual-phys-on-MDIO-EMIO/td-p/737716 интересная статья о дуал eth]&lt;br /&gt;
&lt;br /&gt;
Попытка поднять два физика. '''Пока не работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 00];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 01];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oryx ===&lt;br /&gt;
&lt;br /&gt;
Итоговый system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Меняем номера uart, чтобы системным был ttyPS1, а пользовательским ttyPS0&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
        serial0 = &amp;amp;uart0;&lt;br /&gt;
        serial1 = &amp;amp;uart1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS1,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
            stdout-path = &amp;quot;serial1:115200n8&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
            compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
            interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
            interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart0{&lt;br /&gt;
    port-number = &amp;lt;0&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart1{&lt;br /&gt;
    port-number = &amp;lt;1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
Pullup пока что все включены&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Xilinx/u-boot-xlnx/blob/master/doc/device-tree-bindings/net/micrel-ksz90x1.txt статья в помощь]&lt;br /&gt;
&lt;br /&gt;
'''Работает'''&lt;br /&gt;
&lt;br /&gt;
На новых платах(с отпаянными линиями линиями eth):&lt;br /&gt;
* на полноценных проводах с ходу&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
На старых платах:&lt;br /&gt;
&lt;br /&gt;
* на полноценных проводах только если выставить 100 в ethtool&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
Везде работает так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!&lt;br /&gt;
&lt;br /&gt;
Можно в custom_itit.sh прописать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifdown eth0&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
ifup eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В принципе, работает сеть на новой плате с нормальным кабелем без модификации devicetree. Остальные комбинации плат-кабелей надо проверять&lt;br /&gt;
&lt;br /&gt;
== i2c ==&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages -&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для поиска устройств можно написать&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2cdetect -y -r 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842160/Cadence+I2C+Driver Статья] по i2c и RTC&lt;br /&gt;
&lt;br /&gt;
== QSPI Flash ==&lt;br /&gt;
&lt;br /&gt;
для работы по флешь памяти как в ките (S25FL128S) - оставляем в дев.три родные compatible = &amp;quot;n25q512a&amp;quot;,&amp;quot;micron,m25p80&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== SWDT System Watchdog Timer==&lt;br /&gt;
&lt;br /&gt;
* Модифицируем Uenv для настройки wawtchdog через uboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создаем скрипт для сброса watchdog:&lt;br /&gt;
&lt;br /&gt;
swdt_rst.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch -n 5 'devmem 0xf8005008 32 0x1999' &amp;amp;&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Добавляем вызов скрипта в автозагрузку&lt;br /&gt;
&lt;br /&gt;
PS Посмотреть можно в проекте bin/Clonicus, коммит ffc437e435d3b5c207bb1186a9561fd06a46d89f&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
* Включаем в ядро подходящий драйвер&lt;br /&gt;
&lt;br /&gt;
* Модифицируем device-tree&lt;br /&gt;
&lt;br /&gt;
Вставляем в девайс три:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    i2c0: i2c@e0004000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
        rtc@51 {&lt;br /&gt;
                compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
                reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
    i2c1: i2c@e0005000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет выглядеть так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2c@e0004000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    rtc@51 {&lt;br /&gt;
        compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
        reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
i2c@e0005000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если готового драйвера нет:&lt;br /&gt;
&lt;br /&gt;
UG1144 pg.54&lt;br /&gt;
&lt;br /&gt;
Создаем новый модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t modules --name &amp;lt;name_module&amp;gt; --enable&lt;br /&gt;
petalinux-create -t modules --name rtc-pcf85363 --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим исходный код в project-spec/meta-user/recipes-modules/rtc-pcf85363/files&lt;br /&gt;
&lt;br /&gt;
Исправленный драйвер лежит в git Clonicus\linux\&lt;br /&gt;
&lt;br /&gt;
Для удаления модуля:&lt;br /&gt;
&lt;br /&gt;
* удаляем папку из project-spec/meta-user/recipes-modules&lt;br /&gt;
&lt;br /&gt;
* В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку&lt;br /&gt;
&lt;br /&gt;
* переоткрыть petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Пробуем собрать модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c &amp;lt;name_module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И перепаковываем BOOT.bin&lt;br /&gt;
&lt;br /&gt;
Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)&lt;br /&gt;
&lt;br /&gt;
просмотр модулей&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
загрузить драйвер можно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/4.9.0-xilinx-v2017.4/extra/rtc-pcf85363.ko&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe rtc-pcf85363&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''&lt;br /&gt;
&lt;br /&gt;
Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC&lt;br /&gt;
&lt;br /&gt;
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -r -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Синхронизация rtc по системному времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим custom_init.sh для изменения default-rtc на наше устройство&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /dev/rtc&lt;br /&gt;
ln -s /dev/rtc2 /dev/rtc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установка системного времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
date --set &amp;quot;2013-7-31 09:30&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись системного времени в RTC&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись времени RTC в системное время&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -s&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить время с интеренета&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rdate -s &amp;lt;IP address of time server&amp;gt;&lt;br /&gt;
rdate -s 132.163.96.5 (example)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При перезагрузке &amp;quot;reboot&amp;quot; система автоматически запишет системное время в RTC&lt;br /&gt;
&lt;br /&gt;
== FPGA CONFIG from Uboot ==&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы прошить PL из uboot используем команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fpga loadb 0 &amp;lt;ddr_file_addr&amp;gt; &amp;lt;file_size&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо скриптами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit // читаем файл в ddr&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000 // прошиваем PL&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_loadipaddr // вызов самих скриптов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
0x10_0000 - начальный адрес ddr&lt;br /&gt;
&lt;br /&gt;
0x1_400_000 - размер в байтах для 20МБайт - указываем размер битника с запасом. Теоретически может так не работать, но работает&lt;br /&gt;
&lt;br /&gt;
== ETH over TTY==&lt;br /&gt;
&lt;br /&gt;
В ядре включаем: slip, Universal TUN/TAP&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем net-tools&lt;br /&gt;
&lt;br /&gt;
Включаем iptables для перемршрутизации между подсетями и для него:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[*] Networking support  ---&amp;gt;                                          [CONFIG_NET]&lt;br /&gt;
      Networking Options  ---&amp;gt;&lt;br /&gt;
        [*] Network packet filtering framework (Netfilter) ---&amp;gt;       [CONFIG_NETFILTER]&lt;br /&gt;
          [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]&lt;br /&gt;
          Core Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter connection tracking support               [CONFIG_NF_CONNTRACK]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]&lt;br /&gt;
          IP: Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PC1:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.1/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PC2:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.2/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
== UART_PL ==&lt;br /&gt;
&lt;br /&gt;
Включаем в настройках ядра поддержку uart_lite, выставляем правильное максимальное число уартов&lt;br /&gt;
&lt;br /&gt;
Модифицируем system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Обращаем внимание на нумерацию serial, axi_uartlite, она должна не повторяться. То же самое с interrupts &lt;br /&gt;
Указываем верный физический адрес на шине и диапазон адресов в &amp;lt;reg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
            serial2 = &amp;amp;axi_uartlite_0;&lt;br /&gt;
            serial3 = &amp;amp;axi_uartlite_1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
/ {&lt;br /&gt;
    amba_pl {&lt;br /&gt;
        #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
        ranges;&lt;br /&gt;
        &lt;br /&gt;
        axi_uartlite_0: serial@80000008 {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 30 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;3&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x80000008 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
        axi_uartlite_1: serial@8000001C {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 31 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;4&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x8000001C 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ПЛИС не прошита - будет кернел паник&lt;br /&gt;
&lt;br /&gt;
== IRQ ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки irq добавляем в device-tree&lt;br /&gt;
&lt;br /&gt;
'''Важно - мы перетираем bootargs!'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
                    compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
                    interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                    interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
                    reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
&lt;br /&gt;
Запустил на Z706&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver во-первых]&lt;br /&gt;
[http://zedboard.org/content/using-petalinux-configure-zedboard%EF%BC%8C-usb-otg-can-not-work во-вторых]&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2016-3-zynq-7010-USB-not-working/td-p/737696 в-третьих]&lt;br /&gt;
&lt;br /&gt;
В дефолтных настройках ядра petalinux_2018.1 все было включено&lt;br /&gt;
&lt;br /&gt;
включаем ресет на MIO7 pullup disabled&lt;br /&gt;
&lt;br /&gt;
все ноги интерфейса ulpi pullup disabled&lt;br /&gt;
&lt;br /&gt;
Содержимое system-user.dtsi&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
	/{&lt;br /&gt;
&lt;br /&gt;
    usb_phy0:phy0 {&lt;br /&gt;
&lt;br /&gt;
        compatible=&amp;quot;ulpi-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        #phy-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       view-port=&amp;lt;0x170&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       drv-vbus;&lt;br /&gt;
&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;amp;usb0 {&lt;br /&gt;
&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        dr_mode = &amp;quot;host&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        usb-phy = &amp;lt;&amp;amp;usb_phy0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB-ETHERNET ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     USB support -&amp;gt;&lt;br /&gt;
          [*] USB Modem (CDC ACM)&lt;br /&gt;
          USB Gadget Support -&amp;gt;&lt;br /&gt;
               [*] Ethernet Control Model (all)&lt;br /&gt;
               [*] RNDIS&lt;br /&gt;
               [*] Ethernet Emulation Model&lt;br /&gt;
               [*] CDC Composite Device (Ethernet and ACM)&lt;br /&gt;
               [*] USB Gadget Drivers (Ethernet gadget...)&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          USB Network Adapters -&amp;gt;&lt;br /&gt;
               [*] Realtek RTL8152/RTL8153&lt;br /&gt;
               [*] Multi-purpose USB Networking Framework&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi Dongle ==&lt;br /&gt;
&lt;br /&gt;
[https://forum.trenz-electronic.de/index.php?topic=747.0 раз]&lt;br /&gt;
[https://github.com/jinchenglee/zybo_linux_setup_doc два]&lt;br /&gt;
[http://billauer.co.il/blog/2014/06/linux-realtek-hostapd/ три]&lt;br /&gt;
&lt;br /&gt;
Творим:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Networking support -&amp;gt;&lt;br /&gt;
     Wireless -&amp;gt;&lt;br /&gt;
          [*] cfg80211&lt;br /&gt;
          [*] Generic IEEE 802.11 ... (mac80211)&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          Wireless LAN -&amp;gt;&lt;br /&gt;
               Realtek rtlwifi family of devices -&amp;gt;&lt;br /&gt;
                    [*] Realtek ..../RTL8188CE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8188EE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter&lt;br /&gt;
     Staging drivers -&amp;gt;&lt;br /&gt;
          [*] Realtek RTL8188EU wireless LAN MIC driver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rootfs&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem packages -&amp;gt;&lt;br /&gt;
     network -&amp;gt;&lt;br /&gt;
          wpa-supplicant -&amp;gt;&lt;br /&gt;
               [*] wpa-supplicant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lwfinger/rtl8188eu/blob/master/rtl8188eufw.bin качаем файл]&lt;br /&gt;
&lt;br /&gt;
Модификаци инит-скрипта&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /run/media/mmcblk0p1/wpa_supplicant.conf /etc/&lt;br /&gt;
&lt;br /&gt;
mkdir /lib/firmware/&lt;br /&gt;
mkdir /lib/firmware/rtlwifi/&lt;br /&gt;
cp /run/media/mmcblk0p1/rtl8188eufw.bin /lib/firmware/rtlwifi/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi ESP ==&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+SDIO+Wifi Xilinx SDIP WiFi]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/sdio-wifi-driver-ar6103-problem Zedboard раз]&lt;br /&gt;
&lt;br /&gt;
[https://stackoverflow.com/questions/32129689/how-to-bind-sdio1-with-wi-fi-linux два]&lt;br /&gt;
&lt;br /&gt;
[http://picozed.org/content/steps-get-wlink8-working-using-petalinux-picozed picozed три]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/adding-wi-fi-and-bluetooth-connectivity-zedboard-using-murata-1dx-pmod zedboard четыре]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Оживление 2-го ядра ==&lt;br /&gt;
&lt;br /&gt;
* Находим /home/ivan/clonicus_1.2.3/build/tmp/work-shared/plnx_arm/kernel-source/arch/arm/mach-zynq/efuse.c&lt;br /&gt;
* В функции zynq_efuse_cpu_state делаем сразу ретурн тру&lt;br /&gt;
* Че-нибудь меняем в настройках ядра для пересборки&lt;br /&gt;
* Выполняем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c kernel -x compile -f&lt;br /&gt;
petalinux-build -c kernel -x deploy -f&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Забираем image.ub&lt;br /&gt;
&lt;br /&gt;
'''ИЛИ'''&lt;br /&gt;
&lt;br /&gt;
Правим device-tree, заменяем адрес efuse на 0xf800cff0&lt;br /&gt;
&lt;br /&gt;
== webserver == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/emlid/ReachView Репозиторий emlid ReachView] (bnd на py/Flask, fnd на html/Ajax/js/Bootstrap)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Backend:'''&lt;br /&gt;
&lt;br /&gt;
* [http://svenand.blogdrives.com/archive/195.html#.XPTYt4gzaUk Источник по busybox-httpd]&lt;br /&gt;
&lt;br /&gt;
* [https://www.afternerd.com/blog/python-http-server/ Гайд по python server]&lt;br /&gt;
&lt;br /&gt;
* [https://ru.wikibooks.org/wiki/Flask Викиучебник по Flask]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/193242/ ХаброГайд по python/Flask]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frontend:'''&lt;br /&gt;
&lt;br /&gt;
* [https://unminify.com/ unminify CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://getbootstrap.com/docs/4.3/getting-started/introduction/ Bootstrap EN getting started]&lt;br /&gt;
&lt;br /&gt;
* [https://bootstrap-4.ru/ Bootstrap RU]&lt;br /&gt;
&lt;br /&gt;
* [http://htmlbook.ru/samhtml/tekst/spetssimvoly Справочник по операторам и тегам HTML/CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/howto/default.asp Сборник шаблонов CSS W3schools]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/w3css/w3css_tabulators.asp Анимированный сайдбар/табы]&lt;br /&gt;
&lt;br /&gt;
* [https://css-tricks.com/ CSS Tricks]&lt;br /&gt;
&lt;br /&gt;
* [https://www.cssmatic.com/ Онлайн тени/границы/градиент блоков]&lt;br /&gt;
&lt;br /&gt;
* [https://internetingishard.com/html-and-css/semantic-html/ Semantic HTML grid layout]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/202408/ Хаброгайд(ч1) по верстке]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/211032/ ХаброГайд(ч2) по Bootstrap]&lt;br /&gt;
&lt;br /&gt;
* [https://fontawesome.com/icons?d=gallery Fontawesome ICONS open lib]&lt;br /&gt;
&lt;br /&gt;
:* [https://htmlacademy.ru/courses/43/run/1 Нормальный онлайн HTML/CSS/JS editor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== busybox httpd ===&lt;br /&gt;
В petalinux многие пакеты скукожены до их минимальных вариантов и встроены в общий пакет busybox. &lt;br /&gt;
В busybox есть также и вебсервер busybox-httpd.&lt;br /&gt;
Для использования нужно на этапе настройки файловой системы его включить:&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Конфиг: &lt;br /&gt;
 base -&amp;gt;&lt;br /&gt;
     busybox -&amp;gt;&lt;br /&gt;
          [*] busybox&lt;br /&gt;
          [*] busybox-httpd&lt;br /&gt;
          [ ] busybox-hwclock&lt;br /&gt;
          [*] busybox-inetd&lt;br /&gt;
          [*] busybox-mdev&lt;br /&gt;
          [ ] busybox-syslog &lt;br /&gt;
          [*] busybox-udhcpc &lt;br /&gt;
          [ ] busybox-udhcpd &lt;br /&gt;
&lt;br /&gt;
Сам httpd будет в '''/usr/sbin'''.&lt;br /&gt;
Рабочая папка по умолчанию в '''/srv/www/'''. Если в нее кидать файлы, то именно из нее будет отображаться контент в браузере. Папку можно изменить, перезапустив httpd с ключом -h &amp;lt;workdir&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Порт по умолчанию 80. Работает, как демон в /etc/init.d/, вкл-выкл оттуда же.&lt;br /&gt;
&lt;br /&gt;
Если положить в /srv/www/ файл index.html с неким кодом, то в браузере отобразится вебморда. Картинки работают по ссылкам.&lt;br /&gt;
&lt;br /&gt;
'''index.html'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;clonicus'112 webserver&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Hello, World!&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;h4&amp;gt;Web server is now up!&amp;lt;/h4&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;https://i.redd.it/oagz5eobkkt11.jpg&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;http://www.srns.ru&amp;quot;&amp;gt;For more information see SRNS.ru&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== python в petalinux ===&lt;br /&gt;
В petalinux 2017.4 есть 2 питона - 2.7 и 3.5.&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
'''python2.7'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     devel-&amp;gt;&lt;br /&gt;
         python-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''python3.5'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc-&amp;gt;&lt;br /&gt;
         python3-*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Модуль runpy.py для запуска команд вида 'python -m &amp;lt;module&amp;gt;' находится в python -&amp;gt; python-misc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimpleHTTPServer.py ===&lt;br /&gt;
Для первого теста поднимем встроенный в python2.7 минисервер SimpleHTTPServer.py в /usr/lib/python2.7. &lt;br /&gt;
&lt;br /&gt;
Для его запуска напишем скрипт&lt;br /&gt;
&lt;br /&gt;
'''webserver.py''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import SimpleHTTPServer &lt;br /&gt;
import SocketServer &lt;br /&gt;
 &lt;br /&gt;
PORT = 80 &lt;br /&gt;
 &lt;br /&gt;
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler &lt;br /&gt;
 &lt;br /&gt;
httpd = SocketServer.TCPServer((&amp;quot;&amp;quot;, PORT), Handler) &lt;br /&gt;
 &lt;br /&gt;
print &amp;quot;serving at port&amp;quot;, PORT &lt;br /&gt;
httpd.serve_forever()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $ python webserver.py &lt;br /&gt;
&lt;br /&gt;
При наличии в папке со скриптом файла index.html сервер поднимется автоматически.&lt;br /&gt;
&lt;br /&gt;
=== Добавление слоев в сборку ===&lt;br /&gt;
&lt;br /&gt;
[https://www.srns.ru/wiki/Blog:DneprovD/18.07.2019_Yocto_layers Переехало в статью]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:Oryx]]&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2018-05-16 10:06:30 +0300 | Lipa }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/05.10.2011_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BD%D0%B8%D0%BA%D0%B0</id>
		<title>Blog:Boldenkov/05.10.2011 Структура программного приёмника</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/05.10.2011_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BD%D0%B8%D0%BA%D0%B0"/>
				<updated>2025-09-04T11:22:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ]&amp;gt;Структура приёмника SR31 для разработчиков&lt;br /&gt;
[[Файл:SR_struct.png|thumb|Взаимодействие между процессами]]&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
[[Файл:20111003 SR31 Logo.jpg|100px|thumb|Logo SR31]]&lt;br /&gt;
&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
Данный материал написан с целью знакомства с организацией и модульной структурной программного приёника.&lt;br /&gt;
&lt;br /&gt;
== Структура каталога исходников ==&lt;br /&gt;
В каталоге исходников есть несколько подкаталогов, каждый из которых отвечает за определённый блок приёмника.&lt;br /&gt;
* Makefile - правила сборки проекта для программы make;&lt;br /&gt;
* main.c - файл, с которого начинается исполнение программы;&lt;br /&gt;
* Common - здесь хранятся заголовочные файлы *.h;&lt;br /&gt;
* RFint - каталог для программы-интерфейса с платой ввода данных;&lt;br /&gt;
* Correlator - здесь расположены исходники программного коррелятора;&lt;br /&gt;
* Detector - блок быстрого поиска сигнала;&lt;br /&gt;
* Tracker - следящие системы (ФАП, ССЗ, ЧАП) и допоиск;&lt;br /&gt;
* Solution - блок решения навигационной задачи;&lt;br /&gt;
* Interf - блок интерфейса (вывод данных на экран).&lt;br /&gt;
&lt;br /&gt;
Кроме того, есть вспомогательные каталоги:&lt;br /&gt;
* lib - библиотеки, используемые в проекте (например, FFTW);&lt;br /&gt;
* Downloader - программа, записывающая выборку сигнала в файл;&lt;br /&gt;
* Simulator - программа-симулятор, формирующая тестовую выборку данных;&lt;br /&gt;
* OffSolver - программа, решающая навигационную задачу по записям приёмника в логах;&lt;br /&gt;
* Convertor - программа преобразования бинарных форматов файлов.&lt;br /&gt;
&lt;br /&gt;
== Описание отдельных частей приёмника ==&lt;br /&gt;
&lt;br /&gt;
=== Заголовочные файлы (каталог Common) ===&lt;br /&gt;
В данном каталоге расположены заголовочные файлы, общие для разных блоков приёмника. Кроме того, здесь собраны настройки приёмника.&lt;br /&gt;
* global.h - главный заголовочный файл, здесь описаны структуры хранения данных о каналах;&lt;br /&gt;
* RF_desc.h - описание частотного плана (частота дискретизации, промежуточная частота и прочее);&lt;br /&gt;
* gps_desc.h - параметры сигнала GPS C/A;&lt;br /&gt;
* ph_consts.h - разные константы (скорость света, pi и прочее);&lt;br /&gt;
* cputick.h - макросы для точного измерения времени исполнения.&lt;br /&gt;
&lt;br /&gt;
=== Коррелятор (Correlator) ===&lt;br /&gt;
Коррелятор - наиболее вычислительно сложная и ответственная часть программного приёмника. Достаточно большие усилия потрачены были для того, чтобы блок коррелятора успевал исполнятся с необходимой скоростью. Коррелятор должен успевать за темпом поступления входных данных - это блок реального времени. Небольшие изменения в данном блоке могут привести к его неработоспособности - к этому вопросу надо относиться серьёзно.&lt;br /&gt;
&lt;br /&gt;
Интерфейс с коррелятором описан в файле correlator.h. Предполагается, что управление коррелятором осуществляется не непостредственно, а с использованием макросов, описанных в данном файле. Например, для установки номинальной частоты опорного сигнала можно использовать макрос PHASEAdd(w):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Parm-&amp;gt;corr-&amp;gt;PhaseAdd = PHASEAdd( (wi + Parm-&amp;gt;xf[1] ));	     &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Данный фрагмент кода, позаимствованный из tracker.c, записывает в коррелятор код частоты. Код частоты рассчитывается макросом PHASEAdd(w), в качестве параметра которому передаётся сумма номинальной промежуточной частоты wi и текущая оценка смещения частоты Parm-&amp;gt;xf[1]. Частоты заданы в рад/с.&lt;br /&gt;
&lt;br /&gt;
Использовать данные макросы необходимо, т.к. в случае изменения коррелятора достаточно будет переписать только макросы, а остальные блоки приёмника при этом не будут затронуты.&lt;br /&gt;
&lt;br /&gt;
=== Блок быстрого поиска (Detector) ===&lt;br /&gt;
В программном приёмнике используется блок быстрого поиска, основанный на БПФ. Возможно использование библиотеки FFTW (она работает быстрее), либо собственной реализацией БПФ (она работает медленнее).&lt;br /&gt;
&lt;br /&gt;
Блок быстрого поиска - зарегистрированная программа, свидетельство [[Программа:2010_Программный_блок_быстрого_поиска_навигационного_сигнала_GPS_C/A|№ 2010613888]].&lt;br /&gt;
&lt;br /&gt;
Структура блока быстрого поиска рассчитана на поиск только сигналов с периодичной ПСП, таких, как GPS C/A. На данный момент блок расчитан на поиск только сигнала GPS C/A, но возможна его переделка и на другие виды сигналов.&lt;br /&gt;
&lt;br /&gt;
Блок поиска имеет свой отдельный процесс detector, исполняясь параллельно с другими блоками приёмника. Для того, чтобы искать сигнал, нужно указать режим поиска для требуемого канала:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
      Chnl[iS].mode = Searching;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
После обнаружения сигнала блок поиска автоматически передаст сигнал на слежение.&lt;br /&gt;
&lt;br /&gt;
=== Блок интерфейса с платой ввода данных (RFint) ===&lt;br /&gt;
Существует несколько вариантов данного блока в зависимости от источника данных:&lt;br /&gt;
* usb_reader.c - ввод данных по USB;&lt;br /&gt;
* file_reader.c - ввод выборки сигнала из файла.&lt;br /&gt;
Раньше был ещё plx_reader.c - ввод данных по шине PCI, но от него отказались в пользу USB.&lt;br /&gt;
&lt;br /&gt;
В любом случае каждый из этих блоков создаёт процесс reader. Данный процесс считывает сигнал блоками. Объём блока данных определяется макросом BYTES_PER_BLOCK и подбирается под оптимизацию производительности приёмника. На данный момент объём блока данных соответствует входной выборке длиной 22~мс.&lt;br /&gt;
&lt;br /&gt;
После получения новой порции данных процесс reader начинает записывать данные в другой блок (их всего два), а накопленный блок передаёт другим процессам для обработки - коррелятору и блоку поиска.&lt;br /&gt;
&lt;br /&gt;
ВАЖНО!!! Для работы с платой ввода данных USB нужен модуль ядра FrontEnd.ko. Продробное описание на соответствующей [[Blog:Boldenkov/08.10.2011_Исходники_модуля_ядра_для_работы_с_платой_USB_выложены_в_SVN|странице]]&lt;br /&gt;
&lt;br /&gt;
== Синхронизация между процессами ==&lt;br /&gt;
В программном приёмнике активно используется многозадачность, а точнее, многопотоковость. Такие блоки приёмника, как коррелятор, блок поиска, блок сбора данных исполняются в отдельных процессах. Для корректной работы между данными процессами должна быть синхронизация по времени. Синхронизация осуществляется с помощью семафоров.&lt;br /&gt;
&lt;br /&gt;
[[Файл:SR struct.png|thumb|500px|Взаимодействие между процессами]]&lt;br /&gt;
&lt;br /&gt;
Семафор - это некий сигнал, который может быть послан одним процессом (с помощью функции sem_post) другому процессу (который принимает семафор с помощью функции sem_wait). Работает это следующим образом. Если в процессе при исполнении встречается функция sem_wait, то исполнение этого процесса останавливается и он не занимает процессорное время. Когда другой процесс вызывает функцию sem_post (для соответствующего семафора), исполнение первого процесса возобновляется после функции sem_wait.&lt;br /&gt;
&lt;br /&gt;
В приёмнике блок сбора данных при получении очередной порции посылает два семафора:&lt;br /&gt;
* rf2correlator_sem - семафор для коррелятора;&lt;br /&gt;
* rf2detector_sem - семафор для блока поиска.&lt;br /&gt;
&lt;br /&gt;
Коррелятор при получении очередной порции данных начинает её обрабатывать. Напоминаю, что длина порции данных составляет 22 мс. Темп работы коррелятора сделан несколько меньше 1 мс, таким образом, выборку данных коррелятор обрабатывает более, чем за 22 шага. После отработки очередного интервала работы коррелятора вызывается функция CorrelInt(), являющаяся аналогом прерывания коррелятора в обычном приёмнике. В данной функции реализованы следящие системы (tracker.c). &lt;br /&gt;
&lt;br /&gt;
Таким образом, следящие системы выполняются в процессе коррелятора. Отсюда мораль - обработчик CorrelInt должен работать как можно быстрее, чтобы не нарушить работу коррелятора.&lt;br /&gt;
&lt;br /&gt;
В обработчике CorrelInt каждые 100 мс посылается семафор tracker2solver_sem, который активизирует процесс решения навигационной задачи.&lt;br /&gt;
&lt;br /&gt;
== Обновление структуры софта ==&lt;br /&gt;
Недостатком существующего программного приёмника является его жёсткая привязка к сигналу GPS C/A. Тут по-крупному есть два основных момента (первые два пункта ниже).&lt;br /&gt;
&lt;br /&gt;
=== Реорганизация каналов ===&lt;br /&gt;
&lt;br /&gt;
Данные в приёмнике хранятся по сигналам. Глобальный массив структур Chnl[] - это параметры для каждого из 32 сигналов GPS C/A. Стоит добавить, скажем, ГЛОНАСС, и вся структура ломается. Так как одной из первостепенных задач является приём сигналов Galileo, имеющих другую структуру, это всё необходимо переделать.&lt;br /&gt;
&lt;br /&gt;
Более правильным является подход, когда есть глобальная структура по каналам приёмника. Проблема в том, что у программного приёмника каналы программные, &amp;quot;виртуальные&amp;quot;, и их может быть столько, на сколько хватит производительности процессора. Поэтому и была привязка к сигналам, а не каналам - те сигналы, которые отсутствуют в эфире, просто не отнимали процессорное время.&lt;br /&gt;
&lt;br /&gt;
Нужно всё-таки сделать структуру по каналам приёмника, аналогичную аппаратному коррелятору, но, быть может, создавать их динамически.&lt;br /&gt;
&lt;br /&gt;
Таким образом, каждый элемент массива Chnl[] должен соответсвовать одному каналу приёма. Переделать это не сложно, фактически, сейчас номер канала - это номер ПСП GPS (только нумерация с нуля, а не с единицы). Нужно добавить туда поле - тип и номер сигнала, и внести соответствующие изменения в коррелятор и блок поиска. И всё.&lt;br /&gt;
&lt;br /&gt;
Второе, что нужно сделать - создать отдельную структуру данных для хранения уже параметров сигналов. Дело в том, что канал может быть сборшен со слежения из-за временного пропадания сигнала. Затем канал может быть перенацелен на другой сигнал. Сейчас данные, привязанные к сигналу, а не к каналу (эфемериды и прочее), хранятся в массиве Chnl, а нужно их хранить отдельно. Если впоследствии при восстановлении слежения другой канал захватит сигнал, за которым уже было слежение, все данные могут быть получены из этой отдельной структуры для хранения параметров.&lt;br /&gt;
&lt;br /&gt;
=== Уход от макросов ===&lt;br /&gt;
Вторая проблема всё очень сильно привязано на макросы, особенно блок поиска. Макросы хороши, когда всё определяется на этапе компиляции. Когда был только один сигнал GPS, это было нормально. Но теперь если необходимо следить за разными сигналами, это становится проблемой. Параметры сигналов разные, например, разная длительность ПСП в сигналах GPS L1 C/A и Galileo E1. Необходимо, чтобы параметры блока поиска могли быть изменены в процессе исполнения программы, а не в процессе компиляции. Для этого многие параметры нужно объявить не как макросы, а как переменные.&lt;br /&gt;
&lt;br /&gt;
=== Перераспределение кода по файлам ===&lt;br /&gt;
&lt;br /&gt;
Для удобства следует разбить исходный код по множеству файлов, которые, в свою очередь, распределить по каталогам. Дополнить файлы комментариями, функции - описанием прототипов в нотации Doxygen и т.д. Иначе говоря, облагородить форму кода, сделать его более удобоваримым для совместной разработки и хранения в SVN.&lt;br /&gt;
&lt;br /&gt;
[[Категория:SR31]]&lt;br /&gt;
[[Категория:FirmWare]]&lt;br /&gt;
{{wl-publish: 2011-10-05 11:45:24 +0400 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/SR31</id>
		<title>SR31</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/SR31"/>
				<updated>2025-09-04T11:22:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:20111003 SR31 Logo.jpg|thumb|Logo SR31 - вот он так примерно и работает...]]&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
'''Программный приёмник SR31''' представляет собой аппаратно-программный комплекс, предназначенный для приёма навигационных сигналов и решения навигационной задачи как в режиме реального времени, так и в режиме постобработки.&lt;br /&gt;
&lt;br /&gt;
Аппаратная часть состоит из радиочастотного блока, платы ввода оцифрованных данных по шине USB и ЭВМ.&lt;br /&gt;
&lt;br /&gt;
Все остальные операции по обработке сигнала (обнаружение, захват, слежение, решение навигационной задачи, отображение информации) осуществляются программно на ЭВМ под управлением ОС Linux.&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;center&amp;gt;[[SR31|''читать далее...'']]&amp;lt;/center&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Страницы о приёмнике ==&lt;br /&gt;
* [[Blog:Boldenkov/05.10.2011_Структура_программного_приёмника|Структура программного приёмника]]&lt;br /&gt;
* [[Blog:Boldenkov/08.10.2011_Исходники_модуля_ядра_для_работы_с_платой_USB_выложены_в_SVN|Работа с модулем ядра Linux FrontEnd]]&lt;br /&gt;
* [[Blog:Boldenkov/01.10.2011_Программный_приёмник_выложен_в_SVN|Программный приёмник выложен в SVN]]&lt;br /&gt;
* [[USB_FrontEnd_MAX2769|Описание радиочастотного блока приёмника]]&lt;br /&gt;
* [[blog:Korogodin/11.10.2011, Опыт использования Eclipse для сборки Си-программ с помощью gcc|Установка и настройка среды программирования Eclipse]]&lt;br /&gt;
* [[Blog:Boldenkov/22.03.2012 Модуль ядра SR31 переделан под новый радиочастотный блок|Модуль ядра SR31 переделан под новый радиочастотный блок]]&lt;br /&gt;
&lt;br /&gt;
== Аппробация, публикации ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!align = &amp;quot;center&amp;quot;| № п/п&lt;br /&gt;
!align = &amp;quot;center&amp;quot;|Наименование научного труда, его вид&amp;lt;br&amp;gt;''(статья, доклад, тез. доклада, монография, отчет по НИР и т.д.)''&lt;br /&gt;
!align = &amp;quot;center&amp;quot;|Характеристика труда&amp;lt;br&amp;gt;''(печатный, рукопись)''&lt;br /&gt;
!Выходные данные&amp;lt;br&amp;gt;''(полное название журнала (сборника трудов, сб. докладов, сб. тезисов докладов), издательство, место издания (город), год, страницы труда в журнале (сборнике)''&lt;br /&gt;
!align = &amp;quot;center&amp;quot;|Объем&amp;lt;br&amp;gt;''(в стр.)''&lt;br /&gt;
!align = &amp;quot;center&amp;quot;|Авторы&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1&lt;br /&gt;
|«Программный приёмник сигналов GPS»&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Печатный&lt;br /&gt;
|Инновации в радиотехнических информационно-телекоммуникационных технологиях. Сборник докладов, 2006 г, стр. 220-229.&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|10&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|[[Перов А.А.]], [[Шатилов А.Ю.]], [[Болденков Е.Н.]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|2&lt;br /&gt;
|«Программный приёмник GPS»&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Печатный&lt;br /&gt;
|Тезисы докладов на IV научной конференции &amp;quot;Радиооптические Технологии в Приборостроении&amp;quot;, 2006 г, стр. 150.&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|[[Перов А.И.]], [[Болденков Е.Н.]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Зарегистрированная интеллектуальная собственность ==&lt;br /&gt;
&lt;br /&gt;
=== Свидетельства на программное обеспечение ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
! №&lt;br /&gt;
! Статус&lt;br /&gt;
! Приоритет от&lt;br /&gt;
! Дата выдачи&lt;br /&gt;
! Название&lt;br /&gt;
! Авторы&lt;br /&gt;
! SVN&lt;br /&gt;
! Язык&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
| 2010613888&lt;br /&gt;
| Получено свидетельство&lt;br /&gt;
| 22.04.2010&lt;br /&gt;
| 15.06.2010&lt;br /&gt;
| [http://srns.ru/wiki/Программа:2008_Программный_блок_быстрого_поиска_навигационного_сигнала_GPS_C/A Программный блок быстрого поиска навигационного сигнала GPS C/A]&lt;br /&gt;
| Перов А.И., Болденков Е.Н.&lt;br /&gt;
| [http://srns.ru:802/websvn/listing.php?repname=SR31&amp;amp;path=%2Ftrunk%2FDetector%2F&amp;amp;#a5e18d0d241fb9ab83a61850f576ddacb&amp;amp;r2 SR31@r2]&lt;br /&gt;
| С&lt;br /&gt;
| Программный блок поиска сигнала GPS C/A из программного же приёмника&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория:SR31]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/SrnsViewer</id>
		<title>SrnsViewer</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/SrnsViewer"/>
				<updated>2025-09-04T11:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Форма3}}&lt;br /&gt;
Данный проект основан на использовании инструментов библиотеки Qt4. Его задачей является чтение, обработка и отображение информации, приходящей с приемника по текстовому протоколу NMEA 0183 и др.&lt;br /&gt;
&lt;br /&gt;
==Описание==&lt;br /&gt;
===Классы===&lt;br /&gt;
&lt;br /&gt;
*SatInfoRMC - Класс строки RMC. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
class SatInfoRMC&lt;br /&gt;
private:&lt;br /&gt;
    QString satSys;&lt;br /&gt;
    QByteArray timeUTC;//время&lt;br /&gt;
    char status ;//статус&lt;br /&gt;
    double latitude;//широта&lt;br /&gt;
    char nors;//Сев/Южн&lt;br /&gt;
    double longitude;//долгота&lt;br /&gt;
    char eorw;//Вост/Зап&lt;br /&gt;
    double speed;//скорость&lt;br /&gt;
    double putevoiUgol;//Путевой угол&lt;br /&gt;
    QByteArray date;//Дата&lt;br /&gt;
    double MagnitSklon;//Магнитное склонение&lt;br /&gt;
    char napMS;//Направление магнитного склонения&lt;br /&gt;
    char regim;//Индикатор режима&lt;br /&gt;
    QString CheckSum;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
*SatInfoGSV - Класс строки GSV. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
class SatInfoGSV &lt;br /&gt;
private:&lt;br /&gt;
    QString satSys;&lt;br /&gt;
    int totalNumMes;//число сообщений&lt;br /&gt;
    int mesNumber;//номер сообщения&lt;br /&gt;
    int satInView;//полное число видимых спутников&lt;br /&gt;
    QVector&amp;lt;int&amp;gt; satNumber;//номер спутника&lt;br /&gt;
    QVector&amp;lt;int&amp;gt; elevation;//высота&lt;br /&gt;
    QVector&amp;lt;int&amp;gt; azimuth;//азимут&lt;br /&gt;
    QVector&amp;lt;double&amp;gt; SNR;//с/ш&lt;br /&gt;
    QString CheckSum;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*SatInfoGSA - Класс строки GSA. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
class SatInfoGSA &lt;br /&gt;
private:&lt;br /&gt;
    QString satSys;&lt;br /&gt;
    QString mode1;&lt;br /&gt;
    QString mode2;&lt;br /&gt;
    QVector &amp;lt;int&amp;gt; satNamesForFix;&lt;br /&gt;
    QString PDOP;&lt;br /&gt;
    QString HDOP;&lt;br /&gt;
    QString VDOP;&lt;br /&gt;
    QString CheckSum;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Имена функций для записи/чтения , как правило, состоят из названия переменной с префиксом set/get.&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
&lt;br /&gt;
*QString CalcalateCheckSum(QByteArray stroka)&lt;br /&gt;
Функция подсчета контрольной суммы строки.&lt;br /&gt;
&lt;br /&gt;
*SatInfoGSV GetInfoGSV(QByteArray stroka)&lt;br /&gt;
Парсер строки GSV.&lt;br /&gt;
&lt;br /&gt;
*SatInfoGSA GetInfoGSA(QByteArray stroka)&lt;br /&gt;
Парсер строки GSA.&lt;br /&gt;
&lt;br /&gt;
*SatInfoRMC GetInfoRMC(QByteArray stroka)&lt;br /&gt;
Парсер строки RMC.&lt;br /&gt;
&lt;br /&gt;
*void showClock(QVector &amp;lt;SatInfoRMC&amp;gt; pRMC, int plusUTC)&lt;br /&gt;
Функция отображения часов с поправкой на часовой пояс.&lt;br /&gt;
&lt;br /&gt;
*bool checksumTest(QByteArray promStrok,QString chSum)&lt;br /&gt;
Проверка контрольной суммы.&lt;br /&gt;
&lt;br /&gt;
*std::list &amp;lt;dataForPolarPlot&amp;gt;  packPolar(QVector&amp;lt;SatInfoGSA&amp;gt; pGSA,QVector&amp;lt;SatInfoGSV&amp;gt; pGSV)&lt;br /&gt;
Формирует список для отображения на полярном графике.&lt;br /&gt;
&lt;br /&gt;
*std::list &amp;lt;SatSnr&amp;gt;  packSNR(QVector&amp;lt;SatInfoGSA&amp;gt; pGSA,QVector&amp;lt;SatInfoGSV&amp;gt; pGSV)&lt;br /&gt;
Формирует список для отображения гистограммы с/ш.&lt;br /&gt;
&lt;br /&gt;
*bool revisionForSolution(int nameOfSat, QVector&amp;lt;SatInfoGSA&amp;gt; pGSA)&lt;br /&gt;
Проверка спутника на участие в решении.&lt;br /&gt;
&lt;br /&gt;
*QByteArray MainWindow::data(QByteArray stroka, int &amp;amp;i)&lt;br /&gt;
Возвращает массив символов от запятой до запятой(NMEA).&lt;br /&gt;
&lt;br /&gt;
===Слоты===&lt;br /&gt;
*dodo()&lt;br /&gt;
Слот, вызывающийся ежесекундно. Содержит набор операций по чтению, обработке и отображению информации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Классы==&lt;br /&gt;
&lt;br /&gt;
===SatView===&lt;br /&gt;
Данный класс предназначен для компоновки и отображения графической информации о сигналах с видимых спутников.&lt;br /&gt;
&lt;br /&gt;
*SatSnr - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
class SatSnr &lt;br /&gt;
&lt;br /&gt;
QString name;//номер спутника&lt;br /&gt;
double q;// с/ш&lt;br /&gt;
bool insat;//участие в решении&lt;br /&gt;
QString navsys;//навиг. сис-ма&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
*Otobragenie - вспомогательный класс.&lt;br /&gt;
&lt;br /&gt;
''Методы''&lt;br /&gt;
*void otobrazi(std::list&amp;lt;SatSnr&amp;gt;) - Функция,отображающая входной список.В ней предусмотрена компоновка, выбор отображаемых позиций, функция  &lt;br /&gt;
scroll'а.Использует объекты QwtThermo библиотеки Qwt.&lt;br /&gt;
&lt;br /&gt;
===satpolarplot===&lt;br /&gt;
Предназначен для отображения положения спутников на полярном графике.&lt;br /&gt;
&lt;br /&gt;
*dataForPolarPlot - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
class dataForPolarPlot&lt;br /&gt;
&lt;br /&gt;
    QString name;//номер спутника&lt;br /&gt;
    QString satSys;//нав. сис-ма&lt;br /&gt;
    double elevation;//угол места&lt;br /&gt;
    double azimuth;//азимут&lt;br /&gt;
    bool inSolution;// Участие в решении&lt;br /&gt;
    bool slezhenie;// в слежении&lt;br /&gt;
    double SNR;//с/ш&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Методы''&lt;br /&gt;
*void showListOfSatellites(std::list&amp;lt;dataForPolarPlot&amp;gt;) - функция,отображающая входной список.Использует объекты QwtPolarPlot библиотеки QwtPolar.&lt;br /&gt;
&lt;br /&gt;
==Описание работы==&lt;br /&gt;
[[File:6.png|400px|Скрин окошка программы|thumb]]&lt;br /&gt;
#Доступ к порту (на котором стоит приемник) и его настройка осуществляется посредством библиотеки QSerialPort.&lt;br /&gt;
#Ежесекундно (QTimer) вызывается слот dodo(), в котором происходит чтение данных из буфера. &lt;br /&gt;
#Далее происходит идентификация, разбор строк и проверка контрольной суммы(на этом этапе задействованы классы и функции описанные выше).&lt;br /&gt;
#Следующий этап - компоновка информации в виде объектов класса SatSnr и dataForPolarPlot  и составление списка из объектов этих классов.&lt;br /&gt;
#И, наконец, передача списка функции otobrazi() класса SatView.&lt;br /&gt;
==Дополнительно==&lt;br /&gt;
Реализовано отображение времени с поправкой на часовой пояс.&lt;br /&gt;
&lt;br /&gt;
==Что для этого нужно==&lt;br /&gt;
&lt;br /&gt;
#Библиотеку  Qt4 (возможно и на 5.1 заработает) - http://qt-project.org/downloads &lt;br /&gt;
#QtCreator (у меня 2.4.1) - http://qt-project.org/downloads                                              &lt;br /&gt;
#откомпилированные библиотеки:&lt;br /&gt;
##Qwt 6.1.0 (для отображения с/ш): http://qtlinux.narod.ru/install_qwt.htm. Download: [[media:qwt-6.1.0.zip|qwt-6.1.0.zip]] (через apt-get &amp;lt;code&amp;gt;sudo apt-get install libqwt-dev libqwt6&amp;lt;/code&amp;gt;)&lt;br /&gt;
##QwtPolar 1.0.1 (для Sky View): http://qtlinux.narod.ru/install_qwtpolar.htm. Download: [[media:qwtpolar-1.0.1.tar.gz|qwtpolar-1.0.1.tar.gz]] &amp;lt;br&amp;gt;На этом этапе обратить внимание на пути, которые прописаны в создаваемых/редактируемых файлах. Они должны соответствовать действительности, т.е. все файлы должны там лежать. &lt;br /&gt;
##QSerialPort (для работы с портом): http://qt-project.org/wiki/QtSerialPort. Download: [[media:QSerialPort.tar.gz|QSerialPort.tar.gz]] &amp;lt;br&amp;gt; По мануалу на QSerialPort нужно создавать дополнительные директории, но этого делать не нужно! &amp;lt;br&amp;gt; Заходим в директорию с распакованной библиотекой: &amp;lt;br&amp;gt;&amp;lt;code&amp;gt; qmake &amp;lt;br&amp;gt; make &amp;lt;br&amp;gt;  sudo make install&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Не забыть поставить права на чтение порта!'''&lt;br /&gt;
&lt;br /&gt;
==Как этим пользоваться==&lt;br /&gt;
Для того, чтобы подключить классы (с их виджетами) к своему проекту достаточно будет подключить к проекту(в .pro-файле) следующие файлы (SrnsViewer/NMEA):&lt;br /&gt;
*satview.h и satview.cpp - виджет, отображающий с/ш. &lt;br /&gt;
*satpolarplot.h и satpolarplot.cpp - виджет графика.&lt;br /&gt;
&lt;br /&gt;
===Порядок работы===&lt;br /&gt;
&lt;br /&gt;
#Создаем объект класса SatView (ну или satpolarplot) и размещаем на форме.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
// создаем виджет гистограммы С/Ш&lt;br /&gt;
      myWidjet = new SatView(this);&lt;br /&gt;
      myWidjet-&amp;gt;move(20,20);&lt;br /&gt;
      myWidjet-&amp;gt;resize(280,300);&lt;br /&gt;
// создаем виджет полярного графика&lt;br /&gt;
      myPolarWidget = new satpolarplot(this);&lt;br /&gt;
      myPolarWidget-&amp;gt;move(500,20);&lt;br /&gt;
      myPolarWidget-&amp;gt;resize(400,400);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Формируете список объектов класса  SatSnr (ну или dataForPolarPlot), т.е. список(list) того, что хотим отобразить.&lt;br /&gt;
#Вызываем методы, передаем им списки.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
//передаем данные виджетам&lt;br /&gt;
	myPolarWidget-&amp;gt;showListOfSatellites(polarInfo);&lt;br /&gt;
	myWidjet-&amp;gt;otobrazi(dataForSNR);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==P.S.==&lt;br /&gt;
По аналогии можно без труда реализовать парсер и для других типов строк NMEA.&lt;br /&gt;
&lt;br /&gt;
== Аппробация (Корогодин) ==&lt;br /&gt;
&lt;br /&gt;
QtCreator и Qt4 у меня стояли, установленные из репозитория. Не помню, чтобы я компилировал Qt4. &lt;br /&gt;
&lt;br /&gt;
qwt поставил командой: &amp;lt;code&amp;gt;sudo apt-get install libqwt-dev libqwt6&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
qwtpolar ставил по мануалу, но сейчас к статье добавлен архив с исходниками, в которых все настройки уже выполнены (остается только скомпилировать и установить). &lt;br /&gt;
&lt;br /&gt;
QSerialPort ставил их архива (qmake, make, sudo make install). &lt;br /&gt;
&lt;br /&gt;
Для работы, вероятно, требуется добавить себя в группу dialout. Но я там уже был. &lt;br /&gt;
&lt;br /&gt;
Чтобы работать из QtCreator, следует поменять пути Release и Debug компиляции (слева кнопка ''Проекты'') на актуальные.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Импала]]&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Javad_and_RTKLIB</id>
		<title>Javad and RTKLIB</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Javad_and_RTKLIB"/>
				<updated>2025-09-04T11:20:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим режим rtk, где:&lt;br /&gt;
&lt;br /&gt;
* База: Javad. Подключен к неподвижной антенне на крыше.&lt;br /&gt;
&lt;br /&gt;
* Приёмник: nv08c. Подключен к другой неподвижной антенне на крыше.&lt;br /&gt;
&lt;br /&gt;
С помощью [http://www.rtklib.com/ RTKLIB] получим точное решение навигационной задачи (порядка нескольких миллиметров). Для этого нам понадобится подпрограмма rtknavi (\rtklib_2.4.2\bin\rtknavi.exe). &amp;lt;br /&amp;gt;&lt;br /&gt;
О том, как это сделать, можно посмотреть [https://www.youtube.com/watch?v=cZsxGLtEV0k здесь].&lt;br /&gt;
&lt;br /&gt;
== Настройка rtknavi ==&lt;br /&gt;
&lt;br /&gt;
После подключения приёмников, переходим к настройкам rtknavi.&lt;br /&gt;
&lt;br /&gt;
1. Запускаем rtknavi.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Настраиваем связь с nv08c и javad через последовательный порт.  Для этого в главном окне программы нажимаем на кнопку &amp;quot;I&amp;quot;.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.1. Ставим галочку напротив &amp;quot;Rover&amp;quot; и &amp;quot;Base Station&amp;quot;.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.2. Type у двух приёмников - serial.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.3. Opt: для rover - порт, соответствующий бинарному протоколу nv08c, для Base Station - соответствующий порту javad.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Параметры порта nv08c:&lt;br /&gt;
*Bitrate: 115200&lt;br /&gt;
*Byte Size: 8 bit&lt;br /&gt;
*Parity: Odd&lt;br /&gt;
*Stop Bits: 1 bit&lt;br /&gt;
*Flow Control: None&lt;br /&gt;
&lt;br /&gt;
Параметры порта для javad:&lt;br /&gt;
*Bitrate: 115200&lt;br /&gt;
*Byte Size: 8 bit&lt;br /&gt;
*Parity: None&lt;br /&gt;
*Stop Bits: 1 bit&lt;br /&gt;
*Flow Control: None&lt;br /&gt;
&lt;br /&gt;
2.4. cmd: &lt;br /&gt;
для nv08c:&lt;br /&gt;
  !NVS CFG-BINR f4 0a&lt;br /&gt;
  !NVS CFG-BINR D5 01&lt;br /&gt;
Для javad: нажимаем &amp;quot;load&amp;quot; и открываем: &amp;quot;\rtklib_2.4.2\data\javad_raw_1hz.cmd&amp;quot;  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.5. Format выбираем соответствующий приёмнику.  &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_1.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
3. Нажимаем на кнопку &amp;quot;options&amp;quot;. Для настройки самого режима.  &amp;lt;br /&amp;gt;&lt;br /&gt;
3.1. во вкладке Setting1: &lt;br /&gt;
* Positioning Mode: Static (можно Kinematic, но т.к. антенна неподвижна, выбрав kinematic точность немного потеряется). &lt;br /&gt;
* Также оставляем галочку только напротив GPS &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_2.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
3.2. Во вкладке &amp;quot;Positions&amp;quot; настраиваем координаты базовой станции: &amp;lt;br \&amp;gt;&lt;br /&gt;
* Lat: 55.756313°  &amp;lt;br /&amp;gt;&lt;br /&gt;
* Lon: 37.708040°   &amp;lt;br /&amp;gt;&lt;br /&gt;
* H: 180.494486 m   &amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;small&amp;gt;Данные значения получены после усреднения результатов измерения координат антенны, которые происходили около 2-х часов.&amp;lt;/small&amp;gt;  &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_3.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
4. Теперь нажимаем на start и ждем получения решения.&lt;br /&gt;
&lt;br /&gt;
== Описание полученного результата ==&lt;br /&gt;
* Требуется от 4 до 10 минут (по разному), чтобы rtklib начал выдавать точное решение (это касается static и kinimatic). &lt;br /&gt;
* На рисунке ниже показан один из возможных результатов. Там видно , что после нахождения точного решения, пару раз произошёл срыв, и само решение немного &amp;quot;гуляет&amp;quot;. При других запусках программы точное решение имело шумоподобный вид с постоянным математическим ожиданием. &lt;br /&gt;
&lt;br /&gt;
[[File:javad_and_rtklib_4.PNG|400px]]  &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_5.PNG|400px]]   &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;После первого получения точного решения прошло 15 минут.  &amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_6.PNG]]   &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;После первого получения точного решения прошло 25 минут.  &amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_7.PNG|400px]]  &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;После первого получения точного решения прошло 30 минут.  &amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [https://srns.ru/wiki/Blog:Korogodin/07.07.2011,_JAVAD2RINEX_HOWTO подключение Javad]&lt;br /&gt;
* [https://srns.ru/wiki/Blog:DneprovV/29.07.2015_%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_RTKLib работа с RTKLIB] &lt;br /&gt;
* [http://www.rtklib.com/ RTKLIB]. Ссылка на страницу официального сайта для скачивания программы.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Javad]]&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:RTKLIB]]&lt;br /&gt;
[[Категория:NV08C]]&lt;br /&gt;
[[Категория:RTK]]&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Javad_and_RTKLIB</id>
		<title>Javad and RTKLIB</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Javad_and_RTKLIB"/>
				<updated>2025-09-04T11:20:10Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Форма3}}&lt;br /&gt;
Рассмотрим режим rtk, где:&lt;br /&gt;
&lt;br /&gt;
* База: Javad. Подключен к неподвижной антенне на крыше.&lt;br /&gt;
&lt;br /&gt;
* Приёмник: nv08c. Подключен к другой неподвижной антенне на крыше.&lt;br /&gt;
&lt;br /&gt;
С помощью [http://www.rtklib.com/ RTKLIB] получим точное решение навигационной задачи (порядка нескольких миллиметров). Для этого нам понадобится подпрограмма rtknavi (\rtklib_2.4.2\bin\rtknavi.exe). &amp;lt;br /&amp;gt;&lt;br /&gt;
О том, как это сделать, можно посмотреть [https://www.youtube.com/watch?v=cZsxGLtEV0k здесь].&lt;br /&gt;
&lt;br /&gt;
== Настройка rtknavi ==&lt;br /&gt;
&lt;br /&gt;
После подключения приёмников, переходим к настройкам rtknavi.&lt;br /&gt;
&lt;br /&gt;
1. Запускаем rtknavi.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Настраиваем связь с nv08c и javad через последовательный порт.  Для этого в главном окне программы нажимаем на кнопку &amp;quot;I&amp;quot;.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.1. Ставим галочку напротив &amp;quot;Rover&amp;quot; и &amp;quot;Base Station&amp;quot;.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.2. Type у двух приёмников - serial.  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.3. Opt: для rover - порт, соответствующий бинарному протоколу nv08c, для Base Station - соответствующий порту javad.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Параметры порта nv08c:&lt;br /&gt;
*Bitrate: 115200&lt;br /&gt;
*Byte Size: 8 bit&lt;br /&gt;
*Parity: Odd&lt;br /&gt;
*Stop Bits: 1 bit&lt;br /&gt;
*Flow Control: None&lt;br /&gt;
&lt;br /&gt;
Параметры порта для javad:&lt;br /&gt;
*Bitrate: 115200&lt;br /&gt;
*Byte Size: 8 bit&lt;br /&gt;
*Parity: None&lt;br /&gt;
*Stop Bits: 1 bit&lt;br /&gt;
*Flow Control: None&lt;br /&gt;
&lt;br /&gt;
2.4. cmd: &lt;br /&gt;
для nv08c:&lt;br /&gt;
  !NVS CFG-BINR f4 0a&lt;br /&gt;
  !NVS CFG-BINR D5 01&lt;br /&gt;
Для javad: нажимаем &amp;quot;load&amp;quot; и открываем: &amp;quot;\rtklib_2.4.2\data\javad_raw_1hz.cmd&amp;quot;  &amp;lt;br /&amp;gt;&lt;br /&gt;
2.5. Format выбираем соответствующий приёмнику.  &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_1.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
3. Нажимаем на кнопку &amp;quot;options&amp;quot;. Для настройки самого режима.  &amp;lt;br /&amp;gt;&lt;br /&gt;
3.1. во вкладке Setting1: &lt;br /&gt;
* Positioning Mode: Static (можно Kinematic, но т.к. антенна неподвижна, выбрав kinematic точность немного потеряется). &lt;br /&gt;
* Также оставляем галочку только напротив GPS &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_2.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
3.2. Во вкладке &amp;quot;Positions&amp;quot; настраиваем координаты базовой станции: &amp;lt;br \&amp;gt;&lt;br /&gt;
* Lat: 55.756313°  &amp;lt;br /&amp;gt;&lt;br /&gt;
* Lon: 37.708040°   &amp;lt;br /&amp;gt;&lt;br /&gt;
* H: 180.494486 m   &amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;small&amp;gt;Данные значения получены после усреднения результатов измерения координат антенны, которые происходили около 2-х часов.&amp;lt;/small&amp;gt;  &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_3.PNG|400px]]&lt;br /&gt;
&lt;br /&gt;
4. Теперь нажимаем на start и ждем получения решения.&lt;br /&gt;
&lt;br /&gt;
== Описание полученного результата ==&lt;br /&gt;
* Требуется от 4 до 10 минут (по разному), чтобы rtklib начал выдавать точное решение (это касается static и kinimatic). &lt;br /&gt;
* На рисунке ниже показан один из возможных результатов. Там видно , что после нахождения точного решения, пару раз произошёл срыв, и само решение немного &amp;quot;гуляет&amp;quot;. При других запусках программы точное решение имело шумоподобный вид с постоянным математическим ожиданием. &lt;br /&gt;
&lt;br /&gt;
[[File:javad_and_rtklib_4.PNG|400px]]  &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_5.PNG|400px]]   &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;После первого получения точного решения прошло 15 минут.  &amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_6.PNG]]   &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;После первого получения точного решения прошло 25 минут.  &amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
[[File:javad_and_rtklib_7.PNG|400px]]  &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;После первого получения точного решения прошло 30 минут.  &amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [https://srns.ru/wiki/Blog:Korogodin/07.07.2011,_JAVAD2RINEX_HOWTO подключение Javad]&lt;br /&gt;
* [https://srns.ru/wiki/Blog:DneprovV/29.07.2015_%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_RTKLib работа с RTKLIB] &lt;br /&gt;
* [http://www.rtklib.com/ RTKLIB]. Ссылка на страницу официального сайта для скачивания программы.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Javad]]&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:RTKLIB]]&lt;br /&gt;
[[Категория:NV08C]]&lt;br /&gt;
[[Категория:RTK]]&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/ArcticSEA</id>
		<title>ArcticSEA</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/ArcticSEA"/>
				<updated>2025-09-04T11:18:50Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''ArcticSEA''' (''System for Experiment Automatization'') - библиотека функций в виде совокупности matlab-скриптов, предназначенных для проведения автоматизированных экспериментов и испытаний навигационной аппаратуры с помощью лабораторного оборудования. &lt;br /&gt;
{{notice|Этой странице не хватает гламурной фотографии собранного стенда}}&lt;br /&gt;
== Цель ==&lt;br /&gt;
Приборы Rohde &amp;amp; Schwarz позволяют достаточно просто управлять собой через локальную сеть. При этом некоторую сложность представляет огромное число специфичных команд управления, отвечающих стандарту SCPI (Standard Commands for Programmable Instruments). Цель создания данной библиотеки - написать классы - фасады, методы которых позволят выполнять необходимые действия с приборами без явного использования команд SCPI.&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&lt;br /&gt;
== Состав библиотеки ==&lt;br /&gt;
На данный момент в состав библиотеки входят 3 класса для управления приборами и класс для общения с навигационным модулем.&lt;br /&gt;
&lt;br /&gt;
== Общие методы для всех классов управления приборами  ==&lt;br /&gt;
Описание всех классов, сформированное в doxygen, можно посмотреть, запустив файл help.html в корне [https://code.google.com/p/arcticsea проекта]&lt;br /&gt;
{|table class=&amp;quot;wikitable collapsible collapsed&amp;quot;&lt;br /&gt;
! colspan =&amp;quot;3&amp;quot;|Общие методы классов управления приборами &lt;br /&gt;
|-&lt;br /&gt;
! Метод&lt;br /&gt;
! Входные аргументы&lt;br /&gt;
! Возвращает&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|'''SetConnection(IP, port)'''&amp;lt;br /&amp;gt;Установка соединения с прибором &amp;lt;br /&amp;gt;||IP, string - адрес устройства в сети&amp;lt;br /&amp;gt;port - порт, для приборов Rohde &amp;amp; Schwarz port = 5025||1, если соединение установлено успешно, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''CloseConnection'''&amp;lt;br /&amp;gt;Закрытие соединения с прибором &amp;lt;br /&amp;gt;|| --- ||1, если соединение закрыто успешно, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SendCommand(strCommand)'''&amp;lt;br /&amp;gt;Отправка команды в формате SCPI (т.е. как в документации на прибор) &amp;lt;br /&amp;gt;||strCommand, string - команда в формате SCPI&amp;lt;br /&amp;gt;||1, если команда отправлена успешно, иначе 0. Если отправленная команда не может быть выполнена прибором (например, прибор не поддерживает заданную частоту), сообщение от прибора будет выведено в командную строку.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SendQuery(strCommand)'''&amp;lt;br /&amp;gt;Отправка запроса в формате SCPI&amp;lt;br /&amp;gt;||&lt;br /&gt;
strCommand, string - запрос в формате SCPI, заканчивается вопросительным знаком&amp;lt;br /&amp;gt;&lt;br /&gt;
||[Status, Result] &amp;lt;br /&amp;gt;&lt;br /&gt;
Status = 1, если запрос послан успешно, иначе 0. Result, string - ответ прибора на посланный запрос.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''GetIDN'''&amp;lt;br /&amp;gt;Запрос информации о модели прибора, серийном номере&amp;lt;br /&amp;gt;|| --- ||[Status, IDN] &amp;lt;br /&amp;gt;Status = 1, если операция успешна, иначе 0. IDN, string - информация о модели прибора, серийном номере.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Preset'''&amp;lt;br /&amp;gt;Установка настроек прибора &amp;quot;по умолчанию&amp;quot;, очистка лога ошибок&amp;lt;br /&amp;gt;|| --- ||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''QueryError'''&amp;lt;br /&amp;gt;Запрос ошибок&amp;lt;br /&amp;gt;|| --- ||1, если есть ошибки, сообщение прибора будет выведено в командную строку. 0 - ошибок нет.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Классы  ==&lt;br /&gt;
=== Класс CFSV ===&lt;br /&gt;
==== Описание ====&lt;br /&gt;
Класс, созданный для управления анализатором спектра FSV. &amp;lt;br /&amp;gt;На данный момент реализованы следующие возможности: &amp;lt;br /&amp;gt;&lt;br /&gt;
#Установка центральной частоты в режиме анализа спектра&lt;br /&gt;
#Установка полосы в режиме анализа спектра&lt;br /&gt;
#Измерение мощности сигнала в заданной полосе&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
{|table class=&amp;quot;wikitable collapsible collapsed&amp;quot;&lt;br /&gt;
! colspan =&amp;quot;3&amp;quot;|Методы&lt;br /&gt;
|-&lt;br /&gt;
! Метод&lt;br /&gt;
! Входные аргументы&lt;br /&gt;
! Возвращает&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetCenterFreq(Freq)'''&amp;lt;br /&amp;gt;Установка центральной частоты в режиме анализа спектра&amp;lt;br /&amp;gt;||Freq - центральная частота, может быть как string 10GHz, так и число 10E9&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetSpan(Span)'''&amp;lt;br /&amp;gt;Установка полосы в режиме анализа спектра&amp;lt;br /&amp;gt;||Span - полоса, может быть как string 10MHz, так и число 10E6&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''PowerMeasure(Bandwidth)'''&amp;lt;br /&amp;gt;Измерение мощности сигнала в заданной полосе&amp;lt;br /&amp;gt;||Bandwidth - полоса измерения, может быть как string 10MHz, так и число 10E6&amp;lt;br /&amp;gt;||[Status, measure]&amp;lt;br /&amp;gt;Status = 1, если операция успешна, иначе 0. measure - измеренная мощность, дБм.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Класс CSMBV ===&lt;br /&gt;
==== Описание ====&lt;br /&gt;
Класс, созданный для управления генератором сигналов SMBV. &amp;lt;br /&amp;gt;На данный момент реализованы следующие возможности: &amp;lt;br /&amp;gt;&lt;br /&gt;
#Установка частоты сигнала&lt;br /&gt;
#Установка мощности сигнала&lt;br /&gt;
#Имитация сигналов заданного числа спутников(GPS, диапазон L1, расположение - Москва, статика, мощность всех сигналов одинакова)&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
{|table class=&amp;quot;wikitable collapsible collapsed&amp;quot;&lt;br /&gt;
! colspan =&amp;quot;3&amp;quot;|Методы&lt;br /&gt;
|-&lt;br /&gt;
! Метод&lt;br /&gt;
! Входные аргументы&lt;br /&gt;
! Возвращает&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetLevel(Level)'''&amp;lt;br /&amp;gt;Установка мощности сигнала&amp;lt;br /&amp;gt;||Level - мощность сигнала, дБм&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetFreq(Freq)'''&amp;lt;br /&amp;gt;Установка частоты сигнала&amp;lt;br /&amp;gt;||Freq - частота сигнала, может быть как string 10MHz, так и число 10E6&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetRFOutput(State)'''&amp;lt;br /&amp;gt;Включение/выключение RF выхода&amp;lt;br /&amp;gt;||State, string - ON/OFF&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetGPS(SatNumber)'''&amp;lt;br /&amp;gt;Имитация сигналов заданного числа спутников(GPS, диапазон L1, расположение - Москва, статика, мощность всех сигналов одинакова)&amp;lt;br /&amp;gt;||SatNumber - количество спутников&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Класс CRSC ===&lt;br /&gt;
==== Описание ====&lt;br /&gt;
Класс, созданный для управления аттенюатором RSC. &amp;lt;br /&amp;gt;На данный момент реализованы следующие возможности: &amp;lt;br /&amp;gt;&lt;br /&gt;
#Установка заданного ослабления&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
{|table class=&amp;quot;wikitable collapsible collapsed&amp;quot;&lt;br /&gt;
! colspan =&amp;quot;3&amp;quot;| Методы&lt;br /&gt;
|-&lt;br /&gt;
! Метод&lt;br /&gt;
! Входные аргументы&lt;br /&gt;
! Возвращает&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SetAttenuation(ATT)'''&amp;lt;br /&amp;gt;Установка заданного ослабления&amp;lt;br /&amp;gt;||ATT - ослабление, дБ&amp;lt;br /&amp;gt;||1, если операция успешна, иначе 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Класс CReceiver ===&lt;br /&gt;
==== Описание ====&lt;br /&gt;
Класс, созданный для работы с навигационными модулями. &amp;lt;br /&amp;gt;На данный момент реализованы следующие возможности: &amp;lt;br /&amp;gt;&lt;br /&gt;
#Рестарт приемника (для GEOS - 3)&lt;br /&gt;
#Получение статуса решения и сохранение его в переменную класса FixType (для GEOS - 3)&lt;br /&gt;
#Чтение данных, посылаемых приемником по последовательному порту&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
{|table class=&amp;quot;wikitable collapsible collapsed&amp;quot;&lt;br /&gt;
! colspan =&amp;quot;3&amp;quot;|Методы&lt;br /&gt;
|-&lt;br /&gt;
! Метод&lt;br /&gt;
! Входные аргументы&lt;br /&gt;
! Возвращает&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SerialConfig(COM, Baud)'''&amp;lt;br /&amp;gt;Настройка соединения&amp;lt;br /&amp;gt;||COM,string - имя порта&amp;lt;br /&amp;gt;Baud - скорость передачи данных&amp;lt;br /&amp;gt;|| ---&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SerialConnect'''&amp;lt;br /&amp;gt;Соединение с приемником&amp;lt;br /&amp;gt;|| --- ||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''RecieveString'''&amp;lt;br /&amp;gt;Однократное чтение данных&amp;lt;br /&amp;gt;|| --- ||[Answer]&amp;lt;br /&amp;gt;строка данных&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''SerialClose'''&amp;lt;br /&amp;gt;Закрытие соединения&amp;lt;br /&amp;gt;|| --- ||1, если операция успешна, иначе 0&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''&amp;lt;br /&amp;gt;Перезагрузка приемника&amp;lt;br /&amp;gt;|| --- || ---&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|'''GetSolutionStatus''' &amp;lt;br /&amp;gt;Получение статуса решения и сохранение его в переменную класса FixType (для GEOS - 3)|| --- || ---&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Пример использования ==&lt;br /&gt;
&lt;br /&gt;
Для проверки созданных классов был проведен эксперимент по определению чувствительности модуля GEOS - 3 в режиме слежения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;NavFrame collapsed&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;NavHead&amp;quot;&amp;gt;Листинг matlab&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;NavContent&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
SMBV = CSMBV;&lt;br /&gt;
Rec = CReceiver;&lt;br /&gt;
&lt;br /&gt;
%соединение с SMBV&lt;br /&gt;
[Stat] = SMBV.SetConnection('192.168.1.22',5025);&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Connection problem')&lt;br /&gt;
end&lt;br /&gt;
%сброс настроек SMBV в дефолтные, очистка лога ошибок&lt;br /&gt;
[Stat] = SMBV.Preset;&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Error')&lt;br /&gt;
end&lt;br /&gt;
%запрос модели, серийного номера&lt;br /&gt;
[Stat, result] = SMBV.GetIDN;&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Error')&lt;br /&gt;
end&lt;br /&gt;
disp(result);&lt;br /&gt;
%проверка системных ошибок&lt;br /&gt;
[status, result] = SMBV.SendQuery('SYST:SERR?');&lt;br /&gt;
if (result(1) ~= '0' || status == 0 )&lt;br /&gt;
disp (['*** Instrument error : ' result]);&lt;br /&gt;
return;&lt;br /&gt;
end&lt;br /&gt;
%начальные настройки эксперимента&lt;br /&gt;
StartLevel = -95; % стартовая мощность сигнала&lt;br /&gt;
%запуск имитации сигнала GPS&lt;br /&gt;
[Stat] = SMBV.SetGPS(6);&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Error')&lt;br /&gt;
end&lt;br /&gt;
%установка стартовой мощности&lt;br /&gt;
[Stat] = SMBV.SetLevel(StartLevel);&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Error')&lt;br /&gt;
end&lt;br /&gt;
[Stat] = SMBV.SetRFOutput('ON');&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Error')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%Настройка соединения с приемником&lt;br /&gt;
Rec.SerialConfig('COM6',115200);&lt;br /&gt;
%Соединение с приемником&lt;br /&gt;
Stat = Rec.SerialConnect;&lt;br /&gt;
if (Stat == 0)&lt;br /&gt;
    error('Serial: connection problem')&lt;br /&gt;
end&lt;br /&gt;
%Перезагрузка приемника, запуск отсчета времени на даннй мощности&lt;br /&gt;
Rec.Reset;&lt;br /&gt;
pause(70);&lt;br /&gt;
tin_thislevel = tic;&lt;br /&gt;
&lt;br /&gt;
%Параметры эксперимента: шаг изменения мощности, ожидание на мощности&lt;br /&gt;
LevelStep = 1; PauseOnLevel = 30;&lt;br /&gt;
HaveFix = 0;&lt;br /&gt;
k = 1;&lt;br /&gt;
RecIsDead5sec = 0;&lt;br /&gt;
RecOkOnLastStep = 0;&lt;br /&gt;
Pow_arr = cell(1,1);&lt;br /&gt;
p = 1;&lt;br /&gt;
m = 0;&lt;br /&gt;
&lt;br /&gt;
%цикл эксперимента&lt;br /&gt;
while (1)&lt;br /&gt;
    &lt;br /&gt;
    Rec.GetSolutionStatus;&lt;br /&gt;
    &lt;br /&gt;
    if (Rec.FixType == 3)&lt;br /&gt;
        RecOkOnLastStep = 1;&lt;br /&gt;
        HaveFix = 1;&lt;br /&gt;
        if (toc(tin_thislevel) &amp;gt; PauseOnLevel)&lt;br /&gt;
            LastOkLevel = SMBV.Level;&lt;br /&gt;
            Pow_arr{p,1} = [LastOkLevel 1];&lt;br /&gt;
            p = p + 1;&lt;br /&gt;
            if (LastOkLevel &amp;lt;= -95 &amp;amp;&amp;amp; LastOkLevel &amp;gt;= -118) &lt;br /&gt;
                LevelStep = 8;&lt;br /&gt;
            elseif (LastOkLevel == -119)&lt;br /&gt;
                LevelStep = 2;&lt;br /&gt;
            elseif (LastOkLevel &amp;lt;= -120 &amp;amp;&amp;amp; LastOkLevel &amp;gt;= -135)&lt;br /&gt;
                LevelStep = 0.5;&lt;br /&gt;
            end&lt;br /&gt;
            Stat = SMBV.SetLevel(LastOkLevel - LevelStep);&lt;br /&gt;
            if (Stat == 0)&lt;br /&gt;
                error('SMBV error')&lt;br /&gt;
            end&lt;br /&gt;
            tin_thislevel = tic;&lt;br /&gt;
        end&lt;br /&gt;
    elseif ((Rec.FixType == 1 || Rec.FixType == 2) &amp;amp;&amp;amp; RecOkOnLastStep == 1 )&lt;br /&gt;
        DeathTime = tic;&lt;br /&gt;
    end&lt;br /&gt;
   &lt;br /&gt;
    if ((Rec.FixType == 1 || Rec.FixType ==2) &amp;amp;&amp;amp; HaveFix == 1 &amp;amp;&amp;amp; RecOkOnLastStep == 0 )&lt;br /&gt;
    if ( toc(DeathTime) &amp;gt; 5 )&lt;br /&gt;
        RecIsDead5sec = 1;&lt;br /&gt;
    else&lt;br /&gt;
        RecIsDead5sec = 0;&lt;br /&gt;
    end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (Rec.FixType == 1 || Rec.FixType == 2)&lt;br /&gt;
        RecOkOnLastStep = 0;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (RecIsDead5sec == 1)&lt;br /&gt;
        ResultLevel(k) = LastOkLevel;&lt;br /&gt;
        k = k + 1;&lt;br /&gt;
        Pow_arr{p,1} = [(LastOkLevel - LevelStep) 0];&lt;br /&gt;
        p = p + 1;&lt;br /&gt;
        file = [num2str(m) 'MSHUpower.mat'];&lt;br /&gt;
        save(file, 'Pow_arr');&lt;br /&gt;
        m = m + 1;&lt;br /&gt;
        Rec.Reset;&lt;br /&gt;
        SMBV.SetLevel(StartLevel);&lt;br /&gt;
        HaveFix = 0;&lt;br /&gt;
        RecOkOnLastStep = 0;&lt;br /&gt;
        RecIsDead5sec = 0;&lt;br /&gt;
        toc(DeathTime);&lt;br /&gt;
        pause(70);&lt;br /&gt;
        tin_thislevel  = tic;&lt;br /&gt;
               &lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Korogodin/arcticsea Ссылка]на репозиторий&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov</id>
		<title>Blog:Boldenkov</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov"/>
				<updated>2025-09-04T10:17:53Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Болденков, Евгений Николаевич|Страница Евгения...]], '''контактная информация там же'''. &lt;br /&gt;
&lt;br /&gt;
[[Special:Wikilog/User:Boldenkov|Поиск по блогу...]]&lt;br /&gt;
{{Форма3}}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Lipa/07.08.2020_QEMU_Virtualization</id>
		<title>Blog:Lipa/07.08.2020 QEMU Virtualization</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Lipa/07.08.2020_QEMU_Virtualization"/>
				<updated>2025-09-04T08:38:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary  hidden=true&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:QEMU.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Виртуализация petalinux на хосте!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
== INTRO ==&lt;br /&gt;
Качаем читаем [[:File:ug982-petalinux-system-simulation_QEMU.pdf]]&lt;br /&gt;
&lt;br /&gt;
== SD-card create ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/k0nze/qemu_zynq_linux_setup инструкция]&lt;br /&gt;
&lt;br /&gt;
Выкачиваем [https://github.com/qemu/qemu.git репозиторий qemu]&lt;br /&gt;
&lt;br /&gt;
Ставим в систему nbd&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install nbd-client &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod | grep nbd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если нет модуля - загружаем его:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe nbd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ставим в систему pixman&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libpixman-1-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможно:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev&lt;br /&gt;
sudo apt-get install ninja-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инициализируем подмодуль:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd qemu&lt;br /&gt;
git submodule update --init dtc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исполняем:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure --target-list=&amp;quot;aarch64-softmmu&amp;quot; --enable-fdt --disable-kvm --disable-xen make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем файл-образ флешки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/git/qemu/qemu-img create -f qcow2 ~/clonicus_1.2.3/sdcard/sdcard.qcow2 256M&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подключаем образ к хосту:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ~/git/qemu/build/qemu-nbd --connect=/dev/nbd0 ~/clonicus_1.2.3/sdcard/sdcard.qcow2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверяем подключение:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo fdisk /dev/nbd0 -l&lt;br /&gt;
&lt;br /&gt;
Диск /dev/nbd0: 256 MiB, 268435456 байтов, 524288 секторов&lt;br /&gt;
Единицы измерения: секторов из 1 * 512 = 512 байтов&lt;br /&gt;
Размер сектора (логический/физический): 512 байт / 512 байт&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Форматируем флешку:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo fdisk /dev/nbd0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:sd_table.rar]]&lt;br /&gt;
Таблица форматирования&lt;br /&gt;
Размеченный файл-образ, берем, пользуем&lt;br /&gt;
&lt;br /&gt;
== START ==&lt;br /&gt;
&lt;br /&gt;
Заходим по ssh на виртуальный petalinux&lt;br /&gt;
&lt;br /&gt;
'''Пока что не получается заменить IP адрес.''' Используем 10.0.2.15&lt;br /&gt;
&lt;br /&gt;
Необходимо переименовать на флешке файл interfaces, чтобы он не ломал настройки&lt;br /&gt;
&lt;br /&gt;
Перенаправляем порты ssh при вызове запуска виртуалки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-boot --qemu --kernel --qemu-args &amp;quot;-redir tcp:10022:10.0.2.15:22 -drive file=sdcard.qcow2,if=sd,index=0,media=disk&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее коннектимся с хоста:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh-copy-id root@localhost -p 10022&lt;br /&gt;
ssh root@localhost -p 10022&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Копирование по ssh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
scp -P 10022 &amp;lt;source&amp;gt;  root@localhost:&amp;lt;destination&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Прерывать симуляцию:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Ctrl-A X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Работает SSH и подгружаются скрипты с подмонтированной SD-карточки. Цветная консоль, ключи ssh...&lt;br /&gt;
&lt;br /&gt;
== Native QEMU ==&lt;br /&gt;
&lt;br /&gt;
Забываем, все, что выше. Запускаем петалинукс на чистом QEMU&lt;br /&gt;
&lt;br /&gt;
качаем [https://github.com/qemu/qemu.git репозиторий qemu]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Исполняем:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure --target-list=&amp;quot;arm-softmmu&amp;quot; --enable-fdt --disable-kvm --disable-xen&lt;br /&gt;
make -j24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
переходим в build, создаем скрипт запуска&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
./qemu-system-arm -M xilinx-zynq-a9 -m 256M \&lt;br /&gt;
-device loader,file=/home/ivan/linux/u-boot.elf \&lt;br /&gt;
-drive file=/home/ivan/git/SD/sdcard.qcow2,if=sd,index=0,media=disk \&lt;br /&gt;
-serial stdio&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QEMU + Questa ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:Oryx]]&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
[[Category:Qemu]]&lt;br /&gt;
[[Category:Debug]]&lt;br /&gt;
{{wl-publish: 2020-08-07 09:45:50 +0300 | Lipa }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux</id>
		<title>Blog:Lipa/16.05.2018 PetaLinux</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux"/>
				<updated>2025-09-04T08:38:16Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Petalinux.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сборка PetaLinux для кастомной железки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
== Требования ==&lt;br /&gt;
&lt;br /&gt;
Vivado 2018.1 (для single-gigabit ethernet можно более ранние версии)&lt;br /&gt;
&lt;br /&gt;
Начиная с petalinux_2018.1 отсутствует devcfg. Необходимо использовать FPGA manager. Технология нами пока не освоена&lt;br /&gt;
&lt;br /&gt;
Необходима Ubuntu-16.04&lt;br /&gt;
&lt;br /&gt;
Требуется поставить ряд пакетов, полный список приведен в документе [https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug1144-petalinux-tools-reference-guide.pdf#page=9 UG1144]&lt;br /&gt;
&lt;br /&gt;
Устанавливаем PetaLinux в систему. Дистрибутив есть на [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2018-1.html Xilinx], либо у меня на компьютере. '''Ставить PetaLinux необходимо БЕЗ прав суперюзера!'''&lt;br /&gt;
&lt;br /&gt;
кидаем в /components/yocto/ sstate-rel-v2017.4.tar.gz&lt;br /&gt;
&lt;br /&gt;
Подготовка завершена&lt;br /&gt;
&lt;br /&gt;
== Правка Vivado ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки MDIO в Vivado 17.1-17.4 нужен [https://www.xilinx.com/support/answers/69132.html патч]. Ставим!&lt;br /&gt;
&lt;br /&gt;
'''Не помогло.''' Ставим 2018.1&lt;br /&gt;
&lt;br /&gt;
== Сборка ==&lt;br /&gt;
&lt;br /&gt;
Пошаговое руководство по сборке содержится в документе UG1156&lt;br /&gt;
&lt;br /&gt;
В консоли пишем source/[путь к петалинух]/settings.sh&lt;br /&gt;
&lt;br /&gt;
Выполняем шаги из UG1156 по главе 5:&lt;br /&gt;
&lt;br /&gt;
* экспортируем из Vivado .hdf (в блок дизайн File-&amp;gt;Export-&amp;gt;Export Hardware)&lt;br /&gt;
&lt;br /&gt;
* создаем проект PetaLinux&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-create --type project --template zynq --name &amp;lt;PROJECT&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* переходим в папку с текущим проектом&lt;br /&gt;
&lt;br /&gt;
* подключаем файл .hdf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config --get-hw-description=[путь к папке с файлом .hdf]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* перед сборкой системы необходимо выполнить '''все''' команды конфигурации в данной последовательности:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c rootfs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config ===&lt;br /&gt;
&lt;br /&gt;
Если хотим спользовать внешний файл device-tree включаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Subsystem AUTO Hardware Settings-&amp;gt;&lt;br /&gt;
     Advances bootable images storage settings-&amp;gt;&lt;br /&gt;
          dtb image settings-&amp;gt;&lt;br /&gt;
               image storage media&lt;br /&gt;
                    primary sd&lt;br /&gt;
               &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset если оперативной памяти менее ~256МБ&lt;br /&gt;
&lt;br /&gt;
Для клоникуса с 256МБ ставим 8'000'000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выставляем точку начала распаковки образа системы&lt;br /&gt;
&lt;br /&gt;
Выключаем копирование образа по sftp (Image Packaging Configuration -&amp;gt; Copy final images)&lt;br /&gt;
&lt;br /&gt;
Отключаем интернет-sstate (Yocto Settings -&amp;gt; Enable Network sstate feeds)&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c kernel===&lt;br /&gt;
&lt;br /&gt;
* Подключаем в ядре поддержку физика и его дров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для oryx:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*]Ethernet driver support -&amp;gt;&lt;br /&gt;
               [*] Micrel devices&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Drivers for Micrel PHYs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для clonicus:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Texas Instruments DP83867 Gigabit PHY&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c rootfs ===&lt;br /&gt;
&lt;br /&gt;
Подключаем при необходимости ethtool, gdbserver, gdb, libstdc, libgcc, glib2.0, glibc(glibc &amp;amp; ltd)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc -&amp;gt;&lt;br /&gt;
          gcc-runtime -&amp;gt;&lt;br /&gt;
               [*] libstdc ++&lt;br /&gt;
          gdb --&amp;gt;&lt;br /&gt;
               [*] gdb&lt;br /&gt;
          glib-2.0&lt;br /&gt;
               [*] glib-2.0&lt;br /&gt;
          glibc&lt;br /&gt;
               [*] glibc&lt;br /&gt;
               [*] ldd&lt;br /&gt;
     devel -&amp;gt;&lt;br /&gt;
          python -&amp;gt;&lt;br /&gt;
               python -&amp;gt;&lt;br /&gt;
                    [*] python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опционально:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
          usbutils -&amp;gt;&lt;br /&gt;
               [*] usbutils&lt;br /&gt;
     console -&amp;gt;&lt;br /&gt;
          network -&amp;gt;&lt;br /&gt;
               ethtool -&amp;gt;&lt;br /&gt;
                    [*] ethtool // необходимо для oryx! для перенастройки autonegotiation&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно еще подключать дебаг i2c&lt;br /&gt;
&lt;br /&gt;
'''Необходимо убедиться, что  образ может распаковаться в размер оперативы'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если будут проблемы, то надо будет править netboot offset&lt;br /&gt;
&lt;br /&gt;
=== device tree ===&lt;br /&gt;
&lt;br /&gt;
Если необходимо внести изменения в device tree, то смотрим конец статьи&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841676/U-Boot+Flattened+Device+Tree Интересная статья по правке devicetree из uboot]&lt;br /&gt;
&lt;br /&gt;
=== Сборка проекта ===&lt;br /&gt;
&lt;br /&gt;
* далее (сборка идет 30-60 минут)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&lt;br /&gt;
cd /images/linux/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* делаем boot.bin в папке /images/linux/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --force&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --kernel --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* записываем в загрузочную область флешки файлы boot.bin и image.ub&lt;br /&gt;
&lt;br /&gt;
== Всякое ==&lt;br /&gt;
&lt;br /&gt;
Если мало памяти как у нас - возможна ошибка image is not a fdt [https://forums.xilinx.com/t5/Embedded-Processor-System-Design/Petalinux-problem-on-custom-board-quot-image-is-not-a-fdt-quot/td-p/754892 ссылка]&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Можно вручную загрузиться из u-boot'а.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ bootm 0xA000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
$ bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно поварьировать адрес&lt;br /&gt;
&lt;br /&gt;
------------&lt;br /&gt;
&lt;br /&gt;
Проверка статуса прошитости FPGA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /sys/class/xdevcfg/xdevcfg/device/prog_done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uboot==&lt;br /&gt;
&lt;br /&gt;
Для внесения правок в загрузку линукса используем список команд '''env'''&lt;br /&gt;
&lt;br /&gt;
Просмотр текущих команд '''printenv'''&lt;br /&gt;
&lt;br /&gt;
Сброс настроек в дефолт '''env default -a'''&lt;br /&gt;
&lt;br /&gt;
Создать переменную '''env set &amp;lt;имя&amp;gt; &amp;lt;значение&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Правка переменной '''env edit &amp;lt;имя переменной&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Для каждой платы делаем следующее:&lt;br /&gt;
&lt;br /&gt;
* Берем [[Файл:uboot.env.c]]&lt;br /&gt;
&lt;br /&gt;
* Удаляем в конце имени &amp;quot;.c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Записываем на флешку рядом с образом линукса&lt;br /&gt;
&lt;br /&gt;
* Запускаем плату и прерываем autoboot&lt;br /&gt;
&lt;br /&gt;
* Пишем '''editenv ethaddr'''&lt;br /&gt;
&lt;br /&gt;
* Редактируем MAC-адрес&lt;br /&gt;
&lt;br /&gt;
* Пишем '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
* Все! можем ребутать '''reset'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохранить в файл '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
==Автозапуск приложений==&lt;br /&gt;
&lt;br /&gt;
Во-первых [https://support.xilinx.com/s/question/0D52E00006hpahDSAQ/petalinux-runnning-a-script-file-at-startup?language=en_US тыц]&lt;br /&gt;
&lt;br /&gt;
Далее пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t apps --template install -n myapp-init --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим файл /project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# This file is the myapp-init recipe.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
SUMMARY = &amp;quot;Simple myapp-init application&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;PETALINUX/apps&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
LIC_FILES_CHKSUM = &amp;quot;file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SRC_URI = &amp;quot;file://myapp-init&amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FILESEXTRAPATHS_prepend := &amp;quot;${THISDIR}/files:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit update-rc.d&lt;br /&gt;
&lt;br /&gt;
INITSCRIPT_NAME = &amp;quot;myapp-init&amp;quot;&lt;br /&gt;
INITSCRIPT_PARAMS = &amp;quot;start 99 S .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
    install -d ${D}${sysconfdir}/init.d&lt;br /&gt;
    install -m 0755 ${S}/myapp-init ${D}${sysconfdir}/init.d/myapp-init&lt;br /&gt;
}&lt;br /&gt;
FILES_${PN} += &amp;quot;${sysconfdir}/*&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим сам исполняемый скрипт project-spec/meta-user/recipes-apps/myapp-init/files/myapp-init&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Autorun script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Try run custom_init&amp;quot;&lt;br /&gt;
sh /run/media/mmcblk0p1/custom_init.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Записываем на флешку скрипт custom_init.sh с нужными командами и делаем его исполняемым&lt;br /&gt;
&lt;br /&gt;
Записываем файл interfaces&lt;br /&gt;
&lt;br /&gt;
Скачать архив: [[Файл:Init_interfaces.rar]]&lt;br /&gt;
&lt;br /&gt;
==SSH==&lt;br /&gt;
&lt;br /&gt;
Как победить сохранение ssh-ключей:&lt;br /&gt;
&lt;br /&gt;
Добавляем в init_script следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /run/media/mmcblk0p2/.ssh&lt;br /&gt;
ln -s /run/media/mmcblk0p2/.ssh/ /home/root/&lt;br /&gt;
mkdir /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
chmod 400 /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
rm -r /etc/dropbear/&lt;br /&gt;
ln -s /run/media/mmcblk0p2/dropbear/ /etc/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создается ссылка на флешку, где хранятся авторизованные пользователи&lt;br /&gt;
* Создается папка для хранения секретного ключа платы&lt;br /&gt;
* При запуске платы свежесозданный ключ заменяется тем, что лежит на флешке&lt;br /&gt;
* При первом включении платы будет создан новый ключ&lt;br /&gt;
&lt;br /&gt;
Помимо добавления указанных команд в скрипт ничего больше делать не надо&lt;br /&gt;
&lt;br /&gt;
==Daemon==&lt;br /&gt;
&lt;br /&gt;
Для настройки демона:&lt;br /&gt;
&lt;br /&gt;
* Добавляем строки в файл custom_init.sh&lt;br /&gt;
* Кидаем на загрузочный раздел флешки папку из архива [[:File:daemon.rar]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp -r /run/media/mmcblk0p1/daemon/lsb /lib/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serial port на новом линуксе ===&lt;br /&gt;
Выяснилось, что без доп. настройки, в последовательный порт (dev/ttyPS0) после каждой посылки добавляются символы CR и LF. Оказалось, что и RTKLib, и софт Листопада не хотят работать с таким окончанием пакетов.&lt;br /&gt;
&lt;br /&gt;
Выше не совсем так, скорее мысль в том, что каждый символ LF (0x0A) в наших данных меняется на символы CR LF, т.е. (0x0D0A). И тогда, в нашем битовом потоке меняется размер и содержимое и парсеры работают некорректно.&lt;br /&gt;
Старый линукс на Ориксах добавляет только LF. Для решения проблемы нужно через stty выключить в настройках порта опцию '''onlcr''' (преобразовывать перевод строки в возврат каретки и новую строку).&lt;br /&gt;
&lt;br /&gt;
Сделать это удалось пока только изменив скрипт демона receiver. Для решения проблемы заходим в /run/media/mmcblk0p1/daemon/receiver, и в начале секции receiver_start() {...} добавляем команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stty -F /dev/ttyPS0 -onlcr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==device tree==&lt;br /&gt;
&lt;br /&gt;
Для внесения изменений в device tree добавляем нужные строки в файл&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
[https://www.xilinx.com/support/answers/61117.html пример]&lt;br /&gt;
&lt;br /&gt;
Для разборки device-tree [http://xillybus.com/tutorials/device-tree-zynq-1 ссылка]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dtb -O dts -o &amp;lt;name&amp;gt;.dts &amp;lt;name&amp;gt;.dtb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для сборки device-tree&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dts -O dtb -o &amp;lt;name&amp;gt;.dtb &amp;lt;name&amp;gt;.dts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Модификация device-tree ==&lt;br /&gt;
&lt;br /&gt;
После долгих мучений получилось поднять DP83867 только после добавления модификатора в файл [https://forums.xilinx.com/t5/Embedded-Linux/ZC702-Like-Board-with-DP83867CR-Ethernet-Petalinux-2017-4/td-p/831873 волшебная статья]&lt;br /&gt;
&lt;br /&gt;
[https://www.kernel.org/doc/Documentation/devicetree/bindings/net/ti%2Cdp83867.txt описание параметров]&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
=== Single Kit-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth1(с mdio) и выключен eth0.&lt;br /&gt;
&lt;br /&gt;
'''Так работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок =  Развернутый .dtb:}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dts-v1/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
	#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	compatible = &amp;quot;xlnx,zynq-7000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	cpus {&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
		cpu@0 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
			clock-latency = &amp;lt;0x3e8&amp;gt;;&lt;br /&gt;
			cpu0-supply = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			operating-points = &amp;lt;0xa2c2a 0xf4240 0x51615 0xf4240&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cpu@1 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fpga-full {&lt;br /&gt;
		compatible = &amp;quot;fpga-region&amp;quot;;&lt;br /&gt;
		fpga-mgr = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	pmu@f8891000 {&lt;br /&gt;
		compatible = &amp;quot;arm,cortex-a9-pmu&amp;quot;;&lt;br /&gt;
		interrupts = &amp;lt;0x0 0x5 0x4 0x0 0x6 0x4&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		reg = &amp;lt;0xf8891000 0x1000 0xf8893000 0x1000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fixedregulator {&lt;br /&gt;
		compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
		regulator-name = &amp;quot;VCCPINT&amp;quot;;&lt;br /&gt;
		regulator-min-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-max-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-boot-on;&lt;br /&gt;
		regulator-always-on;&lt;br /&gt;
		linux,phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	amba {&lt;br /&gt;
		u-boot,dm-pre-reloc;&lt;br /&gt;
		compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
&lt;br /&gt;
		adc@f8007100 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-xadc-1.00.a&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8007100 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x7 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0008000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x13 0x1 0x24&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0008000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1c 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0009000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x14 0x1 0x25&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0009000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x33 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		gpio@e000a000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-gpio-1.0&amp;quot;;&lt;br /&gt;
			#gpio-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2a&amp;gt;;&lt;br /&gt;
			gpio-controller;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x14 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000a000 0x1000&amp;gt;;&lt;br /&gt;
			emio-gpio-width = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			gpio-mask-high = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			gpio-mask-low = &amp;lt;0x5600&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0004000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0005000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		interrupt-controller@f8f01000 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-gic&amp;quot;;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			reg = &amp;lt;0xf8f01000 0x1000 0xf8f00100 0x100&amp;gt;;&lt;br /&gt;
			num_cpus = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			num_interrupts = &amp;lt;0x60&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cache-controller@f8f02000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl310-cache&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f02000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2 0x4&amp;gt;;&lt;br /&gt;
			arm,data-latency = &amp;lt;0x3 0x2 0x2&amp;gt;;&lt;br /&gt;
			arm,tag-latency = &amp;lt;0x2 0x2 0x2&amp;gt;;&lt;br /&gt;
			cache-unified;&lt;br /&gt;
			cache-level = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@f8006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ddrc-a05&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8006000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ocmc@f800c000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ocmc-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x3 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf800c000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0000000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x17 0x1 0x28&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0000000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1b 0x4&amp;gt;;&lt;br /&gt;
			device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
			port-number = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0001000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x18 0x1 0x29&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0001000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x32 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0006000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1a 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x19 0x1 0x22&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0007000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x31 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1a 0x1 0x23&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e000d000 {&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xa 0x1 0x2b&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-qspi-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x13 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000d000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@e000e000 {&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;memclk&amp;quot;, &amp;quot;aclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xb 0x1 0x2c&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,pl353-smc-r2p1&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x12 0x4&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			reg = &amp;lt;0xe000e000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			flash@e1000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;arm,pl353-nand-r2p1&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe1000000 0x1000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			flash@e2000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;cfi-flash&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe2000000 0x2000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000b000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000b000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x16 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1e 0x1 0x1e 0x1 0xd&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000c000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000c000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2d 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1f 0x1 0x1f 0x1 0xe&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
			xlnx,ptp-enet-clock = &amp;lt;0x69f6bcb&amp;gt;;&lt;br /&gt;
			local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
			phy-handle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
			xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			mdio {&lt;br /&gt;
				status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
				phy@12 {&lt;br /&gt;
					compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
					device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
					reg = &amp;lt;0xc&amp;gt;;&lt;br /&gt;
					ti,rx-internal-delay = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
					ti,tx-internal-delay = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
					ti,fifo-depth = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
					ti,min-output-impedance;&lt;br /&gt;
					ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
					status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
					linux,phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
					phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
				};&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0100000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x15 0x1 0x20&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x18 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0100000 0x1000&amp;gt;;&lt;br /&gt;
			xlnx,has-cd = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			xlnx,has-power = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			xlnx,has-wp = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0101000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x16 0x1 0x21&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2f 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0101000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		slcr@f8000000 {&lt;br /&gt;
			u-boot,dm-pre-reloc;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-slcr&amp;quot;, &amp;quot;syscon&amp;quot;, &amp;quot;simple-mfd&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8000000 0x1000&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			linux,phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			clkc@100 {&lt;br /&gt;
				u-boot,dm-pre-reloc;&lt;br /&gt;
				#clock-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				compatible = &amp;quot;xlnx,ps7-clkc&amp;quot;;&lt;br /&gt;
				fclk-enable = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
				clock-output-names = &amp;quot;armpll&amp;quot;, &amp;quot;ddrpll&amp;quot;, &amp;quot;iopll&amp;quot;, &amp;quot;cpu_6or4x&amp;quot;, &amp;quot;cpu_3or2x&amp;quot;, &amp;quot;cpu_2x&amp;quot;, &amp;quot;cpu_1x&amp;quot;, &amp;quot;ddr2x&amp;quot;, &amp;quot;ddr3x&amp;quot;, &amp;quot;dci&amp;quot;, &amp;quot;lqspi&amp;quot;, &amp;quot;smc&amp;quot;, &amp;quot;pcap&amp;quot;, &amp;quot;gem0&amp;quot;, &amp;quot;gem1&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;, &amp;quot;can0&amp;quot;, &amp;quot;can1&amp;quot;, &amp;quot;sdio0&amp;quot;, &amp;quot;sdio1&amp;quot;, &amp;quot;uart0&amp;quot;, &amp;quot;uart1&amp;quot;, &amp;quot;spi0&amp;quot;, &amp;quot;spi1&amp;quot;, &amp;quot;dma&amp;quot;, &amp;quot;usb0_aper&amp;quot;, &amp;quot;usb1_aper&amp;quot;, &amp;quot;gem0_aper&amp;quot;, &amp;quot;gem1_aper&amp;quot;, &amp;quot;sdio0_aper&amp;quot;, &amp;quot;sdio1_aper&amp;quot;, &amp;quot;spi0_aper&amp;quot;, &amp;quot;spi1_aper&amp;quot;, &amp;quot;can0_aper&amp;quot;, &amp;quot;can1_aper&amp;quot;, &amp;quot;i2c0_aper&amp;quot;, &amp;quot;i2c1_aper&amp;quot;, &amp;quot;uart0_aper&amp;quot;, &amp;quot;uart1_aper&amp;quot;, &amp;quot;gpio_aper&amp;quot;, &amp;quot;lqspi_aper&amp;quot;, &amp;quot;smc_aper&amp;quot;, &amp;quot;swdt&amp;quot;, &amp;quot;dbg_trc&amp;quot;, &amp;quot;dbg_apb&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x100 0x100&amp;gt;;&lt;br /&gt;
				ps-clk-frequency = &amp;lt;0x1fca055&amp;gt;;&lt;br /&gt;
				linux,phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			rstc@200 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,zynq-reset&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x200 0x48&amp;gt;;&lt;br /&gt;
				#reset-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			pinctrl@700 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,pinctrl-zynq&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x700 0x200&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		dmac@f8003000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl330&amp;quot;, &amp;quot;arm,primecell&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8003000 0x1000&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupt-names = &amp;quot;abort&amp;quot;, &amp;quot;dma0&amp;quot;, &amp;quot;dma1&amp;quot;, &amp;quot;dma2&amp;quot;, &amp;quot;dma3&amp;quot;, &amp;quot;dma4&amp;quot;, &amp;quot;dma5&amp;quot;, &amp;quot;dma6&amp;quot;, &amp;quot;dma7&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xd 0x4 0x0 0xe 0x4 0x0 0xf 0x4 0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x28 0x4 0x0 0x29 0x4 0x0 0x2a 0x4 0x0 0x2b 0x4&amp;gt;;&lt;br /&gt;
			#dma-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#dma-channels = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
			#dma-requests = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1b&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;apb_pclk&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		devcfg@f8007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-devcfg-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x8 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8007000 0x100&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc 0x1 0xf 0x1 0x10 0x1 0x11 0x1 0x12&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;;&lt;br /&gt;
			syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		efuse@f800d000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-efuse&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf800d000 0x20&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00200 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-global-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00200 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xb 0x301&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8001000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xa 0x4 0x0 0xb 0x4 0x0 0xc 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8001000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8002000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x25 0x4 0x0 0x26 0x4 0x0 0x27 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8002000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00600 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xd 0x301&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-twd-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00600 0x20&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0002000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1c&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x15 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0003000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1d&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2c 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0003000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		watchdog@f8005000 {&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2d&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,wdt-r1p2&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x9 0x1&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8005000 0x1000&amp;gt;;&lt;br /&gt;
			timeout-sec = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	chosen {&lt;br /&gt;
		bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk&amp;quot;;&lt;br /&gt;
		stdout-path = &amp;quot;serial0:115200n8&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	aliases {&lt;br /&gt;
		ethernet0 = &amp;quot;/amba/ethernet@e000c000&amp;quot;;&lt;br /&gt;
		serial0 = &amp;quot;/amba/serial@e0000000&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	memory {&lt;br /&gt;
		device_type = &amp;quot;memory&amp;quot;;&lt;br /&gt;
		reg = &amp;lt;0x0 0x10000000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
=== Single On-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
&lt;br /&gt;
'''Работает гигабит через type-c! Работает hot plug. Успех.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dual eth ===&lt;br /&gt;
&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Dual-phys-on-MDIO-EMIO/td-p/737716 интересная статья о дуал eth]&lt;br /&gt;
&lt;br /&gt;
Попытка поднять два физика. '''Пока не работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 00];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 01];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oryx ===&lt;br /&gt;
&lt;br /&gt;
Итоговый system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Меняем номера uart, чтобы системным был ttyPS1, а пользовательским ttyPS0&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
        serial0 = &amp;amp;uart0;&lt;br /&gt;
        serial1 = &amp;amp;uart1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS1,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
            stdout-path = &amp;quot;serial1:115200n8&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
            compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
            interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
            interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart0{&lt;br /&gt;
    port-number = &amp;lt;0&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart1{&lt;br /&gt;
    port-number = &amp;lt;1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
Pullup пока что все включены&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Xilinx/u-boot-xlnx/blob/master/doc/device-tree-bindings/net/micrel-ksz90x1.txt статья в помощь]&lt;br /&gt;
&lt;br /&gt;
'''Работает'''&lt;br /&gt;
&lt;br /&gt;
На новых платах(с отпаянными линиями линиями eth):&lt;br /&gt;
* на полноценных проводах с ходу&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
На старых платах:&lt;br /&gt;
&lt;br /&gt;
* на полноценных проводах только если выставить 100 в ethtool&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
Везде работает так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!&lt;br /&gt;
&lt;br /&gt;
Можно в custom_itit.sh прописать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifdown eth0&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
ifup eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В принципе, работает сеть на новой плате с нормальным кабелем без модификации devicetree. Остальные комбинации плат-кабелей надо проверять&lt;br /&gt;
&lt;br /&gt;
== i2c ==&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages -&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для поиска устройств можно написать&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2cdetect -y -r 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842160/Cadence+I2C+Driver Статья] по i2c и RTC&lt;br /&gt;
&lt;br /&gt;
== QSPI Flash ==&lt;br /&gt;
&lt;br /&gt;
для работы по флешь памяти как в ките (S25FL128S) - оставляем в дев.три родные compatible = &amp;quot;n25q512a&amp;quot;,&amp;quot;micron,m25p80&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== SWDT System Watchdog Timer==&lt;br /&gt;
&lt;br /&gt;
* Модифицируем Uenv для настройки wawtchdog через uboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создаем скрипт для сброса watchdog:&lt;br /&gt;
&lt;br /&gt;
swdt_rst.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch -n 5 'devmem 0xf8005008 32 0x1999' &amp;amp;&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Добавляем вызов скрипта в автозагрузку&lt;br /&gt;
&lt;br /&gt;
PS Посмотреть можно в проекте bin/Clonicus, коммит ffc437e435d3b5c207bb1186a9561fd06a46d89f&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
* Включаем в ядро подходящий драйвер&lt;br /&gt;
&lt;br /&gt;
* Модифицируем device-tree&lt;br /&gt;
&lt;br /&gt;
Вставляем в девайс три:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    i2c0: i2c@e0004000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
        rtc@51 {&lt;br /&gt;
                compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
                reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
    i2c1: i2c@e0005000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет выглядеть так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2c@e0004000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    rtc@51 {&lt;br /&gt;
        compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
        reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
i2c@e0005000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если готового драйвера нет:&lt;br /&gt;
&lt;br /&gt;
UG1144 pg.54&lt;br /&gt;
&lt;br /&gt;
Создаем новый модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t modules --name &amp;lt;name_module&amp;gt; --enable&lt;br /&gt;
petalinux-create -t modules --name rtc-pcf85363 --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим исходный код в project-spec/meta-user/recipes-modules/rtc-pcf85363/files&lt;br /&gt;
&lt;br /&gt;
Исправленный драйвер лежит в git Clonicus\linux\&lt;br /&gt;
&lt;br /&gt;
Для удаления модуля:&lt;br /&gt;
&lt;br /&gt;
* удаляем папку из project-spec/meta-user/recipes-modules&lt;br /&gt;
&lt;br /&gt;
* В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку&lt;br /&gt;
&lt;br /&gt;
* переоткрыть petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Пробуем собрать модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c &amp;lt;name_module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И перепаковываем BOOT.bin&lt;br /&gt;
&lt;br /&gt;
Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)&lt;br /&gt;
&lt;br /&gt;
просмотр модулей&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
загрузить драйвер можно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/4.9.0-xilinx-v2017.4/extra/rtc-pcf85363.ko&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe rtc-pcf85363&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''&lt;br /&gt;
&lt;br /&gt;
Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC&lt;br /&gt;
&lt;br /&gt;
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -r -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Синхронизация rtc по системному времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим custom_init.sh для изменения default-rtc на наше устройство&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /dev/rtc&lt;br /&gt;
ln -s /dev/rtc2 /dev/rtc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установка системного времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
date --set &amp;quot;2013-7-31 09:30&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись системного времени в RTC&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись времени RTC в системное время&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -s&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить время с интеренета&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rdate -s &amp;lt;IP address of time server&amp;gt;&lt;br /&gt;
rdate -s 132.163.96.5 (example)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При перезагрузке &amp;quot;reboot&amp;quot; система автоматически запишет системное время в RTC&lt;br /&gt;
&lt;br /&gt;
== FPGA CONFIG from Uboot ==&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы прошить PL из uboot используем команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fpga loadb 0 &amp;lt;ddr_file_addr&amp;gt; &amp;lt;file_size&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо скриптами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit // читаем файл в ddr&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000 // прошиваем PL&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_loadipaddr // вызов самих скриптов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
0x10_0000 - начальный адрес ddr&lt;br /&gt;
&lt;br /&gt;
0x1_400_000 - размер в байтах для 20МБайт - указываем размер битника с запасом. Теоретически может так не работать, но работает&lt;br /&gt;
&lt;br /&gt;
== ETH over TTY==&lt;br /&gt;
&lt;br /&gt;
В ядре включаем: slip, Universal TUN/TAP&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем net-tools&lt;br /&gt;
&lt;br /&gt;
Включаем iptables для перемршрутизации между подсетями и для него:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[*] Networking support  ---&amp;gt;                                          [CONFIG_NET]&lt;br /&gt;
      Networking Options  ---&amp;gt;&lt;br /&gt;
        [*] Network packet filtering framework (Netfilter) ---&amp;gt;       [CONFIG_NETFILTER]&lt;br /&gt;
          [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]&lt;br /&gt;
          Core Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter connection tracking support               [CONFIG_NF_CONNTRACK]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]&lt;br /&gt;
          IP: Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PC1:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.1/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PC2:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.2/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
== UART_PL ==&lt;br /&gt;
&lt;br /&gt;
Включаем в настройках ядра поддержку uart_lite, выставляем правильное максимальное число уартов&lt;br /&gt;
&lt;br /&gt;
Модифицируем system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Обращаем внимание на нумерацию serial, axi_uartlite, она должна не повторяться. То же самое с interrupts &lt;br /&gt;
Указываем верный физический адрес на шине и диапазон адресов в &amp;lt;reg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
            serial2 = &amp;amp;axi_uartlite_0;&lt;br /&gt;
            serial3 = &amp;amp;axi_uartlite_1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
/ {&lt;br /&gt;
    amba_pl {&lt;br /&gt;
        #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
        ranges;&lt;br /&gt;
        &lt;br /&gt;
        axi_uartlite_0: serial@80000008 {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 30 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;3&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x80000008 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
        axi_uartlite_1: serial@8000001C {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 31 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;4&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x8000001C 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ПЛИС не прошита - будет кернел паник&lt;br /&gt;
&lt;br /&gt;
== IRQ ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки irq добавляем в device-tree&lt;br /&gt;
&lt;br /&gt;
'''Важно - мы перетираем bootargs!'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
                    compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
                    interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                    interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
                    reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
&lt;br /&gt;
Запустил на Z706&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver во-первых]&lt;br /&gt;
[http://zedboard.org/content/using-petalinux-configure-zedboard%EF%BC%8C-usb-otg-can-not-work во-вторых]&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2016-3-zynq-7010-USB-not-working/td-p/737696 в-третьих]&lt;br /&gt;
&lt;br /&gt;
В дефолтных настройках ядра petalinux_2018.1 все было включено&lt;br /&gt;
&lt;br /&gt;
включаем ресет на MIO7 pullup disabled&lt;br /&gt;
&lt;br /&gt;
все ноги интерфейса ulpi pullup disabled&lt;br /&gt;
&lt;br /&gt;
Содержимое system-user.dtsi&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
	/{&lt;br /&gt;
&lt;br /&gt;
    usb_phy0:phy0 {&lt;br /&gt;
&lt;br /&gt;
        compatible=&amp;quot;ulpi-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        #phy-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       view-port=&amp;lt;0x170&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       drv-vbus;&lt;br /&gt;
&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;amp;usb0 {&lt;br /&gt;
&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        dr_mode = &amp;quot;host&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        usb-phy = &amp;lt;&amp;amp;usb_phy0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB-ETHERNET ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     USB support -&amp;gt;&lt;br /&gt;
          [*] USB Modem (CDC ACM)&lt;br /&gt;
          USB Gadget Support -&amp;gt;&lt;br /&gt;
               [*] Ethernet Control Model (all)&lt;br /&gt;
               [*] RNDIS&lt;br /&gt;
               [*] Ethernet Emulation Model&lt;br /&gt;
               [*] CDC Composite Device (Ethernet and ACM)&lt;br /&gt;
               [*] USB Gadget Drivers (Ethernet gadget...)&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          USB Network Adapters -&amp;gt;&lt;br /&gt;
               [*] Realtek RTL8152/RTL8153&lt;br /&gt;
               [*] Multi-purpose USB Networking Framework&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi Dongle ==&lt;br /&gt;
&lt;br /&gt;
[https://forum.trenz-electronic.de/index.php?topic=747.0 раз]&lt;br /&gt;
[https://github.com/jinchenglee/zybo_linux_setup_doc два]&lt;br /&gt;
[http://billauer.co.il/blog/2014/06/linux-realtek-hostapd/ три]&lt;br /&gt;
&lt;br /&gt;
Творим:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Networking support -&amp;gt;&lt;br /&gt;
     Wireless -&amp;gt;&lt;br /&gt;
          [*] cfg80211&lt;br /&gt;
          [*] Generic IEEE 802.11 ... (mac80211)&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          Wireless LAN -&amp;gt;&lt;br /&gt;
               Realtek rtlwifi family of devices -&amp;gt;&lt;br /&gt;
                    [*] Realtek ..../RTL8188CE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8188EE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter&lt;br /&gt;
     Staging drivers -&amp;gt;&lt;br /&gt;
          [*] Realtek RTL8188EU wireless LAN MIC driver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rootfs&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem packages -&amp;gt;&lt;br /&gt;
     network -&amp;gt;&lt;br /&gt;
          wpa-supplicant -&amp;gt;&lt;br /&gt;
               [*] wpa-supplicant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lwfinger/rtl8188eu/blob/master/rtl8188eufw.bin качаем файл]&lt;br /&gt;
&lt;br /&gt;
Модификаци инит-скрипта&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /run/media/mmcblk0p1/wpa_supplicant.conf /etc/&lt;br /&gt;
&lt;br /&gt;
mkdir /lib/firmware/&lt;br /&gt;
mkdir /lib/firmware/rtlwifi/&lt;br /&gt;
cp /run/media/mmcblk0p1/rtl8188eufw.bin /lib/firmware/rtlwifi/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi ESP ==&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+SDIO+Wifi Xilinx SDIP WiFi]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/sdio-wifi-driver-ar6103-problem Zedboard раз]&lt;br /&gt;
&lt;br /&gt;
[https://stackoverflow.com/questions/32129689/how-to-bind-sdio1-with-wi-fi-linux два]&lt;br /&gt;
&lt;br /&gt;
[http://picozed.org/content/steps-get-wlink8-working-using-petalinux-picozed picozed три]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/adding-wi-fi-and-bluetooth-connectivity-zedboard-using-murata-1dx-pmod zedboard четыре]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Оживление 2-го ядра ==&lt;br /&gt;
&lt;br /&gt;
* Находим /home/ivan/clonicus_1.2.3/build/tmp/work-shared/plnx_arm/kernel-source/arch/arm/mach-zynq/efuse.c&lt;br /&gt;
* В функции zynq_efuse_cpu_state делаем сразу ретурн тру&lt;br /&gt;
* Че-нибудь меняем в настройках ядра для пересборки&lt;br /&gt;
* Выполняем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c kernel -x compile -f&lt;br /&gt;
petalinux-build -c kernel -x deploy -f&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Забираем image.ub&lt;br /&gt;
&lt;br /&gt;
'''ИЛИ'''&lt;br /&gt;
&lt;br /&gt;
Правим device-tree, заменяем адрес efuse на 0xf800cff0&lt;br /&gt;
&lt;br /&gt;
== webserver == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/emlid/ReachView Репозиторий emlid ReachView] (bnd на py/Flask, fnd на html/Ajax/js/Bootstrap)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Backend:'''&lt;br /&gt;
&lt;br /&gt;
* [http://svenand.blogdrives.com/archive/195.html#.XPTYt4gzaUk Источник по busybox-httpd]&lt;br /&gt;
&lt;br /&gt;
* [https://www.afternerd.com/blog/python-http-server/ Гайд по python server]&lt;br /&gt;
&lt;br /&gt;
* [https://ru.wikibooks.org/wiki/Flask Викиучебник по Flask]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/193242/ ХаброГайд по python/Flask]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frontend:'''&lt;br /&gt;
&lt;br /&gt;
* [https://unminify.com/ unminify CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://getbootstrap.com/docs/4.3/getting-started/introduction/ Bootstrap EN getting started]&lt;br /&gt;
&lt;br /&gt;
* [https://bootstrap-4.ru/ Bootstrap RU]&lt;br /&gt;
&lt;br /&gt;
* [http://htmlbook.ru/samhtml/tekst/spetssimvoly Справочник по операторам и тегам HTML/CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/howto/default.asp Сборник шаблонов CSS W3schools]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/w3css/w3css_tabulators.asp Анимированный сайдбар/табы]&lt;br /&gt;
&lt;br /&gt;
* [https://css-tricks.com/ CSS Tricks]&lt;br /&gt;
&lt;br /&gt;
* [https://www.cssmatic.com/ Онлайн тени/границы/градиент блоков]&lt;br /&gt;
&lt;br /&gt;
* [https://internetingishard.com/html-and-css/semantic-html/ Semantic HTML grid layout]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/202408/ Хаброгайд(ч1) по верстке]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/211032/ ХаброГайд(ч2) по Bootstrap]&lt;br /&gt;
&lt;br /&gt;
* [https://fontawesome.com/icons?d=gallery Fontawesome ICONS open lib]&lt;br /&gt;
&lt;br /&gt;
:* [https://htmlacademy.ru/courses/43/run/1 Нормальный онлайн HTML/CSS/JS editor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== busybox httpd ===&lt;br /&gt;
В petalinux многие пакеты скукожены до их минимальных вариантов и встроены в общий пакет busybox. &lt;br /&gt;
В busybox есть также и вебсервер busybox-httpd.&lt;br /&gt;
Для использования нужно на этапе настройки файловой системы его включить:&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Конфиг: &lt;br /&gt;
 base -&amp;gt;&lt;br /&gt;
     busybox -&amp;gt;&lt;br /&gt;
          [*] busybox&lt;br /&gt;
          [*] busybox-httpd&lt;br /&gt;
          [ ] busybox-hwclock&lt;br /&gt;
          [*] busybox-inetd&lt;br /&gt;
          [*] busybox-mdev&lt;br /&gt;
          [ ] busybox-syslog &lt;br /&gt;
          [*] busybox-udhcpc &lt;br /&gt;
          [ ] busybox-udhcpd &lt;br /&gt;
&lt;br /&gt;
Сам httpd будет в '''/usr/sbin'''.&lt;br /&gt;
Рабочая папка по умолчанию в '''/srv/www/'''. Если в нее кидать файлы, то именно из нее будет отображаться контент в браузере. Папку можно изменить, перезапустив httpd с ключом -h &amp;lt;workdir&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Порт по умолчанию 80. Работает, как демон в /etc/init.d/, вкл-выкл оттуда же.&lt;br /&gt;
&lt;br /&gt;
Если положить в /srv/www/ файл index.html с неким кодом, то в браузере отобразится вебморда. Картинки работают по ссылкам.&lt;br /&gt;
&lt;br /&gt;
'''index.html'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;clonicus'112 webserver&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Hello, World!&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;h4&amp;gt;Web server is now up!&amp;lt;/h4&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;https://i.redd.it/oagz5eobkkt11.jpg&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;http://www.srns.ru&amp;quot;&amp;gt;For more information see SRNS.ru&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== python в petalinux ===&lt;br /&gt;
В petalinux 2017.4 есть 2 питона - 2.7 и 3.5.&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
'''python2.7'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     devel-&amp;gt;&lt;br /&gt;
         python-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''python3.5'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc-&amp;gt;&lt;br /&gt;
         python3-*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Модуль runpy.py для запуска команд вида 'python -m &amp;lt;module&amp;gt;' находится в python -&amp;gt; python-misc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimpleHTTPServer.py ===&lt;br /&gt;
Для первого теста поднимем встроенный в python2.7 минисервер SimpleHTTPServer.py в /usr/lib/python2.7. &lt;br /&gt;
&lt;br /&gt;
Для его запуска напишем скрипт&lt;br /&gt;
&lt;br /&gt;
'''webserver.py''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import SimpleHTTPServer &lt;br /&gt;
import SocketServer &lt;br /&gt;
 &lt;br /&gt;
PORT = 80 &lt;br /&gt;
 &lt;br /&gt;
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler &lt;br /&gt;
 &lt;br /&gt;
httpd = SocketServer.TCPServer((&amp;quot;&amp;quot;, PORT), Handler) &lt;br /&gt;
 &lt;br /&gt;
print &amp;quot;serving at port&amp;quot;, PORT &lt;br /&gt;
httpd.serve_forever()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $ python webserver.py &lt;br /&gt;
&lt;br /&gt;
При наличии в папке со скриптом файла index.html сервер поднимется автоматически.&lt;br /&gt;
&lt;br /&gt;
=== Добавление слоев в сборку ===&lt;br /&gt;
&lt;br /&gt;
[https://www.srns.ru/wiki/Blog:DneprovD/18.07.2019_Yocto_layers Переехало в статью]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:Oryx]]&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2018-05-16 10:06:30 +0300 | Lipa }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/15.10.2014_%D0%92%D1%81%D1%82%D1%80%D0%B5%D1%87%D0%B0%D0%B9%D1%82%D0%B5_-_Oryx!</id>
		<title>Blog:Boldenkov/15.10.2014 Встречайте - Oryx!</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/15.10.2014_%D0%92%D1%81%D1%82%D1%80%D0%B5%D1%87%D0%B0%D0%B9%D1%82%D0%B5_-_Oryx!"/>
				<updated>2025-09-04T08:38:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;center&amp;gt;[[File:20141015_Oryx.png|300px|Oryx]]&amp;lt;/center&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[file:201410_Oryx_white.svg|200px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
[[Файл:IMG 9988.jpg|thumb|right|300px|alt=Очень альтернативный текст|Oryx. Портрет.]]&lt;br /&gt;
Новая плата цифровой обработки сигналов отправлена на изготовление. Готовая плата ожидается к концу ноября.&lt;br /&gt;
&lt;br /&gt;
== Структурная схема ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:CentimeterProto_struct.svg|638px|Структура]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Файлы проекта платы ==&lt;br /&gt;
Файлы находятся здесь:&lt;br /&gt;
[http://srns.ru:802/websvn/listing.php?repname=Impala&amp;amp;path=%2FPCB%2FCentimeterProto%2F&amp;amp;#a6b5aef0532632a971ebb9861dcddebd3  Impala/PCB/CentimeterProto]. &lt;br /&gt;
&lt;br /&gt;
Библиотека элементов: [http://srns.ru:802/websvn/listing.php?repname=Impala&amp;amp;path=%2FPCB%2FLibrary%2F&amp;amp;#a7ca9c8474cebf5efa5758a36fc4109b4 Impala/PCB/Library].&lt;br /&gt;
&lt;br /&gt;
В Резонит отправлены файлы Gerber: [http://srns.ru:802/websvn/listing.php?repname=Impala&amp;amp;path=%2FPCB%2FCentimeterProto%2Fpcb%2FFab%2F&amp;amp;rev=837 Impala/PCB/CentimeterProto/Fab].&lt;br /&gt;
&lt;br /&gt;
Описание платы (какое есть): [http://srns.ru:802/websvn/filedetails.php?repname=Impala&amp;amp;path=%2FPCB%2FCentimeterProto%2Fdocs%2Fpdf%2FCentimeterProto.pdf CentimeterProto.pdf]&lt;br /&gt;
&lt;br /&gt;
== Галерея ==&lt;br /&gt;
&lt;br /&gt;
=== Прототип ===&lt;br /&gt;
[[File:20141015_OryxTop.png|400px]]&lt;br /&gt;
[[File:20141015_OryxBottom.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Фрагменты ===&lt;br /&gt;
&lt;br /&gt;
[[File:20141015_SRNS_Evolution.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:20141015_OryxLargeLogo.png|355px]] &lt;br /&gt;
[[File:20141015_Oryx.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Немного векторной графики ===&lt;br /&gt;
&lt;br /&gt;
[[File:20141015_OryxLogo.svg|300px]]&lt;br /&gt;
[[File:20141015_SRNS_Evolution.svg|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Сувениры ;) ===&lt;br /&gt;
[[File:Oryx_cup.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Фото ===&lt;br /&gt;
[[File:Корреляторов.jpg|1000px]]&lt;br /&gt;
[[File:АЦП.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Oryx]]&lt;br /&gt;
{{wl-publish: 2014-10-15 11:29:20 +0400 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Korogodin/24.08.2020_%D0%9A%D0%BB%D0%BE%D0%BD%D0%B8%D0%BA%D1%83%D1%81_%D1%81%D1%8A%D0%B5%D0%B7%D0%B4%D0%B8%D0%BB_%D0%BD%D0%B0_%D0%90%D1%80%D0%BC%D0%B8%D1%8E-2020</id>
		<title>Blog:Korogodin/24.08.2020 Клоникус съездил на Армию-2020</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Korogodin/24.08.2020_%D0%9A%D0%BB%D0%BE%D0%BD%D0%B8%D0%BA%D1%83%D1%81_%D1%81%D1%8A%D0%B5%D0%B7%D0%B4%D0%B8%D0%BB_%D0%BD%D0%B0_%D0%90%D1%80%D0%BC%D0%B8%D1%8E-2020"/>
				<updated>2025-09-04T08:37:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:CloArmy2020.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Наш малыш побывал на военных сборах!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20200824_122707.jpg|800px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20200824_162814.jpg|800px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20200825_104440_BURST1.jpg|800px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-08-25 12:01:31 +0300 | Korogodin }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/21.10.2016_%D0%9E%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%98%D0%9A%D0%94_%D0%93%D0%9B%D0%9E%D0%9D%D0%90%D0%A1%D0%A1</id>
		<title>Blog:Boldenkov/21.10.2016 Официальные ИКД ГЛОНАСС</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/21.10.2016_%D0%9E%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%98%D0%9A%D0%94_%D0%93%D0%9B%D0%9E%D0%9D%D0%90%D0%A1%D0%A1"/>
				<updated>2025-09-04T08:36:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;http://russianspacesystems.ru/wp-content/uploads/2015/09/logo_rks_80.png&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На официальном сайте РКС опубликованы интерфейсные контрольные документы ГЛОНАСС с кодовым разделением в диапазонов [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L1-s-kod.-razd.-Red-1.0-2016.pdf L1], [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L3-s-kod.-razd.-Red-1.0-2016.pdf L2], [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L3-s-kod.-razd.-Red-1.0-2016.pdf L3].&lt;br /&gt;
&lt;br /&gt;
Наконец-то!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
Ссылка на страницу с документами:&lt;br /&gt;
http://russianspacesystems.ru/bussines/navigation/glonass/interfeysnyy-kontrolnyy-dokument/&lt;br /&gt;
&lt;br /&gt;
* [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L1-s-kod.-razd.-Red-1.0-2016.pdf L1OC], &lt;br /&gt;
* [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L2-s-kod.-razd.-Red-1.0-2016.pdf L2OC], &lt;br /&gt;
* [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD-L3-s-kod.-razd.-Red-1.0-2016.pdf L3OC].&lt;br /&gt;
&lt;br /&gt;
Кроме того, опубликован [http://russianspacesystems.ru/wp-content/uploads/2016/08/IKD.-Obshh.-opis.-Red.-1.0-2016.pdf документ], содержащий общие подходы к обработке информации для всех сигналов. В основном он касается пересчёта шкал времени и расчёта координат НС разными способами.&lt;br /&gt;
&lt;br /&gt;
На странице также присутствует старый [http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_rus_v5.1.pdf ИКД ГЛОНАСС 5.1], не притерпевший изменений.&lt;br /&gt;
{{wl-publish: 2016-10-24 08:53:46 +0300 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/06.04.2017_Javad_vs_Linux</id>
		<title>Blog:Boldenkov/06.04.2017 Javad vs Linux</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/06.04.2017_Javad_vs_Linux"/>
				<updated>2025-09-04T08:36:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
Записи про подключение приёмника Javad Lexxon к RTKlib через Linux &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:20170406_Javad_RTKlib_KDPV.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
Изначально я ориентировался на статью: https://srns.ru/wiki/Blog:DneprovV/29.07.2015_Работа_с_RTKLib&lt;br /&gt;
В этой статье описано, как подключить Javad через RTKlib.&lt;br /&gt;
&lt;br /&gt;
Но я запускал RTKlib из-под Linux через wine, естественно, ничто не заработало сразу, поэтому я начал экспериментировать...&lt;br /&gt;
&lt;br /&gt;
== Проверка связи, как таковой ==&lt;br /&gt;
&lt;br /&gt;
Javad подключен через адаптер USB-RS232 на чипе PL2303 и отображается в Linux устройством /dev/ttyUSB0.&lt;br /&gt;
&lt;br /&gt;
Необходимо настроить порт. Настройки порта [https://srns.ru/wiki/Blog:DneprovV/29.07.2015_Работа_с_RTKLib#.D0.A8.D0.B0.D0.B3_1 известны]&lt;br /&gt;
&lt;br /&gt;
Сделаем это через stty:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
 ! Параметр порта&lt;br /&gt;
 ! Значение&lt;br /&gt;
 ! Ключ stty&lt;br /&gt;
 |-&lt;br /&gt;
 | bitrate&lt;br /&gt;
 | 115200&lt;br /&gt;
 | 115200&lt;br /&gt;
 |-&lt;br /&gt;
 | Character size&lt;br /&gt;
 | 8&lt;br /&gt;
 | cs8&lt;br /&gt;
 |-&lt;br /&gt;
 | Parity&lt;br /&gt;
 | none&lt;br /&gt;
 | -parenb&lt;br /&gt;
 |-&lt;br /&gt;
 | Stop bit&lt;br /&gt;
 | 1&lt;br /&gt;
 | -cstopb&lt;br /&gt;
 |-&lt;br /&gt;
 | Flow control&lt;br /&gt;
 | none&lt;br /&gt;
 | -ixon&lt;br /&gt;
 |-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Итого:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stty -F /dev/ttyUSB0 115200 cs8 -parenb -cstopb -ixon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, если не привлекать сторонний софт, можно открыть два терминала и в одном из них дать команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и там будет появлятся всё, что выдаёт Javad.&lt;br /&gt;
&lt;br /&gt;
== Настройка Javad ==&lt;br /&gt;
&lt;br /&gt;
Но он не будет ничего выдавать! Ему нужно дать специальные команды. Команды есть [https://srns.ru/wiki/Blog:DneprovV/29.07.2015_Работа_с_RTKLib#.D0.A8.D0.B0.D0.B3_2.1 здесь].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
em,,def:{1,,}&lt;br /&gt;
em,,jps/gd&lt;br /&gt;
em,,jps/qd&lt;br /&gt;
em,,jps/WD&lt;br /&gt;
em,,jps/ET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот дальше я начал эти команды давать и возникли вопросы.&lt;br /&gt;
&lt;br /&gt;
Первая команда устанавливает тем выдачи данных.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
em,,def:{1,,}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате из приёмника начинает сыпаться поток:&lt;br /&gt;
&lt;br /&gt;
[[File:20170406_Javad_log1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Цифра &amp;quot;1&amp;quot; в команде - это скорость. Если задать &amp;quot;0&amp;quot;, данные будут сыпаться ещё быстрее. Чтобы он перестал это делать, надо задать большую цифру, например, 1000.&lt;br /&gt;
&lt;br /&gt;
Проблема заключается в том, что на следующие три команды  из списка Javad выдаёт сообщение об ошибке.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
em,,def:{1,,}&lt;br /&gt;
em,,jps/gd&lt;br /&gt;
em,,jps/qd&lt;br /&gt;
em,,jps/WD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ER018{2,,wrong 2nd parameter}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последняя команда - правильная.&lt;br /&gt;
&lt;br /&gt;
Есть ещё команда dm, которую предписано периодически выдавать в Javad, но в [https://srns.ru/wiki/Blog:DneprovV/29.07.2015_Работа_с_RTKLib#.D0.A8.D0.B0.D0.B3_2.1 инструкции] почему-то не указан период выдачи.&lt;br /&gt;
&lt;br /&gt;
В общем, надо разбираться.&lt;br /&gt;
&lt;br /&gt;
== Проблема с RTKlib ==&lt;br /&gt;
Повторить это через GUI RTKlib из-под wine не получается.&lt;br /&gt;
Похоже, что RTKlib неправильно настраивает порт. Лампочка моргает, но ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
После остановки RTKlib команда &amp;quot;cat&amp;quot; из порта ничего не выдаёт. &amp;quot;Оживить&amp;quot; его обратно можно через stty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stty -F /dev/ttyUSB0 raw&lt;br /&gt;
stty -F /dev/ttyUSB0 115200 cs8 -parenb -cstopb -ixon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обработка лога в RTKconv ==&lt;br /&gt;
&lt;br /&gt;
Пусть так, но я могу записать лог Javad в файл и обработать!&lt;br /&gt;
&lt;br /&gt;
Приступим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /dev/ttyUSB0 | tee /tmp/javad.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:20170406_Javad_from_console.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Теперь можно вызвать RTKconv из-под wine и конвертировать в RINEX:&lt;br /&gt;
&lt;br /&gt;
[[File:20170407_Javad_RTKconv.png|400px]]&lt;br /&gt;
&lt;br /&gt;
В результате я получил файл RINEX с наблюдениями. Но нет файла RINEX c эфемеридами - Javad не выдал, судя по всему, нужные данные. Надо разобраться, как его для этого настроить.&lt;br /&gt;
&lt;br /&gt;
== А теперь - добавим эфемериды ==&lt;br /&gt;
&lt;br /&gt;
Владислав записывал из-под Windows лог Javad и конвертировал в RINEX, там тоже не было эфемерид. В результате я давал для обработки файлы, полученные с нашего приёмника и записанные RTKlib. Сделаю в этот раз также.&lt;br /&gt;
&lt;br /&gt;
Настраиваем RTKnavi на работу с нашим приёмником по сети (всё из-под wine).&lt;br /&gt;
&lt;br /&gt;
[[File:20170406_MCR_RTKnavi.png|400px]]&lt;br /&gt;
[[File:20170406_MCR_RTKnavi2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получаем лог binr в файле /tmp/MCR.binr. С помощью RTKconv конвертируем его в RINEX:&lt;br /&gt;
&lt;br /&gt;
[[File:20170406_MCR_RTKconv.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Далее отдаём это всё RTKpost.  PROFIT!&lt;br /&gt;
&lt;br /&gt;
[[File:20170406_Javad_RTKpost.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
&lt;br /&gt;
* Надо найти команды Javad, чтобы он выдавал эфемериды&lt;br /&gt;
* Разобраться с неправильными командами Javad&lt;br /&gt;
* Надо понять, что RTKlib делает с портом&lt;br /&gt;
* Надо всё автоматизировать в виде скрипта, чтобы не требовалась эта многоходовка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2017-04-06 13:07:53 +0300 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/06.04.2017_%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D1%80%D0%B5%D0%BD%D0%B8%D0%B9</id>
		<title>Blog:Boldenkov/06.04.2017 Автоматизация измерений</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/06.04.2017_%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D1%80%D0%B5%D0%BD%D0%B8%D0%B9"/>
				<updated>2025-09-04T08:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
Автоматизация обработки измерений, получаемых с приёмника&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:20170406_RcvComparison_KPDV.png|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
Долой многоходовку из [https://www.srns.ru/wiki/Blog:Boldenkov/06.04.2017_Javad_vs_Linux прошлой статьи]&lt;br /&gt;
&lt;br /&gt;
Хочу ...&lt;br /&gt;
&lt;br /&gt;
Хочу утром, за чашечкой кофе, получать сравнительный анализ точности работы приёмников за последние сутки.&lt;br /&gt;
&lt;br /&gt;
== Приёмники ==&lt;br /&gt;
&lt;br /&gt;
Мне сейчас доступен Javad, MCR и Piksi. Используем далее их.&lt;br /&gt;
&lt;br /&gt;
== Снятие измерений ==&lt;br /&gt;
&lt;br /&gt;
Также на Evaluator найдены скрипты для Geos3_SN17, сохраню, на всякий случай, пока сюда:&lt;br /&gt;
=== Geos3_SN17 ===&lt;br /&gt;
Скрипт geos_settings:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
RCV_ID=geos3_SN17&lt;br /&gt;
&lt;br /&gt;
PORT_BIN=/dev/ttyUSB0&lt;br /&gt;
BIN_SPEED=115200&lt;br /&gt;
&lt;br /&gt;
PORT_NMEA=/dev/ttyUSB1&lt;br /&gt;
NMEA_SPEED=115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт init_geos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
source geos_settings&lt;br /&gt;
&lt;br /&gt;
stty -F $PORT_BIN 4800&lt;br /&gt;
stty -F $PORT_BIN $BIN_SPEED raw&lt;br /&gt;
&lt;br /&gt;
stty -F $PORT_NMEA 4800&lt;br /&gt;
stty -F $PORT_NMEA $NMEA_SPEED raw&lt;br /&gt;
&lt;br /&gt;
if [ -f /tmp/&amp;quot;$RCV_ID&amp;quot;_BIN.pid ]&lt;br /&gt;
then&lt;br /&gt;
    cat /tmp/&amp;quot;$RCV_ID&amp;quot;_BIN.pid | xargs kill&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
ser2net -C &amp;quot;2222:raw:0:$PORT_BIN:$BIN_SPEED NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL&amp;quot; -P /tmp/&amp;quot;$RCV_ID&amp;quot;_BIN.pid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if [ -f /tmp/&amp;quot;$RCV_ID&amp;quot;_NMEA.pid ]&lt;br /&gt;
then&lt;br /&gt;
    cat /tmp/&amp;quot;$RCV_ID&amp;quot;_NMEA.pid | xargs kill&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
ser2net -C &amp;quot;2223:raw:0:$PORT_NMEA:$NMEA_SPEED NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL&amp;quot; -P /tmp/&amp;quot;$RCV_ID&amp;quot;_NMEA.pid&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Javad ===&lt;br /&gt;
&lt;br /&gt;
С Javad я работаю через USB с использованием переходника на RS232. Чтобы получить его измерения (в формате Javad), я сделал скрипт start_javad_log:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
PORT=/dev/ttyUSB0&lt;br /&gt;
FILE=/tmp/javad.log&lt;br /&gt;
&lt;br /&gt;
stty -F $PORT raw&lt;br /&gt;
stty -F $PORT 115200 cs8 -parenb -cstopb -ixon&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;em,,def:{1,,}&amp;quot; &amp;gt; $PORT&lt;br /&gt;
echo &amp;quot;em,,jps/gd&amp;quot;    &amp;gt; $PORT&lt;br /&gt;
echo &amp;quot;em,,jps/qd&amp;quot;    &amp;gt; $PORT&lt;br /&gt;
echo &amp;quot;em,,jps/WD&amp;quot;    &amp;gt; $PORT&lt;br /&gt;
&lt;br /&gt;
cat $PORT &amp;gt; $FILE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MCR ===&lt;br /&gt;
Наш приёмник сыпет протоколом BINR через порт 3491. Ничего делать не нужно, просто записать результат в файл (start_mcr_log):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
IP=192.168.0.167&lt;br /&gt;
TcpPort=3491&lt;br /&gt;
&lt;br /&gt;
DIR=/tmp&lt;br /&gt;
FILE=mcr.log&lt;br /&gt;
&lt;br /&gt;
curl $IP:$TcpPort &amp;gt; $DIR/$FILE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Piksi ===&lt;br /&gt;
С Piksi сложнее всего. Он выдаёт свой бинарный лог SBP через порт 55555, но я пока не разобрался, как использовать лог в бинарном виде. Представляемая ими программа обработки sbp2rinex использует лог SBP, закодированный в JSON. А записывать такой лог может графическая программа swift_console. Надо разобраться, как обойтись без этого, т.к. лог в формате JSON занимает много места. Да и программа GUI тут лишняя. Но пока так (start_piksi_log):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
IP=192.168.0.222&lt;br /&gt;
TcpPort=55555&lt;br /&gt;
DIR=/tmp&lt;br /&gt;
FILE=piksi.log&lt;br /&gt;
&lt;br /&gt;
echo /home/CommonFiles/Piksi/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE&lt;br /&gt;
/home/CommonFiles/Piksi/swift_console_v1.0.A_linux/console -t -p $IP:$TcpPort -l -o $DIR --logfilename $FILE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Преобразование измерений в RINEX ==&lt;br /&gt;
Можно обойтись и без этого, но я сделал так, чтобы далее использовать полученные файлы в разных целях, не только для данной задачи.&lt;br /&gt;
&lt;br /&gt;
Всё конвертирует отдельный скрипт convert_all_to_rinex:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
DIR=/tmp&lt;br /&gt;
&lt;br /&gt;
JAVAD=$DIR/javad.log&lt;br /&gt;
MCR=$DIR/mcr.log&lt;br /&gt;
PIKSI=$DIR/piksi.log&lt;br /&gt;
&lt;br /&gt;
echo Javad: $JAVAD&lt;br /&gt;
convbin $JAVAD -r javad&lt;br /&gt;
&lt;br /&gt;
echo MCR: $MCR&lt;br /&gt;
convbin $MCR -r nvs&lt;br /&gt;
&lt;br /&gt;
echo Piksi: $PIKSI&lt;br /&gt;
export PIKSI_OUT=`echo $PIKSI | sed 's/\.log/\.obs/'`&lt;br /&gt;
/home/CommonFiles/Piksi/piksi_tools/piksi_tools/sbp2rinex.py $PIKSI -o $PIKSI_OUT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На выходе - файлы в формате RINEX. &lt;br /&gt;
&lt;br /&gt;
== Решение навигационной задачи ==&lt;br /&gt;
&lt;br /&gt;
Пока в Javad не включены эфемериды и файлы с эфемеридами пустые, а как заставить их выдавать Piksi - пока вообще не понятно, надо исследовать.&lt;br /&gt;
Я использовал эфемериды, принятые MCR. Скрипт solve_all_from_rinex:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
DIR=/tmp&lt;br /&gt;
&lt;br /&gt;
JAVAD=$DIR/javad.obs&lt;br /&gt;
MCR=$DIR/mcr.obs&lt;br /&gt;
PIKSI=$DIR/piksi.obs&lt;br /&gt;
&lt;br /&gt;
NAV=`echo $MCR | sed 's/\.obs/\.nav/g'`&lt;br /&gt;
GNAV=`echo $MCR | sed 's/\.obs/\.gnav/g'`&lt;br /&gt;
&lt;br /&gt;
REF=&amp;quot;2846044.0 2200316.0 5249376.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUT=`echo $JAVAD | sed 's/\.obs/\.pos/g'`&lt;br /&gt;
echo &amp;quot;Javad: $JAVAD  -&amp;gt; $OUT&amp;quot;&lt;br /&gt;
rnx2rtkp -r $REF $JAVAD $NAV $GNAV -a &amp;gt; $OUT&lt;br /&gt;
&lt;br /&gt;
OUT=`echo $MCR | sed 's/\.obs/\.pos/g'`&lt;br /&gt;
echo &amp;quot;MCR: $MCR  -&amp;gt; $OUT&amp;quot;&lt;br /&gt;
rnx2rtkp -r $REF $MCR $NAV $GNAV -a &amp;gt; $OUT&lt;br /&gt;
&lt;br /&gt;
OUT=`echo $PIKSI | sed 's/\.obs/\.pos/g'`&lt;br /&gt;
echo &amp;quot;Piksi: $PIKSI  -&amp;gt; $OUT&amp;quot;&lt;br /&gt;
rnx2rtkp -r $REF $PIKSI $NAV $GNAV -a &amp;gt; $OUT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом являются файлы с решением навигационной задачи в формате RTKlib.&lt;br /&gt;
&lt;br /&gt;
== Построение графика ==&lt;br /&gt;
&lt;br /&gt;
Далее я из файла с решением вытащил 3 и 4 столбики, содержащие отклонение от базовой линии в метрах и построил их через Gnuplot на графике. Использован дополнительный скрипт pl для простоты, от него надо будет избавиться. Скрипт plot_all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
DIR=/tmp&lt;br /&gt;
&lt;br /&gt;
JAVAD=$DIR/javad.pos&lt;br /&gt;
MCR=$DIR/mcr.pos&lt;br /&gt;
PIKSI=$DIR/piksi.pos&lt;br /&gt;
&lt;br /&gt;
JAVAD_OUT=`echo $JAVAD | sed 's/\.pos/\.plane/g'`&lt;br /&gt;
echo &amp;quot;$JAVAD  -&amp;gt;   $JAVAD_OUT&amp;quot;&lt;br /&gt;
cat $JAVAD | grep -v &amp;quot;^%&amp;quot; | awk '{print $3&amp;quot; &amp;quot;$4}' &amp;gt; $JAVAD_OUT&lt;br /&gt;
&lt;br /&gt;
MCR_OUT=`echo $MCR | sed 's/\.pos/\.plane/g'`&lt;br /&gt;
echo &amp;quot;$MCR   -&amp;gt;  $MCR_OUT&amp;quot;&lt;br /&gt;
cat $MCR | grep -v &amp;quot;^%&amp;quot; | awk '{print $3&amp;quot; &amp;quot;$4}' &amp;gt; $MCR_OUT&lt;br /&gt;
&lt;br /&gt;
PIKSI_OUT=`echo $PIKSI | sed 's/\.pos/\.plane/g'`&lt;br /&gt;
echo &amp;quot;$PIKSI   -&amp;gt;  $PIKSI_OUT&amp;quot;&lt;br /&gt;
cat $PIKSI | grep -v &amp;quot;^%&amp;quot; | awk '{print $3&amp;quot; &amp;quot;$4}' &amp;gt; $PIKSI_OUT&lt;br /&gt;
&lt;br /&gt;
pl  $MCR_OUT $PIKSI_OUT $JAVAD_OUT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё вместе можно запустить скриптом process_all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
convert_all_to_rinex&lt;br /&gt;
solve_all_from_rinex&lt;br /&gt;
plot_all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== И первый результат! ==&lt;br /&gt;
&lt;br /&gt;
[[File:20170406_RcvComparison_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== В заключение ==&lt;br /&gt;
&lt;br /&gt;
Я скрипты сделал по-быстрому, на коленке, так, как делать нельзя. Надо код приводить в порядок.&lt;br /&gt;
&lt;br /&gt;
Там &amp;quot;захардкодены&amp;quot; все пути, названия всех файлов и т.д. Например, добавить/убавить приёмник - уже проблема.&lt;br /&gt;
Надо вынести приёмники в список. Но работать с ними надо разными способами, тут надо как-то решить данный вопрос.&lt;br /&gt;
&lt;br /&gt;
Далее, интересны графики в разных условиях - GPS/GPS+ГЛОНАСС, L1/L2+L2 и т.д. Дополнять строки в скрипты - неправильно. Надо делать нормальный код.&lt;br /&gt;
&lt;br /&gt;
И ещё - я так и не сделал рассылку результатов, надо сюда добавить sendmail или сделать какого-нибудь бота.&lt;br /&gt;
&lt;br /&gt;
Но пока так!&lt;br /&gt;
{{wl-publish: 2017-04-06 15:33:47 +0300 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/10.04.2017_%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_Javad_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%B5%D1%82%D1%8C</id>
		<title>Blog:Boldenkov/10.04.2017 Подключение Javad через сеть</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/10.04.2017_%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_Javad_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%B5%D1%82%D1%8C"/>
				<updated>2025-09-04T08:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
RTKlib из-под wine не работает с Javad.&lt;br /&gt;
Описан способ решения данной проблемы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:20170410_RTKnavi_works.png|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Проблема ==&lt;br /&gt;
&lt;br /&gt;
В прошлой [https://www.srns.ru/wiki/Blog:Boldenkov/06.04.2017_Javad_vs_Linux статье] было описано, как обработать данные с приёмника Javad в RTKlib. Проблема заключалась в том, что программа RTKnavi неправильно работает с последовательным портом. Приходилось сначала записывать поток данных в файл, а потом обрабатывать через convbin/rtkpost.&lt;br /&gt;
&lt;br /&gt;
== Netcat ==&lt;br /&gt;
&lt;br /&gt;
RTKnavi позволяет работать с приёмником не только через последовательный порт, но и через сеть. Но Javad не имеет сетевого интерфейса.&lt;br /&gt;
&lt;br /&gt;
Решением может быть перенаправление последовательного порта в сетевой сокет. Это делается с помощью программы netcat (nc).&lt;br /&gt;
&lt;br /&gt;
Я создал скрипт, настраивающий Javad на передачу данных и запускающий трансляцию данных в сеть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
PORT=/dev/ttyUSB0&lt;br /&gt;
FILE=/tmp/javad.log&lt;br /&gt;
&lt;br /&gt;
stty -F $PORT raw&lt;br /&gt;
stty -F $PORT 115200 cs8 -parenb -cstopb -ixon&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;em,,def:{1,,}&amp;quot; &amp;gt; $PORT&lt;br /&gt;
echo &amp;quot;em,,jps/gd&amp;quot;    &amp;gt; $PORT&lt;br /&gt;
echo &amp;quot;em,,jps/qd&amp;quot;    &amp;gt; $PORT&lt;br /&gt;
echo &amp;quot;em,,jps/WD&amp;quot;    &amp;gt; $PORT&lt;br /&gt;
&lt;br /&gt;
nc -l -p 3500 &amp;lt;/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последняя команда передаёт данные из порта /dev/ttyUSB0 в порт TCP 3500.&lt;br /&gt;
&lt;br /&gt;
После этого к нему можно подключиться через RTKnavi:&lt;br /&gt;
&lt;br /&gt;
[[File:20170410_RTKnavi_TCPclient.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Режим работы TCP Client, указывается адрес 127.0.0.1 (компьютер, на котором это всё запущено), или другой, порт - 3500, тот, который был указан netcat.&lt;br /&gt;
&lt;br /&gt;
После нажатия кнопки Start всё работает.&lt;br /&gt;
&lt;br /&gt;
[[File:20170410_RTKnavi_works.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом можно раздавать по сети данные и от других приёмников.&lt;br /&gt;
&lt;br /&gt;
== ser2net ==&lt;br /&gt;
&lt;br /&gt;
Достоинство NetCat заключается в том, что NetCat уже, как правило, установлен и его можно использовать сразу. Но есть и проблема - при отключении клиента NetCat тоже отключается и его надо перезапускать. Это неприемлемо для предполагаемого применения.&lt;br /&gt;
&lt;br /&gt;
Одним из возможных решений является программа ser2net, предназначенная специально для вещания данных из физического порта в сеть.&lt;br /&gt;
&lt;br /&gt;
ser2net есть в стандартных репозиториях Linux и ставится стандартным способом.&lt;br /&gt;
&lt;br /&gt;
Для правильной работы ser2net нужно его настроить. Обычно предполагается, что будет использоваться настроечный файл, но я решил, что удобнее будет запускать ser2net по мере необходимости для каждого порта отдельно, указывая параметры в коммандной строке.&lt;br /&gt;
&lt;br /&gt;
Делается это таким образом:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ser2net -C &amp;quot;2222:raw:0:/dev/ttyUSB0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого поток данных из последовательного порта доступен через сеть:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl 127.0.0.1:2222&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
После перезапуска curl всё продолжает работать.&lt;br /&gt;
&lt;br /&gt;
== Multiple clients ==&lt;br /&gt;
&lt;br /&gt;
Следующая проблема, которую надо решить - подключение нескольких клиентов к одному порту одновременно. Стандартный ser2net данную возможность не поддерживает. На github есть версия с такой возможностью: https://github.com/longshine/ser2nets, но у меня она почему-то не передаёт данные. Надо разбираться.&lt;br /&gt;
&lt;br /&gt;
Есть вот такое решение: https://wiki.openwrt.org/doc/howto/networked.gps, но это коряво.&lt;br /&gt;
&lt;br /&gt;
GPStk расчитан только на NMEA, который нас не интересует.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2017-04-10 11:19:45 +0300 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Boldenkov/21.04.2017_%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_PPK_%D0%B8%D0%B7_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8</id>
		<title>Blog:Boldenkov/21.04.2017 Решение PPK из командной строки</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Boldenkov/21.04.2017_%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_PPK_%D0%B8%D0%B7_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8"/>
				<updated>2025-09-04T08:35:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:20170421_PPK_mode_2_1.png|300px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Продолжая исследовать возможности RTKlib...&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
Я поставил задачу получить решение PPK с помощью RTKlib из командной строки. Вот что вышло.&lt;br /&gt;
&lt;br /&gt;
== Исходные данные ==&lt;br /&gt;
&lt;br /&gt;
Были записаны (одновременно, с одной антенны) измерения с двух приёмников - Piksi и MCR. Как это делается, описано [https://www.srns.ru/wiki/Blog:Boldenkov/06.04.2017_Автоматизация_измерений здесь].&lt;br /&gt;
&lt;br /&gt;
Если делать решение по кодовым измерениям, получим такие картинки:&lt;br /&gt;
&lt;br /&gt;
[[File:20170421_Pos_MCR_vs_Piksi_1.png|400px]] [[File:20170421_NS_MCR_vs_Piksi_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Первый график - решение, второй - количество спутников в измерениях. Видно, что у приёмника MCR (красный) разброс решения вдвое больше, чем у Piksi, хотя спутников также почти вдвое больше (добавился ГЛОНАСС). Надо разбираться.&lt;br /&gt;
&lt;br /&gt;
== Постобработка в режиме kinematic ==&lt;br /&gt;
&lt;br /&gt;
RTKlib имеет несколько режимов работы блока решения навигационной задачи. Рассмотрим режим 2 (kinematic). Для получения решения в данном режиме я использовал команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rnx2rtkp -r 2846044.0 2200316.0 5249376.0 -p 2 mcr.pos Piksi.pos mcr.nav mcr.gnav -a  &amp;gt; /tmp/MCR_rover.pos&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь ключ &amp;quot;-p&amp;quot; задаёт режим решения 2 (kinematic). Первый файл с измерениями mcr.pos рассматривается, как rover, второй - как base.&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом получил решение, в котором MCR - base, Piksi - rover.&lt;br /&gt;
&lt;br /&gt;
[[File:20170421_PPK_mode_2_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Синий - база Piksi, красный - база MCR.&lt;br /&gt;
&lt;br /&gt;
Ожидаемо получилась картинка, имеющая некоторую степень симметрии относительно нуля. Разброс решения - сантиметры.&lt;br /&gt;
&lt;br /&gt;
== Постобработка в режиме static ==&lt;br /&gt;
&lt;br /&gt;
Режим 3 (static) отличается тем, что RTKlib рассматривает положение, как статическое, и начинает усреднять данные. Поэтому решение постепенно сходится к нулю.&lt;br /&gt;
&lt;br /&gt;
[[File:20170421_PPK_mode_3_1.png|400px]]&lt;br /&gt;
{{wl-publish: 2017-04-21 14:27:41 +0300 | Boldenkov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Korogodin/23.06.2021_RTKLIB_%22Time_of_Receiver_Clock_Rover%22_demystifying</id>
		<title>Blog:Korogodin/23.06.2021 RTKLIB &quot;Time of Receiver Clock Rover&quot; demystifying</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Korogodin/23.06.2021_RTKLIB_%22Time_of_Receiver_Clock_Rover%22_demystifying"/>
				<updated>2025-09-04T08:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ]&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:photo_2021-06-23_11-14-24.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&lt;br /&gt;
В RTKLIB есть чарующая строчка, Time of Receiver Clock Rover, которая во время получения решения показывает интригующее время - с большим числом разрядов после запятой, вплоть до наносекунд:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:photo_2021-06-23_11-12-39.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
И этот хвост там не бывает нулевым. У нас были догадки, что это значение можно использовать для оценки точности синхронизации приемника. И вот теперь у нас есть собственная синхронизация с точностью в 1 нс.&lt;br /&gt;
А значит, мы можем разгадать смысловую нагрузку числа в RTKLIB:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:photo_2021-06-23_11-14-24.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Это оказалась оценка системного времени на момент фикса измерений. Что интересно, не бьется с нашей оценкой на 210 нс. В очередной раз наша оценка опережает внешнюю на 200 нанок, это повод задуматься и поискать косяк в алгоритме, вместо текущей компенсации калибровкой &lt;br /&gt;
{{wl-publish: 2021-06-23 12:39:50 +0400 | Korogodin }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Roslyakov/13.12.2021_%D0%A4%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0%D0%B2%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB%D0%B0_GPS_CA_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_gps-sdr-sim_%D0%B8_HackRF</id>
		<title>Blog:Roslyakov/13.12.2021 Формирование навигационного сигнала GPS CA с помощью gps-sdr-sim и HackRF</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Roslyakov/13.12.2021_%D0%A4%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0%D0%B2%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB%D0%B0_GPS_CA_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_gps-sdr-sim_%D0%B8_HackRF"/>
				<updated>2025-09-04T08:32:50Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ]&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:JsPFkaOzCOA.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Имитатор за копейки &lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&lt;br /&gt;
== Формирование навигационного сигнала GPS L1 C/A c помощью GPS-SDR-SIM и HackRF One ==&lt;br /&gt;
&lt;br /&gt;
''' GPS-SDR-SIM ''' — программа, позволяющая выводить двоичный файл сигналов в соответствии с указанным файлом спутниковой информации, информацией о координатах, частоте дискретизации и другими параметрами.&lt;br /&gt;
&lt;br /&gt;
''' HackRF One ''' — программно-определяемое радио, способное передавать / принимать радиосигналы на частотах от 1МГц до 6 ГГц. &lt;br /&gt;
Использует технологию, позволяющую с помощью программного обеспечения устанавливать / изменять рабочие радиочастотные параметры.&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Данная статья является инструкцией по формированию навигационного сигналы GPS L1 C/A для неподвижного потребителя. &lt;br /&gt;
Для имитации GPS сигнала будет использоваться программа GPS-SDR-SIM, которая позволяет формировать выборку навигационного сигнала (НС) в соответствии с указанным файлом спутниковой информации. &lt;br /&gt;
Полученный файл будет импортироваться  в радиочастотное устройство для трансляции НС в эфир.&lt;br /&gt;
&lt;br /&gt;
В качестве приемопередатчика будет выступать программно-определяемое радио (англ. SDR - software defined radio) HackRF One. &lt;br /&gt;
Основные характеристики устройства: диапазон частот от 1 МГц до 6 ГГц, полоса пропускания 20 МГц, 8-разрядный АЦП/ЦАП.&lt;br /&gt;
&lt;br /&gt;
Рассматривается конфигурация HackRF One c расширяющей платой Portapack H2, которая позволяет работать HackRF One автономно, т.е. без подключения к компьютеру. &lt;br /&gt;
&lt;br /&gt;
В сборе HackRf One + Portapack H2 + металлический корпус, SDR выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
[[File:photo_2021-12-13_17-08-01.jpg||240px|center]]&lt;br /&gt;
&lt;br /&gt;
На изображении ниже можно увидеть два SMA разъема CLKIN (ближний) и CLKOUT – вход и выход для синхронизации. &lt;br /&gt;
На этой же стороне присутствует разъем  micro-USB для подключения платы к компьютеру.&lt;br /&gt;
&lt;br /&gt;
[[File:photo_2021-12-13_16-51-13.jpg||400px|center]]&lt;br /&gt;
&lt;br /&gt;
С противоположной стороны плата имеет антенный разъем SMA и две кнопки: Reset – для перезагрузки HackRF по питанию и DFU – для восстановления заводской прошивки. &lt;br /&gt;
Над кнопками разъем для карты памяти.&lt;br /&gt;
&lt;br /&gt;
[[File:photo_2021-12-13_16-48-52 (2).jpg||400px|center]]&lt;br /&gt;
&lt;br /&gt;
== Последовательность действий для формирования сигнала ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 1. Подключение '''&lt;br /&gt;
&lt;br /&gt;
* Подключите антенну к SMA разъему на плате. &lt;br /&gt;
* Подключите плату к ПК (micro-USB/USB кабель).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 2. Установка драйверов и пакетов на ПК (ОС: Linux) '''&lt;br /&gt;
&lt;br /&gt;
*Команды в консоль:&lt;br /&gt;
&lt;br /&gt;
  sudo apt update; sudo apt upgrade&lt;br /&gt;
&lt;br /&gt;
  sudo apt install hackrf libhackrf-dev libhackrf0 gnuradio gnuradio-dev gr-osmosdr gqrx-sdr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 3. Отклик HackRF '''&lt;br /&gt;
&lt;br /&gt;
* Включить плату, в открывшемся меню выбрать и нажать  кнопку HackRF.&lt;br /&gt;
&lt;br /&gt;
[[file:photo_2021-12-13_16-49-51.jpg|thumb|Меню HackRF]]&lt;br /&gt;
&lt;br /&gt;
* Соглашаемся на HackRF mode для управления платой через ПК.&lt;br /&gt;
&lt;br /&gt;
*Команда в консоль:&lt;br /&gt;
&lt;br /&gt;
  hackrf_info&lt;br /&gt;
&lt;br /&gt;
*Ожидаемый ответ:&lt;br /&gt;
&lt;br /&gt;
  hackrf_info version: unknown&lt;br /&gt;
  libhackrf version: unknown (0.5)&lt;br /&gt;
  Found HackRF&lt;br /&gt;
  Index: 0&lt;br /&gt;
  Serial number: 0000000000000000048866dc348258c3&lt;br /&gt;
  Board ID Number: 2 (HackRF One)&lt;br /&gt;
  Firmware Version: local-57ed3eb (API:1.04)&lt;br /&gt;
  Part ID Number: 0xa000cb3c 0x00614368&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 4. Загрузить и скомпилировать код GPS-SDR-SIM '''&lt;br /&gt;
&lt;br /&gt;
*Команды в консоль:&lt;br /&gt;
&lt;br /&gt;
  git clone https://github.com/osqzss/gps-sdr-sim.git&lt;br /&gt;
&lt;br /&gt;
  cd gps-sdr-sim &amp;amp;&amp;amp; gcc gpssim.c -lm -O3 -o gps-sdr-sim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 5. Формированию выборки сигнала GPS '''&lt;br /&gt;
&lt;br /&gt;
* Открыть консоль внутри скомпилированной программы.&lt;br /&gt;
&lt;br /&gt;
* Консольная команда для формирования  8-разрядного бинарный файла сигнала по эфемеридному файлу brdc3540.14n: &lt;br /&gt;
&lt;br /&gt;
 ./gps-sdr-sim -e brdc3540.14n -l 31.603202,120.466576,100 -b 8 -d 300&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
brdc3540.14 — файл эфемерид 32-х спутников GPS;&lt;br /&gt;
&lt;br /&gt;
-e — файл является общим форматом ГНСС-данных RINEX;&lt;br /&gt;
&lt;br /&gt;
-l 31.603202,120.466576,100 — координаты позиции приемника;&lt;br /&gt;
&lt;br /&gt;
-b 8 — разрядность чисел в выходном файле;&lt;br /&gt;
&lt;br /&gt;
-d 300 —  длительность в секундах (1с = 5Мбайт).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 6. Формирование радиосигнала '''&lt;br /&gt;
&lt;br /&gt;
На предыдущем шаге по эфемеридному файлу был создан 8-разрядный бинарный файл «gpssim.bin».&lt;br /&gt;
&lt;br /&gt;
* Консольная команда для отправки сформированного файла на HackRF:&lt;br /&gt;
&amp;lt;sub&amp;gt;Убедитесь, что антенна подключена к антенному порту HackRF&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  hackrf_transfer -t gpssim.bin -f 1575.42e6 -s 2.6e6 -a 1 -x 30 -b 5e6&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
&lt;br /&gt;
hackrf_transfer – команда, с помощью которой можно  отправлять и получать сигналы, используя HackRF;&lt;br /&gt;
 &lt;br /&gt;
-t – пересылать данные из файла &amp;lt;имя файла&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
-f – несущая сигнала 1575.42 МГц;&lt;br /&gt;
&lt;br /&gt;
-s – частота дискретизации 2.6 МГц;&lt;br /&gt;
&lt;br /&gt;
-a – RF усилитель (1=Включен);&lt;br /&gt;
&lt;br /&gt;
-x – усиление TX 30 dB;&lt;br /&gt;
&lt;br /&gt;
-b – 5e6 полоса пропускания ФНЧ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Шаг 7. Оценка параметров сигнала смартфоном '''&lt;br /&gt;
&lt;br /&gt;
[[file:photo_2021-12-13_17-07-30.jpg|thumb|Ожижаемый результат]]&lt;br /&gt;
&lt;br /&gt;
* Установить приложение GPS Test.&lt;br /&gt;
&lt;br /&gt;
* Включить геолакацию.&lt;br /&gt;
&lt;br /&gt;
* Включить на телефоне режим полета&lt;br /&gt;
&lt;br /&gt;
== Дополнительный материал ==&lt;br /&gt;
&lt;br /&gt;
Ссылки:&lt;br /&gt;
&lt;br /&gt;
https://github.com/osqzss/gps-sdr-sim.git — GPS-SDR-SIM&lt;br /&gt;
&lt;br /&gt;
https://russianblogs.com/article/2381493862/ — более широкая инструкция по флагам gps-sdr-sim&lt;br /&gt;
&lt;br /&gt;
https://hackware.ru/?p=8249 — инструкция на русском для HackRF&lt;br /&gt;
{{wl-publish: 2021-12-24 09:22:02 +0400 | Roslyakov }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-11-15T10:36:33Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* QSPI Flash */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&lt;br /&gt;
# в пункте для DTB на пробу поставил&lt;br /&gt;
(X) from boot image&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью. Стирать можно маленькими разделами или всю флешку разом&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000   &lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку. Переменная filesize заполняется сама.&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x0 ${filesize}   #(DDR_address  offset  image_size) &lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Работа с MTD ====&lt;br /&gt;
&lt;br /&gt;
В операционке работать с разделами флешки можно через /proc/mtd. Для того, чтобы mtd драйвер увидел флешку, пришлось накатить на него патч.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
From 6a51554240c03a0dc0676fac0ab273bd7cf0c77f Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Tue, 12 Nov 2024 14:31:49 +0300&lt;br /&gt;
Subject: [PATCH] Add w25q512jvq support in mtd-spi-nor&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi-nor/spi-nor.c | 2 ++&lt;br /&gt;
 1 file changed, 2 insertions(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c&lt;br /&gt;
index 79194ec..91d6996 100644&lt;br /&gt;
--- a/drivers/mtd/spi-nor/spi-nor.c&lt;br /&gt;
+++ b/drivers/mtd/spi-nor/spi-nor.c&lt;br /&gt;
@@ -1336,6 +1336,8 @@ static int spi_nor_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)&lt;br /&gt;
 	{ &amp;quot;w25q128&amp;quot;, INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K| SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },&lt;br /&gt;
 	{ &amp;quot;w25q256&amp;quot;, INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K| SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },&lt;br /&gt;
 &lt;br /&gt;
+	{ &amp;quot;w25q512jvq&amp;quot;, INFO(0xef4020, 0, 64 * 1024, 1024, SECT_4K| SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },&lt;br /&gt;
+&lt;br /&gt;
 	/* Catalyst / On Semiconductor -- non-JEDEC */&lt;br /&gt;
 	{ &amp;quot;cat25c11&amp;quot;, CAT25_INFO(  16, 8, 16, 1, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },&lt;br /&gt;
 	{ &amp;quot;cat25c03&amp;quot;, CAT25_INFO(  32, 8, 16, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изначально поддержки конкретно нашей флешки там нет вплоть до v2021.1. Простое добавление строки позволило mtd драйверу обнаруживать флешку, но запись в нее через flashcp работает с ошибками. Пока остановился на этом.&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
&lt;br /&gt;
(!) При внесении изменений в юбут не забываем добавить коммент к версии в&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ petalinux-config -c u-boot&lt;br /&gt;
&lt;br /&gt;
    General setup -&amp;gt;&lt;br /&gt;
      Local version - append to U-Boot release&lt;br /&gt;
      дописываем отличия версии, например, qspi&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Lipa</id>
		<title>Blog:Lipa</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Lipa"/>
				<updated>2024-11-05T13:24:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Форма3}}&lt;br /&gt;
[[Липа, Иван Владимирович|Страница Ивана...]]&lt;br /&gt;
&lt;br /&gt;
[[Special:Wikilog/User:Lipa|Поиск по блогу...]]&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux</id>
		<title>Blog:Lipa/16.05.2018 PetaLinux</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux"/>
				<updated>2024-11-05T13:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
{{Форма3}}&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Petalinux.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сборка PetaLinux для кастомной железки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
&lt;br /&gt;
Vivado 2018.1 (для single-gigabit ethernet можно более ранние версии)&lt;br /&gt;
&lt;br /&gt;
Начиная с petalinux_2018.1 отсутствует devcfg. Необходимо использовать FPGA manager. Технология нами пока не освоена&lt;br /&gt;
&lt;br /&gt;
Необходима Ubuntu-16.04&lt;br /&gt;
&lt;br /&gt;
Требуется поставить ряд пакетов, полный список приведен в документе [https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug1144-petalinux-tools-reference-guide.pdf#page=9 UG1144]&lt;br /&gt;
&lt;br /&gt;
Устанавливаем PetaLinux в систему. Дистрибутив есть на [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2018-1.html Xilinx], либо у меня на компьютере. '''Ставить PetaLinux необходимо БЕЗ прав суперюзера!'''&lt;br /&gt;
&lt;br /&gt;
кидаем в /components/yocto/ sstate-rel-v2017.4.tar.gz&lt;br /&gt;
&lt;br /&gt;
Подготовка завершена&lt;br /&gt;
&lt;br /&gt;
== Правка Vivado ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки MDIO в Vivado 17.1-17.4 нужен [https://www.xilinx.com/support/answers/69132.html патч]. Ставим!&lt;br /&gt;
&lt;br /&gt;
'''Не помогло.''' Ставим 2018.1&lt;br /&gt;
&lt;br /&gt;
== Сборка ==&lt;br /&gt;
&lt;br /&gt;
Пошаговое руководство по сборке содержится в документе UG1156&lt;br /&gt;
&lt;br /&gt;
В консоли пишем source/[путь к петалинух]/settings.sh&lt;br /&gt;
&lt;br /&gt;
Выполняем шаги из UG1156 по главе 5:&lt;br /&gt;
&lt;br /&gt;
* экспортируем из Vivado .hdf (в блок дизайн File-&amp;gt;Export-&amp;gt;Export Hardware)&lt;br /&gt;
&lt;br /&gt;
* создаем проект PetaLinux&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-create --type project --template zynq --name &amp;lt;PROJECT&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* переходим в папку с текущим проектом&lt;br /&gt;
&lt;br /&gt;
* подключаем файл .hdf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config --get-hw-description=[путь к папке с файлом .hdf]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* перед сборкой системы необходимо выполнить '''все''' команды конфигурации в данной последовательности:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c rootfs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config ===&lt;br /&gt;
&lt;br /&gt;
Если хотим спользовать внешний файл device-tree включаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Subsystem AUTO Hardware Settings-&amp;gt;&lt;br /&gt;
     Advances bootable images storage settings-&amp;gt;&lt;br /&gt;
          dtb image settings-&amp;gt;&lt;br /&gt;
               image storage media&lt;br /&gt;
                    primary sd&lt;br /&gt;
               &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset если оперативной памяти менее ~256МБ&lt;br /&gt;
&lt;br /&gt;
Для клоникуса с 256МБ ставим 8'000'000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выставляем точку начала распаковки образа системы&lt;br /&gt;
&lt;br /&gt;
Выключаем копирование образа по sftp (Image Packaging Configuration -&amp;gt; Copy final images)&lt;br /&gt;
&lt;br /&gt;
Отключаем интернет-sstate (Yocto Settings -&amp;gt; Enable Network sstate feeds)&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c kernel===&lt;br /&gt;
&lt;br /&gt;
* Подключаем в ядре поддержку физика и его дров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для oryx:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*]Ethernet driver support -&amp;gt;&lt;br /&gt;
               [*] Micrel devices&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Drivers for Micrel PHYs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для clonicus:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Texas Instruments DP83867 Gigabit PHY&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c rootfs ===&lt;br /&gt;
&lt;br /&gt;
Подключаем при необходимости ethtool, gdbserver, gdb, libstdc, libgcc, glib2.0, glibc(glibc &amp;amp; ltd)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc -&amp;gt;&lt;br /&gt;
          gcc-runtime -&amp;gt;&lt;br /&gt;
               [*] libstdc ++&lt;br /&gt;
          gdb --&amp;gt;&lt;br /&gt;
               [*] gdb&lt;br /&gt;
          glib-2.0&lt;br /&gt;
               [*] glib-2.0&lt;br /&gt;
          glibc&lt;br /&gt;
               [*] glibc&lt;br /&gt;
               [*] ldd&lt;br /&gt;
     devel -&amp;gt;&lt;br /&gt;
          python -&amp;gt;&lt;br /&gt;
               python -&amp;gt;&lt;br /&gt;
                    [*] python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опционально:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
          usbutils -&amp;gt;&lt;br /&gt;
               [*] usbutils&lt;br /&gt;
     console -&amp;gt;&lt;br /&gt;
          network -&amp;gt;&lt;br /&gt;
               ethtool -&amp;gt;&lt;br /&gt;
                    [*] ethtool // необходимо для oryx! для перенастройки autonegotiation&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно еще подключать дебаг i2c&lt;br /&gt;
&lt;br /&gt;
'''Необходимо убедиться, что  образ может распаковаться в размер оперативы'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если будут проблемы, то надо будет править netboot offset&lt;br /&gt;
&lt;br /&gt;
=== device tree ===&lt;br /&gt;
&lt;br /&gt;
Если необходимо внести изменения в device tree, то смотрим конец статьи&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841676/U-Boot+Flattened+Device+Tree Интересная статья по правке devicetree из uboot]&lt;br /&gt;
&lt;br /&gt;
=== Сборка проекта ===&lt;br /&gt;
&lt;br /&gt;
* далее (сборка идет 30-60 минут)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&lt;br /&gt;
cd /images/linux/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* делаем boot.bin в папке /images/linux/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --force&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --kernel --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* записываем в загрузочную область флешки файлы boot.bin и image.ub&lt;br /&gt;
&lt;br /&gt;
== Всякое ==&lt;br /&gt;
&lt;br /&gt;
Если мало памяти как у нас - возможна ошибка image is not a fdt [https://forums.xilinx.com/t5/Embedded-Processor-System-Design/Petalinux-problem-on-custom-board-quot-image-is-not-a-fdt-quot/td-p/754892 ссылка]&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Можно вручную загрузиться из u-boot'а.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ bootm 0xA000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
$ bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно поварьировать адрес&lt;br /&gt;
&lt;br /&gt;
------------&lt;br /&gt;
&lt;br /&gt;
Проверка статуса прошитости FPGA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /sys/class/xdevcfg/xdevcfg/device/prog_done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uboot==&lt;br /&gt;
&lt;br /&gt;
Для внесения правок в загрузку линукса используем список команд '''env'''&lt;br /&gt;
&lt;br /&gt;
Просмотр текущих команд '''printenv'''&lt;br /&gt;
&lt;br /&gt;
Сброс настроек в дефолт '''env default -a'''&lt;br /&gt;
&lt;br /&gt;
Создать переменную '''env set &amp;lt;имя&amp;gt; &amp;lt;значение&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Правка переменной '''env edit &amp;lt;имя переменной&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Для каждой платы делаем следующее:&lt;br /&gt;
&lt;br /&gt;
* Берем [[Файл:uboot.env.c]]&lt;br /&gt;
&lt;br /&gt;
* Удаляем в конце имени &amp;quot;.c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Записываем на флешку рядом с образом линукса&lt;br /&gt;
&lt;br /&gt;
* Запускаем плату и прерываем autoboot&lt;br /&gt;
&lt;br /&gt;
* Пишем '''editenv ethaddr'''&lt;br /&gt;
&lt;br /&gt;
* Редактируем MAC-адрес&lt;br /&gt;
&lt;br /&gt;
* Пишем '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
* Все! можем ребутать '''reset'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохранить в файл '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
==Автозапуск приложений==&lt;br /&gt;
&lt;br /&gt;
Во-первых [https://support.xilinx.com/s/question/0D52E00006hpahDSAQ/petalinux-runnning-a-script-file-at-startup?language=en_US тыц]&lt;br /&gt;
&lt;br /&gt;
Далее пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t apps --template install -n myapp-init --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим файл /project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# This file is the myapp-init recipe.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
SUMMARY = &amp;quot;Simple myapp-init application&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;PETALINUX/apps&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
LIC_FILES_CHKSUM = &amp;quot;file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SRC_URI = &amp;quot;file://myapp-init&amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FILESEXTRAPATHS_prepend := &amp;quot;${THISDIR}/files:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit update-rc.d&lt;br /&gt;
&lt;br /&gt;
INITSCRIPT_NAME = &amp;quot;myapp-init&amp;quot;&lt;br /&gt;
INITSCRIPT_PARAMS = &amp;quot;start 99 S .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
    install -d ${D}${sysconfdir}/init.d&lt;br /&gt;
    install -m 0755 ${S}/myapp-init ${D}${sysconfdir}/init.d/myapp-init&lt;br /&gt;
}&lt;br /&gt;
FILES_${PN} += &amp;quot;${sysconfdir}/*&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим сам исполняемый скрипт project-spec/meta-user/recipes-apps/myapp-init/files/myapp-init&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Autorun script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Try run custom_init&amp;quot;&lt;br /&gt;
sh /run/media/mmcblk0p1/custom_init.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Записываем на флешку скрипт custom_init.sh с нужными командами и делаем его исполняемым&lt;br /&gt;
&lt;br /&gt;
Записываем файл interfaces&lt;br /&gt;
&lt;br /&gt;
Скачать архив: [[Файл:Init_interfaces.rar]]&lt;br /&gt;
&lt;br /&gt;
==SSH==&lt;br /&gt;
&lt;br /&gt;
Как победить сохранение ssh-ключей:&lt;br /&gt;
&lt;br /&gt;
Добавляем в init_script следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /run/media/mmcblk0p2/.ssh&lt;br /&gt;
ln -s /run/media/mmcblk0p2/.ssh/ /home/root/&lt;br /&gt;
mkdir /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
chmod 400 /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
rm -r /etc/dropbear/&lt;br /&gt;
ln -s /run/media/mmcblk0p2/dropbear/ /etc/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создается ссылка на флешку, где хранятся авторизованные пользователи&lt;br /&gt;
* Создается папка для хранения секретного ключа платы&lt;br /&gt;
* При запуске платы свежесозданный ключ заменяется тем, что лежит на флешке&lt;br /&gt;
* При первом включении платы будет создан новый ключ&lt;br /&gt;
&lt;br /&gt;
Помимо добавления указанных команд в скрипт ничего больше делать не надо&lt;br /&gt;
&lt;br /&gt;
==Daemon==&lt;br /&gt;
&lt;br /&gt;
Для настройки демона:&lt;br /&gt;
&lt;br /&gt;
* Добавляем строки в файл custom_init.sh&lt;br /&gt;
* Кидаем на загрузочный раздел флешки папку из архива [[:File:daemon.rar]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp -r /run/media/mmcblk0p1/daemon/lsb /lib/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serial port на новом линуксе ===&lt;br /&gt;
Выяснилось, что без доп. настройки, в последовательный порт (dev/ttyPS0) после каждой посылки добавляются символы CR и LF. Оказалось, что и RTKLib, и софт Листопада не хотят работать с таким окончанием пакетов.&lt;br /&gt;
&lt;br /&gt;
Выше не совсем так, скорее мысль в том, что каждый символ LF (0x0A) в наших данных меняется на символы CR LF, т.е. (0x0D0A). И тогда, в нашем битовом потоке меняется размер и содержимое и парсеры работают некорректно.&lt;br /&gt;
Старый линукс на Ориксах добавляет только LF. Для решения проблемы нужно через stty выключить в настройках порта опцию '''onlcr''' (преобразовывать перевод строки в возврат каретки и новую строку).&lt;br /&gt;
&lt;br /&gt;
Сделать это удалось пока только изменив скрипт демона receiver. Для решения проблемы заходим в /run/media/mmcblk0p1/daemon/receiver, и в начале секции receiver_start() {...} добавляем команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stty -F /dev/ttyPS0 -onlcr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==device tree==&lt;br /&gt;
&lt;br /&gt;
Для внесения изменений в device tree добавляем нужные строки в файл&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
[https://www.xilinx.com/support/answers/61117.html пример]&lt;br /&gt;
&lt;br /&gt;
Для разборки device-tree [http://xillybus.com/tutorials/device-tree-zynq-1 ссылка]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dtb -O dts -o &amp;lt;name&amp;gt;.dts &amp;lt;name&amp;gt;.dtb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для сборки device-tree&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dts -O dtb -o &amp;lt;name&amp;gt;.dtb &amp;lt;name&amp;gt;.dts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Модификация device-tree ==&lt;br /&gt;
&lt;br /&gt;
После долгих мучений получилось поднять DP83867 только после добавления модификатора в файл [https://forums.xilinx.com/t5/Embedded-Linux/ZC702-Like-Board-with-DP83867CR-Ethernet-Petalinux-2017-4/td-p/831873 волшебная статья]&lt;br /&gt;
&lt;br /&gt;
[https://www.kernel.org/doc/Documentation/devicetree/bindings/net/ti%2Cdp83867.txt описание параметров]&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
=== Single Kit-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth1(с mdio) и выключен eth0.&lt;br /&gt;
&lt;br /&gt;
'''Так работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок =  Развернутый .dtb:}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dts-v1/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
	#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	compatible = &amp;quot;xlnx,zynq-7000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	cpus {&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
		cpu@0 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
			clock-latency = &amp;lt;0x3e8&amp;gt;;&lt;br /&gt;
			cpu0-supply = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			operating-points = &amp;lt;0xa2c2a 0xf4240 0x51615 0xf4240&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cpu@1 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fpga-full {&lt;br /&gt;
		compatible = &amp;quot;fpga-region&amp;quot;;&lt;br /&gt;
		fpga-mgr = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	pmu@f8891000 {&lt;br /&gt;
		compatible = &amp;quot;arm,cortex-a9-pmu&amp;quot;;&lt;br /&gt;
		interrupts = &amp;lt;0x0 0x5 0x4 0x0 0x6 0x4&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		reg = &amp;lt;0xf8891000 0x1000 0xf8893000 0x1000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fixedregulator {&lt;br /&gt;
		compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
		regulator-name = &amp;quot;VCCPINT&amp;quot;;&lt;br /&gt;
		regulator-min-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-max-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-boot-on;&lt;br /&gt;
		regulator-always-on;&lt;br /&gt;
		linux,phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	amba {&lt;br /&gt;
		u-boot,dm-pre-reloc;&lt;br /&gt;
		compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
&lt;br /&gt;
		adc@f8007100 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-xadc-1.00.a&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8007100 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x7 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0008000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x13 0x1 0x24&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0008000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1c 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0009000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x14 0x1 0x25&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0009000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x33 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		gpio@e000a000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-gpio-1.0&amp;quot;;&lt;br /&gt;
			#gpio-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2a&amp;gt;;&lt;br /&gt;
			gpio-controller;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x14 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000a000 0x1000&amp;gt;;&lt;br /&gt;
			emio-gpio-width = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			gpio-mask-high = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			gpio-mask-low = &amp;lt;0x5600&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0004000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0005000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		interrupt-controller@f8f01000 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-gic&amp;quot;;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			reg = &amp;lt;0xf8f01000 0x1000 0xf8f00100 0x100&amp;gt;;&lt;br /&gt;
			num_cpus = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			num_interrupts = &amp;lt;0x60&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cache-controller@f8f02000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl310-cache&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f02000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2 0x4&amp;gt;;&lt;br /&gt;
			arm,data-latency = &amp;lt;0x3 0x2 0x2&amp;gt;;&lt;br /&gt;
			arm,tag-latency = &amp;lt;0x2 0x2 0x2&amp;gt;;&lt;br /&gt;
			cache-unified;&lt;br /&gt;
			cache-level = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@f8006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ddrc-a05&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8006000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ocmc@f800c000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ocmc-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x3 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf800c000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0000000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x17 0x1 0x28&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0000000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1b 0x4&amp;gt;;&lt;br /&gt;
			device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
			port-number = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0001000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x18 0x1 0x29&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0001000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x32 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0006000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1a 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x19 0x1 0x22&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0007000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x31 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1a 0x1 0x23&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e000d000 {&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xa 0x1 0x2b&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-qspi-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x13 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000d000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@e000e000 {&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;memclk&amp;quot;, &amp;quot;aclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xb 0x1 0x2c&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,pl353-smc-r2p1&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x12 0x4&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			reg = &amp;lt;0xe000e000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			flash@e1000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;arm,pl353-nand-r2p1&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe1000000 0x1000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			flash@e2000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;cfi-flash&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe2000000 0x2000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000b000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000b000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x16 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1e 0x1 0x1e 0x1 0xd&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000c000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000c000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2d 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1f 0x1 0x1f 0x1 0xe&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
			xlnx,ptp-enet-clock = &amp;lt;0x69f6bcb&amp;gt;;&lt;br /&gt;
			local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
			phy-handle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
			xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			mdio {&lt;br /&gt;
				status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
				phy@12 {&lt;br /&gt;
					compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
					device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
					reg = &amp;lt;0xc&amp;gt;;&lt;br /&gt;
					ti,rx-internal-delay = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
					ti,tx-internal-delay = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
					ti,fifo-depth = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
					ti,min-output-impedance;&lt;br /&gt;
					ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
					status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
					linux,phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
					phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
				};&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0100000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x15 0x1 0x20&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x18 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0100000 0x1000&amp;gt;;&lt;br /&gt;
			xlnx,has-cd = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			xlnx,has-power = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			xlnx,has-wp = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0101000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x16 0x1 0x21&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2f 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0101000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		slcr@f8000000 {&lt;br /&gt;
			u-boot,dm-pre-reloc;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-slcr&amp;quot;, &amp;quot;syscon&amp;quot;, &amp;quot;simple-mfd&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8000000 0x1000&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			linux,phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			clkc@100 {&lt;br /&gt;
				u-boot,dm-pre-reloc;&lt;br /&gt;
				#clock-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				compatible = &amp;quot;xlnx,ps7-clkc&amp;quot;;&lt;br /&gt;
				fclk-enable = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
				clock-output-names = &amp;quot;armpll&amp;quot;, &amp;quot;ddrpll&amp;quot;, &amp;quot;iopll&amp;quot;, &amp;quot;cpu_6or4x&amp;quot;, &amp;quot;cpu_3or2x&amp;quot;, &amp;quot;cpu_2x&amp;quot;, &amp;quot;cpu_1x&amp;quot;, &amp;quot;ddr2x&amp;quot;, &amp;quot;ddr3x&amp;quot;, &amp;quot;dci&amp;quot;, &amp;quot;lqspi&amp;quot;, &amp;quot;smc&amp;quot;, &amp;quot;pcap&amp;quot;, &amp;quot;gem0&amp;quot;, &amp;quot;gem1&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;, &amp;quot;can0&amp;quot;, &amp;quot;can1&amp;quot;, &amp;quot;sdio0&amp;quot;, &amp;quot;sdio1&amp;quot;, &amp;quot;uart0&amp;quot;, &amp;quot;uart1&amp;quot;, &amp;quot;spi0&amp;quot;, &amp;quot;spi1&amp;quot;, &amp;quot;dma&amp;quot;, &amp;quot;usb0_aper&amp;quot;, &amp;quot;usb1_aper&amp;quot;, &amp;quot;gem0_aper&amp;quot;, &amp;quot;gem1_aper&amp;quot;, &amp;quot;sdio0_aper&amp;quot;, &amp;quot;sdio1_aper&amp;quot;, &amp;quot;spi0_aper&amp;quot;, &amp;quot;spi1_aper&amp;quot;, &amp;quot;can0_aper&amp;quot;, &amp;quot;can1_aper&amp;quot;, &amp;quot;i2c0_aper&amp;quot;, &amp;quot;i2c1_aper&amp;quot;, &amp;quot;uart0_aper&amp;quot;, &amp;quot;uart1_aper&amp;quot;, &amp;quot;gpio_aper&amp;quot;, &amp;quot;lqspi_aper&amp;quot;, &amp;quot;smc_aper&amp;quot;, &amp;quot;swdt&amp;quot;, &amp;quot;dbg_trc&amp;quot;, &amp;quot;dbg_apb&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x100 0x100&amp;gt;;&lt;br /&gt;
				ps-clk-frequency = &amp;lt;0x1fca055&amp;gt;;&lt;br /&gt;
				linux,phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			rstc@200 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,zynq-reset&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x200 0x48&amp;gt;;&lt;br /&gt;
				#reset-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			pinctrl@700 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,pinctrl-zynq&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x700 0x200&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		dmac@f8003000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl330&amp;quot;, &amp;quot;arm,primecell&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8003000 0x1000&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupt-names = &amp;quot;abort&amp;quot;, &amp;quot;dma0&amp;quot;, &amp;quot;dma1&amp;quot;, &amp;quot;dma2&amp;quot;, &amp;quot;dma3&amp;quot;, &amp;quot;dma4&amp;quot;, &amp;quot;dma5&amp;quot;, &amp;quot;dma6&amp;quot;, &amp;quot;dma7&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xd 0x4 0x0 0xe 0x4 0x0 0xf 0x4 0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x28 0x4 0x0 0x29 0x4 0x0 0x2a 0x4 0x0 0x2b 0x4&amp;gt;;&lt;br /&gt;
			#dma-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#dma-channels = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
			#dma-requests = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1b&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;apb_pclk&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		devcfg@f8007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-devcfg-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x8 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8007000 0x100&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc 0x1 0xf 0x1 0x10 0x1 0x11 0x1 0x12&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;;&lt;br /&gt;
			syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		efuse@f800d000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-efuse&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf800d000 0x20&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00200 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-global-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00200 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xb 0x301&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8001000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xa 0x4 0x0 0xb 0x4 0x0 0xc 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8001000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8002000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x25 0x4 0x0 0x26 0x4 0x0 0x27 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8002000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00600 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xd 0x301&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-twd-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00600 0x20&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0002000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1c&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x15 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0003000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1d&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2c 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0003000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		watchdog@f8005000 {&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2d&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,wdt-r1p2&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x9 0x1&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8005000 0x1000&amp;gt;;&lt;br /&gt;
			timeout-sec = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	chosen {&lt;br /&gt;
		bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk&amp;quot;;&lt;br /&gt;
		stdout-path = &amp;quot;serial0:115200n8&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	aliases {&lt;br /&gt;
		ethernet0 = &amp;quot;/amba/ethernet@e000c000&amp;quot;;&lt;br /&gt;
		serial0 = &amp;quot;/amba/serial@e0000000&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	memory {&lt;br /&gt;
		device_type = &amp;quot;memory&amp;quot;;&lt;br /&gt;
		reg = &amp;lt;0x0 0x10000000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
=== Single On-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
&lt;br /&gt;
'''Работает гигабит через type-c! Работает hot plug. Успех.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dual eth ===&lt;br /&gt;
&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Dual-phys-on-MDIO-EMIO/td-p/737716 интересная статья о дуал eth]&lt;br /&gt;
&lt;br /&gt;
Попытка поднять два физика. '''Пока не работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 00];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 01];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oryx ===&lt;br /&gt;
&lt;br /&gt;
Итоговый system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Меняем номера uart, чтобы системным был ttyPS1, а пользовательским ttyPS0&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
        serial0 = &amp;amp;uart0;&lt;br /&gt;
        serial1 = &amp;amp;uart1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS1,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
            stdout-path = &amp;quot;serial1:115200n8&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
            compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
            interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
            interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart0{&lt;br /&gt;
    port-number = &amp;lt;0&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart1{&lt;br /&gt;
    port-number = &amp;lt;1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
Pullup пока что все включены&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Xilinx/u-boot-xlnx/blob/master/doc/device-tree-bindings/net/micrel-ksz90x1.txt статья в помощь]&lt;br /&gt;
&lt;br /&gt;
'''Работает'''&lt;br /&gt;
&lt;br /&gt;
На новых платах(с отпаянными линиями линиями eth):&lt;br /&gt;
* на полноценных проводах с ходу&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
На старых платах:&lt;br /&gt;
&lt;br /&gt;
* на полноценных проводах только если выставить 100 в ethtool&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
Везде работает так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!&lt;br /&gt;
&lt;br /&gt;
Можно в custom_itit.sh прописать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifdown eth0&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
ifup eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В принципе, работает сеть на новой плате с нормальным кабелем без модификации devicetree. Остальные комбинации плат-кабелей надо проверять&lt;br /&gt;
&lt;br /&gt;
== i2c ==&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages -&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для поиска устройств можно написать&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2cdetect -y -r 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842160/Cadence+I2C+Driver Статья] по i2c и RTC&lt;br /&gt;
&lt;br /&gt;
== QSPI Flash ==&lt;br /&gt;
&lt;br /&gt;
для работы по флешь памяти как в ките (S25FL128S) - оставляем в дев.три родные compatible = &amp;quot;n25q512a&amp;quot;,&amp;quot;micron,m25p80&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== SWDT System Watchdog Timer==&lt;br /&gt;
&lt;br /&gt;
* Модифицируем Uenv для настройки wawtchdog через uboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создаем скрипт для сброса watchdog:&lt;br /&gt;
&lt;br /&gt;
swdt_rst.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch -n 5 'devmem 0xf8005008 32 0x1999' &amp;amp;&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Добавляем вызов скрипта в автозагрузку&lt;br /&gt;
&lt;br /&gt;
PS Посмотреть можно в проекте bin/Clonicus, коммит ffc437e435d3b5c207bb1186a9561fd06a46d89f&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
* Включаем в ядро подходящий драйвер&lt;br /&gt;
&lt;br /&gt;
* Модифицируем device-tree&lt;br /&gt;
&lt;br /&gt;
Вставляем в девайс три:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    i2c0: i2c@e0004000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
        rtc@51 {&lt;br /&gt;
                compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
                reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
    i2c1: i2c@e0005000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет выглядеть так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2c@e0004000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    rtc@51 {&lt;br /&gt;
        compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
        reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
i2c@e0005000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если готового драйвера нет:&lt;br /&gt;
&lt;br /&gt;
UG1144 pg.54&lt;br /&gt;
&lt;br /&gt;
Создаем новый модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t modules --name &amp;lt;name_module&amp;gt; --enable&lt;br /&gt;
petalinux-create -t modules --name rtc-pcf85363 --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим исходный код в project-spec/meta-user/recipes-modules/rtc-pcf85363/files&lt;br /&gt;
&lt;br /&gt;
Исправленный драйвер лежит в git Clonicus\linux\&lt;br /&gt;
&lt;br /&gt;
Для удаления модуля:&lt;br /&gt;
&lt;br /&gt;
* удаляем папку из project-spec/meta-user/recipes-modules&lt;br /&gt;
&lt;br /&gt;
* В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку&lt;br /&gt;
&lt;br /&gt;
* переоткрыть petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Пробуем собрать модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c &amp;lt;name_module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И перепаковываем BOOT.bin&lt;br /&gt;
&lt;br /&gt;
Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)&lt;br /&gt;
&lt;br /&gt;
просмотр модулей&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
загрузить драйвер можно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/4.9.0-xilinx-v2017.4/extra/rtc-pcf85363.ko&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe rtc-pcf85363&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''&lt;br /&gt;
&lt;br /&gt;
Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC&lt;br /&gt;
&lt;br /&gt;
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -r -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Синхронизация rtc по системному времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим custom_init.sh для изменения default-rtc на наше устройство&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /dev/rtc&lt;br /&gt;
ln -s /dev/rtc2 /dev/rtc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установка системного времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
date --set &amp;quot;2013-7-31 09:30&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись системного времени в RTC&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись времени RTC в системное время&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -s&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить время с интеренета&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rdate -s &amp;lt;IP address of time server&amp;gt;&lt;br /&gt;
rdate -s 132.163.96.5 (example)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При перезагрузке &amp;quot;reboot&amp;quot; система автоматически запишет системное время в RTC&lt;br /&gt;
&lt;br /&gt;
== FPGA CONFIG from Uboot ==&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы прошить PL из uboot используем команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fpga loadb 0 &amp;lt;ddr_file_addr&amp;gt; &amp;lt;file_size&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо скриптами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit // читаем файл в ddr&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000 // прошиваем PL&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_loadipaddr // вызов самих скриптов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
0x10_0000 - начальный адрес ddr&lt;br /&gt;
&lt;br /&gt;
0x1_400_000 - размер в байтах для 20МБайт - указываем размер битника с запасом. Теоретически может так не работать, но работает&lt;br /&gt;
&lt;br /&gt;
== ETH over TTY==&lt;br /&gt;
&lt;br /&gt;
В ядре включаем: slip, Universal TUN/TAP&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем net-tools&lt;br /&gt;
&lt;br /&gt;
Включаем iptables для перемршрутизации между подсетями и для него:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[*] Networking support  ---&amp;gt;                                          [CONFIG_NET]&lt;br /&gt;
      Networking Options  ---&amp;gt;&lt;br /&gt;
        [*] Network packet filtering framework (Netfilter) ---&amp;gt;       [CONFIG_NETFILTER]&lt;br /&gt;
          [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]&lt;br /&gt;
          Core Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter connection tracking support               [CONFIG_NF_CONNTRACK]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]&lt;br /&gt;
          IP: Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PC1:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.1/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PC2:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.2/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
== UART_PL ==&lt;br /&gt;
&lt;br /&gt;
Включаем в настройках ядра поддержку uart_lite, выставляем правильное максимальное число уартов&lt;br /&gt;
&lt;br /&gt;
Модифицируем system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Обращаем внимание на нумерацию serial, axi_uartlite, она должна не повторяться. То же самое с interrupts &lt;br /&gt;
Указываем верный физический адрес на шине и диапазон адресов в &amp;lt;reg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
            serial2 = &amp;amp;axi_uartlite_0;&lt;br /&gt;
            serial3 = &amp;amp;axi_uartlite_1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
/ {&lt;br /&gt;
    amba_pl {&lt;br /&gt;
        #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
        ranges;&lt;br /&gt;
        &lt;br /&gt;
        axi_uartlite_0: serial@80000008 {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 30 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;3&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x80000008 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
        axi_uartlite_1: serial@8000001C {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 31 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;4&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x8000001C 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ПЛИС не прошита - будет кернел паник&lt;br /&gt;
&lt;br /&gt;
== IRQ ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки irq добавляем в device-tree&lt;br /&gt;
&lt;br /&gt;
'''Важно - мы перетираем bootargs!'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
                    compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
                    interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                    interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
                    reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
&lt;br /&gt;
Запустил на Z706&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver во-первых]&lt;br /&gt;
[http://zedboard.org/content/using-petalinux-configure-zedboard%EF%BC%8C-usb-otg-can-not-work во-вторых]&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2016-3-zynq-7010-USB-not-working/td-p/737696 в-третьих]&lt;br /&gt;
&lt;br /&gt;
В дефолтных настройках ядра petalinux_2018.1 все было включено&lt;br /&gt;
&lt;br /&gt;
включаем ресет на MIO7 pullup disabled&lt;br /&gt;
&lt;br /&gt;
все ноги интерфейса ulpi pullup disabled&lt;br /&gt;
&lt;br /&gt;
Содержимое system-user.dtsi&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
	/{&lt;br /&gt;
&lt;br /&gt;
    usb_phy0:phy0 {&lt;br /&gt;
&lt;br /&gt;
        compatible=&amp;quot;ulpi-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        #phy-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       view-port=&amp;lt;0x170&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       drv-vbus;&lt;br /&gt;
&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;amp;usb0 {&lt;br /&gt;
&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        dr_mode = &amp;quot;host&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        usb-phy = &amp;lt;&amp;amp;usb_phy0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB-ETHERNET ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     USB support -&amp;gt;&lt;br /&gt;
          [*] USB Modem (CDC ACM)&lt;br /&gt;
          USB Gadget Support -&amp;gt;&lt;br /&gt;
               [*] Ethernet Control Model (all)&lt;br /&gt;
               [*] RNDIS&lt;br /&gt;
               [*] Ethernet Emulation Model&lt;br /&gt;
               [*] CDC Composite Device (Ethernet and ACM)&lt;br /&gt;
               [*] USB Gadget Drivers (Ethernet gadget...)&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          USB Network Adapters -&amp;gt;&lt;br /&gt;
               [*] Realtek RTL8152/RTL8153&lt;br /&gt;
               [*] Multi-purpose USB Networking Framework&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi Dongle ==&lt;br /&gt;
&lt;br /&gt;
[https://forum.trenz-electronic.de/index.php?topic=747.0 раз]&lt;br /&gt;
[https://github.com/jinchenglee/zybo_linux_setup_doc два]&lt;br /&gt;
[http://billauer.co.il/blog/2014/06/linux-realtek-hostapd/ три]&lt;br /&gt;
&lt;br /&gt;
Творим:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Networking support -&amp;gt;&lt;br /&gt;
     Wireless -&amp;gt;&lt;br /&gt;
          [*] cfg80211&lt;br /&gt;
          [*] Generic IEEE 802.11 ... (mac80211)&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          Wireless LAN -&amp;gt;&lt;br /&gt;
               Realtek rtlwifi family of devices -&amp;gt;&lt;br /&gt;
                    [*] Realtek ..../RTL8188CE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8188EE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter&lt;br /&gt;
     Staging drivers -&amp;gt;&lt;br /&gt;
          [*] Realtek RTL8188EU wireless LAN MIC driver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rootfs&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem packages -&amp;gt;&lt;br /&gt;
     network -&amp;gt;&lt;br /&gt;
          wpa-supplicant -&amp;gt;&lt;br /&gt;
               [*] wpa-supplicant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lwfinger/rtl8188eu/blob/master/rtl8188eufw.bin качаем файл]&lt;br /&gt;
&lt;br /&gt;
Модификаци инит-скрипта&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /run/media/mmcblk0p1/wpa_supplicant.conf /etc/&lt;br /&gt;
&lt;br /&gt;
mkdir /lib/firmware/&lt;br /&gt;
mkdir /lib/firmware/rtlwifi/&lt;br /&gt;
cp /run/media/mmcblk0p1/rtl8188eufw.bin /lib/firmware/rtlwifi/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi ESP ==&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+SDIO+Wifi Xilinx SDIP WiFi]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/sdio-wifi-driver-ar6103-problem Zedboard раз]&lt;br /&gt;
&lt;br /&gt;
[https://stackoverflow.com/questions/32129689/how-to-bind-sdio1-with-wi-fi-linux два]&lt;br /&gt;
&lt;br /&gt;
[http://picozed.org/content/steps-get-wlink8-working-using-petalinux-picozed picozed три]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/adding-wi-fi-and-bluetooth-connectivity-zedboard-using-murata-1dx-pmod zedboard четыре]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Оживление 2-го ядра ==&lt;br /&gt;
&lt;br /&gt;
* Находим /home/ivan/clonicus_1.2.3/build/tmp/work-shared/plnx_arm/kernel-source/arch/arm/mach-zynq/efuse.c&lt;br /&gt;
* В функции zynq_efuse_cpu_state делаем сразу ретурн тру&lt;br /&gt;
* Че-нибудь меняем в настройках ядра для пересборки&lt;br /&gt;
* Выполняем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c kernel -x compile -f&lt;br /&gt;
petalinux-build -c kernel -x deploy -f&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Забираем image.ub&lt;br /&gt;
&lt;br /&gt;
'''ИЛИ'''&lt;br /&gt;
&lt;br /&gt;
Правим device-tree, заменяем адрес efuse на 0xf800cff0&lt;br /&gt;
&lt;br /&gt;
== webserver == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/emlid/ReachView Репозиторий emlid ReachView] (bnd на py/Flask, fnd на html/Ajax/js/Bootstrap)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Backend:'''&lt;br /&gt;
&lt;br /&gt;
* [http://svenand.blogdrives.com/archive/195.html#.XPTYt4gzaUk Источник по busybox-httpd]&lt;br /&gt;
&lt;br /&gt;
* [https://www.afternerd.com/blog/python-http-server/ Гайд по python server]&lt;br /&gt;
&lt;br /&gt;
* [https://ru.wikibooks.org/wiki/Flask Викиучебник по Flask]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/193242/ ХаброГайд по python/Flask]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frontend:'''&lt;br /&gt;
&lt;br /&gt;
* [https://unminify.com/ unminify CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://getbootstrap.com/docs/4.3/getting-started/introduction/ Bootstrap EN getting started]&lt;br /&gt;
&lt;br /&gt;
* [https://bootstrap-4.ru/ Bootstrap RU]&lt;br /&gt;
&lt;br /&gt;
* [http://htmlbook.ru/samhtml/tekst/spetssimvoly Справочник по операторам и тегам HTML/CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/howto/default.asp Сборник шаблонов CSS W3schools]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/w3css/w3css_tabulators.asp Анимированный сайдбар/табы]&lt;br /&gt;
&lt;br /&gt;
* [https://css-tricks.com/ CSS Tricks]&lt;br /&gt;
&lt;br /&gt;
* [https://www.cssmatic.com/ Онлайн тени/границы/градиент блоков]&lt;br /&gt;
&lt;br /&gt;
* [https://internetingishard.com/html-and-css/semantic-html/ Semantic HTML grid layout]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/202408/ Хаброгайд(ч1) по верстке]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/211032/ ХаброГайд(ч2) по Bootstrap]&lt;br /&gt;
&lt;br /&gt;
* [https://fontawesome.com/icons?d=gallery Fontawesome ICONS open lib]&lt;br /&gt;
&lt;br /&gt;
:* [https://htmlacademy.ru/courses/43/run/1 Нормальный онлайн HTML/CSS/JS editor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== busybox httpd ===&lt;br /&gt;
В petalinux многие пакеты скукожены до их минимальных вариантов и встроены в общий пакет busybox. &lt;br /&gt;
В busybox есть также и вебсервер busybox-httpd.&lt;br /&gt;
Для использования нужно на этапе настройки файловой системы его включить:&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Конфиг: &lt;br /&gt;
 base -&amp;gt;&lt;br /&gt;
     busybox -&amp;gt;&lt;br /&gt;
          [*] busybox&lt;br /&gt;
          [*] busybox-httpd&lt;br /&gt;
          [ ] busybox-hwclock&lt;br /&gt;
          [*] busybox-inetd&lt;br /&gt;
          [*] busybox-mdev&lt;br /&gt;
          [ ] busybox-syslog &lt;br /&gt;
          [*] busybox-udhcpc &lt;br /&gt;
          [ ] busybox-udhcpd &lt;br /&gt;
&lt;br /&gt;
Сам httpd будет в '''/usr/sbin'''.&lt;br /&gt;
Рабочая папка по умолчанию в '''/srv/www/'''. Если в нее кидать файлы, то именно из нее будет отображаться контент в браузере. Папку можно изменить, перезапустив httpd с ключом -h &amp;lt;workdir&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Порт по умолчанию 80. Работает, как демон в /etc/init.d/, вкл-выкл оттуда же.&lt;br /&gt;
&lt;br /&gt;
Если положить в /srv/www/ файл index.html с неким кодом, то в браузере отобразится вебморда. Картинки работают по ссылкам.&lt;br /&gt;
&lt;br /&gt;
'''index.html'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;clonicus'112 webserver&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Hello, World!&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;h4&amp;gt;Web server is now up!&amp;lt;/h4&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;https://i.redd.it/oagz5eobkkt11.jpg&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;http://www.srns.ru&amp;quot;&amp;gt;For more information see SRNS.ru&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== python в petalinux ===&lt;br /&gt;
В petalinux 2017.4 есть 2 питона - 2.7 и 3.5.&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
'''python2.7'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     devel-&amp;gt;&lt;br /&gt;
         python-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''python3.5'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc-&amp;gt;&lt;br /&gt;
         python3-*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Модуль runpy.py для запуска команд вида 'python -m &amp;lt;module&amp;gt;' находится в python -&amp;gt; python-misc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimpleHTTPServer.py ===&lt;br /&gt;
Для первого теста поднимем встроенный в python2.7 минисервер SimpleHTTPServer.py в /usr/lib/python2.7. &lt;br /&gt;
&lt;br /&gt;
Для его запуска напишем скрипт&lt;br /&gt;
&lt;br /&gt;
'''webserver.py''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import SimpleHTTPServer &lt;br /&gt;
import SocketServer &lt;br /&gt;
 &lt;br /&gt;
PORT = 80 &lt;br /&gt;
 &lt;br /&gt;
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler &lt;br /&gt;
 &lt;br /&gt;
httpd = SocketServer.TCPServer((&amp;quot;&amp;quot;, PORT), Handler) &lt;br /&gt;
 &lt;br /&gt;
print &amp;quot;serving at port&amp;quot;, PORT &lt;br /&gt;
httpd.serve_forever()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $ python webserver.py &lt;br /&gt;
&lt;br /&gt;
При наличии в папке со скриптом файла index.html сервер поднимется автоматически.&lt;br /&gt;
&lt;br /&gt;
=== Добавление слоев в сборку ===&lt;br /&gt;
&lt;br /&gt;
[https://www.srns.ru/wiki/Blog:DneprovD/18.07.2019_Yocto_layers Переехало в статью]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:Oryx]]&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2018-05-16 10:06:30 +0300 | Lipa }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:41:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр '''всех изменений и удалений''' между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
'''Про бэкап:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки https://docs.gitlab.com/ee/update/#pre-upgrade-and-post-upgrade-checks&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит. Сохранить куда-нибудь. На сервере /media/hard/backups доступен только для root, поэтому можно перекинуть файлы бэкапа и настроек в /tmp, передать их другому пользователю chown, или дать chmod 777, и утащить по ssh на другой пк. &amp;lt;source lang=bash&amp;gt;sudo gitlab-backup create SKIP=db,uploads,artifacts&amp;lt;/source&amp;gt;&lt;br /&gt;
# При запуске бэкапа можно не брать с собой артефакты. &lt;br /&gt;
# На всякий случай, перед обновлением НЕ делался sudo apt upgrade, чтобы не поломать другие работающие программы и их зависимости. Гилтаб сам обновит что ему надо.&lt;br /&gt;
# Запрещено при обновлении прыгать по мажорным версиям. Путь обновления и команды брать из https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
# После обновления сервера можно обновить и раннеры.&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
Не скакать по версиям, накатывать обновления последовательно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:38:29Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Как делать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр '''всех изменений и удалений''' между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
'''Про бэкап:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки https://docs.gitlab.com/ee/update/#pre-upgrade-and-post-upgrade-checks&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит. Сохранить куда-нибудь. На сервере /media/hard/backups доступен только для root, поэтому можно перекинуть файлы бэкапа и настроек в /tmp, передать их другому пользователю chown, или дать chmod 777, и утащить по ssh на другой пк. &amp;lt;source lang=bash&amp;gt;sudo gitlab-backup create SKIP=db,uploads,artifacts&amp;lt;/source&amp;gt;&lt;br /&gt;
# При запуске бэкапа можно не брать с собой артефакты. &lt;br /&gt;
# На всякий случай, перед обновлением НЕ делался sudo apt upgrade, чтобы не поломать другие работающие программы и их зависимости. Гилтаб сам обновит что ему надо.&lt;br /&gt;
# Запрещено при обновлении прыгать по мажорным версиям. Путь обновления и команды брать из https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
# После обновления сервера можно обновить и раннеры.&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
Не скакать по версиям, накатывать обновления последовательно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:37:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр '''всех изменений и удалений''' между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
'''Про бэкап:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки https://docs.gitlab.com/ee/update/#pre-upgrade-and-post-upgrade-checks&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит. Сохранить куда-нибудь. На сервере /media/hard/backups доступен только для root, поэтому можно перекинуть файлы бэкапа и настроек в /tmp, передать их другому пользователю chown, или дать chmod 777, и утащить по ssh на другой пк. &amp;lt;source lang=bash&amp;gt;sudo gitlab-backup create SKIP=db,uploads,artifacts&amp;lt;/source&amp;gt;&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. &lt;br /&gt;
# На всякий случай, перед обновлением НЕ делался sudo apt upgrade, чтобы не поломать другие работающие программы и их зависимости. Гилтаб сам обновит что ему надо.&lt;br /&gt;
# Запрещено при обновлении прыгать по мажорным версиям. Путь обновления и команды брать из https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
# После обновления сервера можно обновить и раннеры.&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
Не скакать по версиям, накатывать обновления последовательно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:36:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Как делать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
Про бэкап:&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки https://docs.gitlab.com/ee/update/#pre-upgrade-and-post-upgrade-checks&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит. Сохранить куда-нибудь. На сервере /media/hard/backups доступен только для root, поэтому можно перекинуть файлы бэкапа и настроек в /tmp, передать их другому пользователю chown, или дать chmod 777, и утащить по ssh на другой пк. &amp;lt;source lang=bash&amp;gt;sudo gitlab-backup create SKIP=db,uploads,artifacts&amp;lt;/source&amp;gt;&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. &lt;br /&gt;
# На всякий случай, перед обновлением НЕ делался sudo apt upgrade, чтобы не поломать другие работающие программы и их зависимости. Гилтаб сам обновит что ему надо.&lt;br /&gt;
# Запрещено при обновлении прыгать по мажорным версиям. Путь обновления и команды брать из https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
# После обновления сервера можно обновить и раннеры.&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
Не скакать по версиям, накатывать обновления последовательно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:35:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Как НЕ делать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
Про бэкап:&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки https://docs.gitlab.com/ee/update/#pre-upgrade-and-post-upgrade-checks&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит. Сохранить куда-нибудь. На сервере /media/hard/backups доступен только для root, поэтому можно перекинуть файлы бэкапа и настроек в /tmp, передать их другому пользователю chown, или дать chmod 777, и утащить по ssh на другой пк.&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. &lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo gitlab-backup create SKIP=db,uploads,artifacts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# На всякий случай, перед обновлением НЕ делался sudo apt upgrade, чтобы не поломать другие работающие программы и их зависимости. Гилтаб сам обновит что ему надо.&lt;br /&gt;
# Запрещено при обновлении прыгать по мажорным версиям. Путь обновления и команды брать из https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
Не скакать по версиям, накатывать обновления последовательно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:34:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Как делать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
Про бэкап:&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки https://docs.gitlab.com/ee/update/#pre-upgrade-and-post-upgrade-checks&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит. Сохранить куда-нибудь. На сервере /media/hard/backups доступен только для root, поэтому можно перекинуть файлы бэкапа и настроек в /tmp, передать их другому пользователю chown, или дать chmod 777, и утащить по ssh на другой пк.&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. &lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo gitlab-backup create SKIP=db,uploads,artifacts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# На всякий случай, перед обновлением НЕ делался sudo apt upgrade, чтобы не поломать другие работающие программы и их зависимости. Гилтаб сам обновит что ему надо.&lt;br /&gt;
# Запрещено при обновлении прыгать по мажорным версиям. Путь обновления и команды брать из https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:29:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
'''Релизы:'''&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
'''Обновление:'''&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
'''Скрипт''' для фикса проблем с убунтовыми репозиториями при apt update:&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
'''Помощник''' по обнове с версиями и необходимыми командами:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
Про бэкап:&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит.&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. sudo gitlab-backup create SKIP=db,uploads,artifacts&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:26:38Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
Скрипт для фикса проблем с убунтовыми репозиториями при apt update https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
Помощник по обнове с версиями и необходимыми командами:&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
Про бэкап&lt;br /&gt;
https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит.&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. sudo gitlab-backup create SKIP=db,uploads,artifacts&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:26:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Как делать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
Скрипт для фикса проблем с убунтовыми репозиториями при apt update https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
Помощник по обнове с версиями и необходимыми командами:&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
# Выполнить предпроверки&lt;br /&gt;
# Сделать руками бэкап гитлаба и 2 файлов /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb, которые он автоматом не бэкапит.&lt;br /&gt;
# На сервере бэкапы идут в /media/hard/backups. Этот путь задан в файле /etc/gitlab/gitlab.rb.&lt;br /&gt;
# При запуске бэкапа можно не барть с собой артефакты. sudo gitlab-backup create SKIP=db,uploads,artifacts&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:20:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
https://about.gitlab.com/releases/categories/releases/&lt;br /&gt;
https://about.gitlab.com/releases/&lt;br /&gt;
&lt;br /&gt;
https://docs.gitlab.com/ee/update/&lt;br /&gt;
&lt;br /&gt;
Скрипт для фикса проблем с убунтовыми репозиториями при apt update https://about.gitlab.com/install/#ubuntu&lt;br /&gt;
&lt;br /&gt;
Помощник по обнове с версиями и необходимыми командами:&lt;br /&gt;
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=15.8.4&amp;amp;edition=ce&amp;amp;n1=true&lt;br /&gt;
&lt;br /&gt;
Просмотр всех изменений и удалений между версиями:&lt;br /&gt;
https://gitlab-com.gitlab.io/cs-tools/gitlab-cs-tools/what-is-new-since/?tab=deprecations&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Gitlab-old-logo-no-bkgrd.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Gitlab-old-logo-no-bkgrd.png</id>
		<title>Файл:Gitlab-old-logo-no-bkgrd.png</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Gitlab-old-logo-no-bkgrd.png"/>
				<updated>2024-10-28T11:12:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:10:46Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +03:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab</id>
		<title>Blog:DneprovD/10.10.2020 Обновление Gitlab</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/10.10.2020_%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Gitlab"/>
				<updated>2024-10-28T11:10:32Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: Новая страница: «&amp;lt;summary hidden=true&amp;gt; &amp;lt;/summary&amp;gt; {{Форма2}} __TOC__   Страничка про обновление гитлаба со ссылками на всякое  …»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Страничка про обновление гитлаба со ссылками на всякое&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
== Как делать ==&lt;br /&gt;
&lt;br /&gt;
== Как НЕ делать ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SRNS]]&lt;br /&gt;
[[Категория:Git]]&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2020-10-10 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux</id>
		<title>Blog:Lipa/16.05.2018 PetaLinux</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:Lipa/16.05.2018_PetaLinux"/>
				<updated>2024-09-04T08:12:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Автозапуск приложений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary [ hidden ] &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Petalinux.png|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сборка PetaLinux для кастомной железки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
&lt;br /&gt;
Vivado 2018.1 (для single-gigabit ethernet можно более ранние версии)&lt;br /&gt;
&lt;br /&gt;
Начиная с petalinux_2018.1 отсутствует devcfg. Необходимо использовать FPGA manager. Технология нами пока не освоена&lt;br /&gt;
&lt;br /&gt;
Необходима Ubuntu-16.04&lt;br /&gt;
&lt;br /&gt;
Требуется поставить ряд пакетов, полный список приведен в документе [https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug1144-petalinux-tools-reference-guide.pdf#page=9 UG1144]&lt;br /&gt;
&lt;br /&gt;
Устанавливаем PetaLinux в систему. Дистрибутив есть на [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2018-1.html Xilinx], либо у меня на компьютере. '''Ставить PetaLinux необходимо БЕЗ прав суперюзера!'''&lt;br /&gt;
&lt;br /&gt;
кидаем в /components/yocto/ sstate-rel-v2017.4.tar.gz&lt;br /&gt;
&lt;br /&gt;
Подготовка завершена&lt;br /&gt;
&lt;br /&gt;
== Правка Vivado ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки MDIO в Vivado 17.1-17.4 нужен [https://www.xilinx.com/support/answers/69132.html патч]. Ставим!&lt;br /&gt;
&lt;br /&gt;
'''Не помогло.''' Ставим 2018.1&lt;br /&gt;
&lt;br /&gt;
== Сборка ==&lt;br /&gt;
&lt;br /&gt;
Пошаговое руководство по сборке содержится в документе UG1156&lt;br /&gt;
&lt;br /&gt;
В консоли пишем source/[путь к петалинух]/settings.sh&lt;br /&gt;
&lt;br /&gt;
Выполняем шаги из UG1156 по главе 5:&lt;br /&gt;
&lt;br /&gt;
* экспортируем из Vivado .hdf (в блок дизайн File-&amp;gt;Export-&amp;gt;Export Hardware)&lt;br /&gt;
&lt;br /&gt;
* создаем проект PetaLinux&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-create --type project --template zynq --name &amp;lt;PROJECT&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* переходим в папку с текущим проектом&lt;br /&gt;
&lt;br /&gt;
* подключаем файл .hdf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config --get-hw-description=[путь к папке с файлом .hdf]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* перед сборкой системы необходимо выполнить '''все''' команды конфигурации в данной последовательности:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&lt;br /&gt;
$ petalinux-config -c rootfs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config ===&lt;br /&gt;
&lt;br /&gt;
Если хотим спользовать внешний файл device-tree включаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Subsystem AUTO Hardware Settings-&amp;gt;&lt;br /&gt;
     Advances bootable images storage settings-&amp;gt;&lt;br /&gt;
          dtb image settings-&amp;gt;&lt;br /&gt;
               image storage media&lt;br /&gt;
                    primary sd&lt;br /&gt;
               &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset если оперативной памяти менее ~256МБ&lt;br /&gt;
&lt;br /&gt;
Для клоникуса с 256МБ ставим 8'000'000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выставляем точку начала распаковки образа системы&lt;br /&gt;
&lt;br /&gt;
Выключаем копирование образа по sftp (Image Packaging Configuration -&amp;gt; Copy final images)&lt;br /&gt;
&lt;br /&gt;
Отключаем интернет-sstate (Yocto Settings -&amp;gt; Enable Network sstate feeds)&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c kernel===&lt;br /&gt;
&lt;br /&gt;
* Подключаем в ядре поддержку физика и его дров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config -c kernel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для oryx:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*]Ethernet driver support -&amp;gt;&lt;br /&gt;
               [*] Micrel devices&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Drivers for Micrel PHYs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''для clonicus:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers-&amp;gt;&lt;br /&gt;
     [*]Network device support -&amp;gt;&lt;br /&gt;
          [*] PHY Device support and infastructure --&amp;gt;&lt;br /&gt;
               [*] Texas Instruments DP83867 Gigabit PHY&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== petalinux-config -c rootfs ===&lt;br /&gt;
&lt;br /&gt;
Подключаем при необходимости ethtool, gdbserver, gdb, libstdc, libgcc, glib2.0, glibc(glibc &amp;amp; ltd)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc -&amp;gt;&lt;br /&gt;
          gcc-runtime -&amp;gt;&lt;br /&gt;
               [*] libstdc ++&lt;br /&gt;
          gdb --&amp;gt;&lt;br /&gt;
               [*] gdb&lt;br /&gt;
          glib-2.0&lt;br /&gt;
               [*] glib-2.0&lt;br /&gt;
          glibc&lt;br /&gt;
               [*] glibc&lt;br /&gt;
               [*] ldd&lt;br /&gt;
     devel -&amp;gt;&lt;br /&gt;
          python -&amp;gt;&lt;br /&gt;
               python -&amp;gt;&lt;br /&gt;
                    [*] python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опционально:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages-&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
          usbutils -&amp;gt;&lt;br /&gt;
               [*] usbutils&lt;br /&gt;
     console -&amp;gt;&lt;br /&gt;
          network -&amp;gt;&lt;br /&gt;
               ethtool -&amp;gt;&lt;br /&gt;
                    [*] ethtool // необходимо для oryx! для перенастройки autonegotiation&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно еще подключать дебаг i2c&lt;br /&gt;
&lt;br /&gt;
'''Необходимо убедиться, что  образ может распаковаться в размер оперативы'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если будут проблемы, то надо будет править netboot offset&lt;br /&gt;
&lt;br /&gt;
=== device tree ===&lt;br /&gt;
&lt;br /&gt;
Если необходимо внести изменения в device tree, то смотрим конец статьи&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841676/U-Boot+Flattened+Device+Tree Интересная статья по правке devicetree из uboot]&lt;br /&gt;
&lt;br /&gt;
=== Сборка проекта ===&lt;br /&gt;
&lt;br /&gt;
* далее (сборка идет 30-60 минут)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&lt;br /&gt;
cd /images/linux/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* делаем boot.bin в папке /images/linux/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --force&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --kernel --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* записываем в загрузочную область флешки файлы boot.bin и image.ub&lt;br /&gt;
&lt;br /&gt;
== Всякое ==&lt;br /&gt;
&lt;br /&gt;
Если мало памяти как у нас - возможна ошибка image is not a fdt [https://forums.xilinx.com/t5/Embedded-Processor-System-Design/Petalinux-problem-on-custom-board-quot-image-is-not-a-fdt-quot/td-p/754892 ссылка]&lt;br /&gt;
&lt;br /&gt;
Необходимо править netboot offset&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ petalinux-config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
u-boot Configuration-&amp;gt;&lt;br /&gt;
     netboot offset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Можно вручную загрузиться из u-boot'а.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ bootm 0xA000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
$ fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
$ bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно поварьировать адрес&lt;br /&gt;
&lt;br /&gt;
------------&lt;br /&gt;
&lt;br /&gt;
Проверка статуса прошитости FPGA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /sys/class/xdevcfg/xdevcfg/device/prog_done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Uboot==&lt;br /&gt;
&lt;br /&gt;
Для внесения правок в загрузку линукса используем список команд '''env'''&lt;br /&gt;
&lt;br /&gt;
Просмотр текущих команд '''printenv'''&lt;br /&gt;
&lt;br /&gt;
Сброс настроек в дефолт '''env default -a'''&lt;br /&gt;
&lt;br /&gt;
Создать переменную '''env set &amp;lt;имя&amp;gt; &amp;lt;значение&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Правка переменной '''env edit &amp;lt;имя переменной&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Для каждой платы делаем следующее:&lt;br /&gt;
&lt;br /&gt;
* Берем [[Файл:uboot.env.c]]&lt;br /&gt;
&lt;br /&gt;
* Удаляем в конце имени &amp;quot;.c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Записываем на флешку рядом с образом линукса&lt;br /&gt;
&lt;br /&gt;
* Запускаем плату и прерываем autoboot&lt;br /&gt;
&lt;br /&gt;
* Пишем '''editenv ethaddr'''&lt;br /&gt;
&lt;br /&gt;
* Редактируем MAC-адрес&lt;br /&gt;
&lt;br /&gt;
* Пишем '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
* Все! можем ребутать '''reset'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохранить в файл '''saveenv'''&lt;br /&gt;
&lt;br /&gt;
==Автозапуск приложений==&lt;br /&gt;
&lt;br /&gt;
Во-первых [https://support.xilinx.com/s/question/0D52E00006hpahDSAQ/petalinux-runnning-a-script-file-at-startup?language=en_US тыц]&lt;br /&gt;
&lt;br /&gt;
Далее пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t apps --template install -n myapp-init --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим файл /project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# This file is the myapp-init recipe.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
SUMMARY = &amp;quot;Simple myapp-init application&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;PETALINUX/apps&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
LIC_FILES_CHKSUM = &amp;quot;file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SRC_URI = &amp;quot;file://myapp-init&amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FILESEXTRAPATHS_prepend := &amp;quot;${THISDIR}/files:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit update-rc.d&lt;br /&gt;
&lt;br /&gt;
INITSCRIPT_NAME = &amp;quot;myapp-init&amp;quot;&lt;br /&gt;
INITSCRIPT_PARAMS = &amp;quot;start 99 S .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
    install -d ${D}${sysconfdir}/init.d&lt;br /&gt;
    install -m 0755 ${S}/myapp-init ${D}${sysconfdir}/init.d/myapp-init&lt;br /&gt;
}&lt;br /&gt;
FILES_${PN} += &amp;quot;${sysconfdir}/*&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим сам исполняемый скрипт project-spec/meta-user/recipes-apps/myapp-init/files/myapp-init&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Autorun script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Try run custom_init&amp;quot;&lt;br /&gt;
sh /run/media/mmcblk0p1/custom_init.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Записываем на флешку скрипт custom_init.sh с нужными командами и делаем его исполняемым&lt;br /&gt;
&lt;br /&gt;
Записываем файл interfaces&lt;br /&gt;
&lt;br /&gt;
Скачать архив: [[Файл:Init_interfaces.rar]]&lt;br /&gt;
&lt;br /&gt;
==SSH==&lt;br /&gt;
&lt;br /&gt;
Как победить сохранение ssh-ключей:&lt;br /&gt;
&lt;br /&gt;
Добавляем в init_script следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /run/media/mmcblk0p2/.ssh&lt;br /&gt;
ln -s /run/media/mmcblk0p2/.ssh/ /home/root/&lt;br /&gt;
mkdir /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
chmod 400 /run/media/mmcblk0p2/dropbear/&lt;br /&gt;
rm -r /etc/dropbear/&lt;br /&gt;
ln -s /run/media/mmcblk0p2/dropbear/ /etc/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создается ссылка на флешку, где хранятся авторизованные пользователи&lt;br /&gt;
* Создается папка для хранения секретного ключа платы&lt;br /&gt;
* При запуске платы свежесозданный ключ заменяется тем, что лежит на флешке&lt;br /&gt;
* При первом включении платы будет создан новый ключ&lt;br /&gt;
&lt;br /&gt;
Помимо добавления указанных команд в скрипт ничего больше делать не надо&lt;br /&gt;
&lt;br /&gt;
==Daemon==&lt;br /&gt;
&lt;br /&gt;
Для настройки демона:&lt;br /&gt;
&lt;br /&gt;
* Добавляем строки в файл custom_init.sh&lt;br /&gt;
* Кидаем на загрузочный раздел флешки папку из архива [[:File:daemon.rar]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp -r /run/media/mmcblk0p1/daemon/lsb /lib/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/&lt;br /&gt;
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serial port на новом линуксе ===&lt;br /&gt;
Выяснилось, что без доп. настройки, в последовательный порт (dev/ttyPS0) после каждой посылки добавляются символы CR и LF. Оказалось, что и RTKLib, и софт Листопада не хотят работать с таким окончанием пакетов.&lt;br /&gt;
&lt;br /&gt;
Выше не совсем так, скорее мысль в том, что каждый символ LF (0x0A) в наших данных меняется на символы CR LF, т.е. (0x0D0A). И тогда, в нашем битовом потоке меняется размер и содержимое и парсеры работают некорректно.&lt;br /&gt;
Старый линукс на Ориксах добавляет только LF. Для решения проблемы нужно через stty выключить в настройках порта опцию '''onlcr''' (преобразовывать перевод строки в возврат каретки и новую строку).&lt;br /&gt;
&lt;br /&gt;
Сделать это удалось пока только изменив скрипт демона receiver. Для решения проблемы заходим в /run/media/mmcblk0p1/daemon/receiver, и в начале секции receiver_start() {...} добавляем команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
stty -F /dev/ttyPS0 -onlcr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==device tree==&lt;br /&gt;
&lt;br /&gt;
Для внесения изменений в device tree добавляем нужные строки в файл&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
[https://www.xilinx.com/support/answers/61117.html пример]&lt;br /&gt;
&lt;br /&gt;
Для разборки device-tree [http://xillybus.com/tutorials/device-tree-zynq-1 ссылка]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dtb -O dts -o &amp;lt;name&amp;gt;.dts &amp;lt;name&amp;gt;.dtb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для сборки device-tree&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dtc -I dts -O dtb -o &amp;lt;name&amp;gt;.dtb &amp;lt;name&amp;gt;.dts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Модификация device-tree ==&lt;br /&gt;
&lt;br /&gt;
После долгих мучений получилось поднять DP83867 только после добавления модификатора в файл [https://forums.xilinx.com/t5/Embedded-Linux/ZC702-Like-Board-with-DP83867CR-Ethernet-Petalinux-2017-4/td-p/831873 волшебная статья]&lt;br /&gt;
&lt;br /&gt;
[https://www.kernel.org/doc/Documentation/devicetree/bindings/net/ti%2Cdp83867.txt описание параметров]&lt;br /&gt;
&lt;br /&gt;
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
=== Single Kit-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth1(с mdio) и выключен eth0.&lt;br /&gt;
&lt;br /&gt;
'''Так работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок =  Развернутый .dtb:}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dts-v1/;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
	#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
	compatible = &amp;quot;xlnx,zynq-7000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	cpus {&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
		cpu@0 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
			clock-latency = &amp;lt;0x3e8&amp;gt;;&lt;br /&gt;
			cpu0-supply = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			operating-points = &amp;lt;0xa2c2a 0xf4240 0x51615 0xf4240&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cpu@1 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9&amp;quot;;&lt;br /&gt;
			device_type = &amp;quot;cpu&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fpga-full {&lt;br /&gt;
		compatible = &amp;quot;fpga-region&amp;quot;;&lt;br /&gt;
		fpga-mgr = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	pmu@f8891000 {&lt;br /&gt;
		compatible = &amp;quot;arm,cortex-a9-pmu&amp;quot;;&lt;br /&gt;
		interrupts = &amp;lt;0x0 0x5 0x4 0x0 0x6 0x4&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		reg = &amp;lt;0xf8891000 0x1000 0xf8893000 0x1000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	fixedregulator {&lt;br /&gt;
		compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;br /&gt;
		regulator-name = &amp;quot;VCCPINT&amp;quot;;&lt;br /&gt;
		regulator-min-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-max-microvolt = &amp;lt;0xf4240&amp;gt;;&lt;br /&gt;
		regulator-boot-on;&lt;br /&gt;
		regulator-always-on;&lt;br /&gt;
		linux,phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		phandle = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	amba {&lt;br /&gt;
		u-boot,dm-pre-reloc;&lt;br /&gt;
		compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
		#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
		interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		ranges;&lt;br /&gt;
&lt;br /&gt;
		adc@f8007100 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-xadc-1.00.a&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8007100 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x7 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0008000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x13 0x1 0x24&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0008000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1c 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		can@e0009000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-can-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x14 0x1 0x25&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;can_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0009000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x33 0x4&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			tx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			rx-fifo-depth = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		gpio@e000a000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-gpio-1.0&amp;quot;;&lt;br /&gt;
			#gpio-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2a&amp;gt;;&lt;br /&gt;
			gpio-controller;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x14 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000a000 0x1000&amp;gt;;&lt;br /&gt;
			emio-gpio-width = &amp;lt;0x40&amp;gt;;&lt;br /&gt;
			gpio-mask-high = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			gpio-mask-low = &amp;lt;0x5600&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0004000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		i2c@e0005000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		interrupt-controller@f8f01000 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-gic&amp;quot;;&lt;br /&gt;
			#interrupt-cells = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			interrupt-controller;&lt;br /&gt;
			reg = &amp;lt;0xf8f01000 0x1000 0xf8f00100 0x100&amp;gt;;&lt;br /&gt;
			num_cpus = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
			num_interrupts = &amp;lt;0x60&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		cache-controller@f8f02000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl310-cache&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f02000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2 0x4&amp;gt;;&lt;br /&gt;
			arm,data-latency = &amp;lt;0x3 0x2 0x2&amp;gt;;&lt;br /&gt;
			arm,tag-latency = &amp;lt;0x2 0x2 0x2&amp;gt;;&lt;br /&gt;
			cache-unified;&lt;br /&gt;
			cache-level = &amp;lt;0x2&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@f8006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ddrc-a05&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8006000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ocmc@f800c000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-ocmc-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x3 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf800c000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0000000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x17 0x1 0x28&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0000000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1b 0x4&amp;gt;;&lt;br /&gt;
			device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
			port-number = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		serial@e0001000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,xuartps&amp;quot;, &amp;quot;cdns,uart-r1p8&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x18 0x1 0x29&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;uart_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0001000 0x1000&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x32 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0006000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0006000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x1a 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x19 0x1 0x22&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e0007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-spi-r1p6&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe0007000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x31 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1a 0x1 0x23&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		spi@e000d000 {&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;pclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xa 0x1 0x2b&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-qspi-1.0&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x13 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe000d000 0x1000&amp;gt;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		memory-controller@e000e000 {&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;memclk&amp;quot;, &amp;quot;aclk&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xb 0x1 0x2c&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,pl353-smc-r2p1&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x12 0x4&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			reg = &amp;lt;0xe000e000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			flash@e1000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;arm,pl353-nand-r2p1&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe1000000 0x1000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			flash@e2000000 {&lt;br /&gt;
				status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
				compatible = &amp;quot;cfi-flash&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0xe2000000 0x2000000&amp;gt;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000b000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000b000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x16 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1e 0x1 0x1e 0x1 0xd&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ethernet@e000c000 {&lt;br /&gt;
			compatible = &amp;quot;cdns,zynq-gem&amp;quot;, &amp;quot;cdns,gem&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xe000c000 0x1000&amp;gt;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2d 0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1f 0x1 0x1f 0x1 0xe&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
			xlnx,ptp-enet-clock = &amp;lt;0x69f6bcb&amp;gt;;&lt;br /&gt;
			local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
			phy-handle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
			xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			mdio {&lt;br /&gt;
				status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
				#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				#size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
				phy@12 {&lt;br /&gt;
					compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
					device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
					reg = &amp;lt;0xc&amp;gt;;&lt;br /&gt;
					ti,rx-internal-delay = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
					ti,tx-internal-delay = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
					ti,fifo-depth = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
					ti,min-output-impedance;&lt;br /&gt;
					ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
					status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
					linux,phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
					phandle = &amp;lt;0x5&amp;gt;;&lt;br /&gt;
				};&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0100000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x15 0x1 0x20&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x18 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0100000 0x1000&amp;gt;;&lt;br /&gt;
			xlnx,has-cd = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			xlnx,has-power = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
			xlnx,has-wp = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		sdhci@e0101000 {&lt;br /&gt;
			compatible = &amp;quot;arasan,sdhci-8.9a&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clock-names = &amp;quot;clk_xin&amp;quot;, &amp;quot;clk_ahb&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x16 0x1 0x21&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2f 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0101000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		slcr@f8000000 {&lt;br /&gt;
			u-boot,dm-pre-reloc;&lt;br /&gt;
			#address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-slcr&amp;quot;, &amp;quot;syscon&amp;quot;, &amp;quot;simple-mfd&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8000000 0x1000&amp;gt;;&lt;br /&gt;
			ranges;&lt;br /&gt;
			linux,phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
			clkc@100 {&lt;br /&gt;
				u-boot,dm-pre-reloc;&lt;br /&gt;
				#clock-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				compatible = &amp;quot;xlnx,ps7-clkc&amp;quot;;&lt;br /&gt;
				fclk-enable = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
				clock-output-names = &amp;quot;armpll&amp;quot;, &amp;quot;ddrpll&amp;quot;, &amp;quot;iopll&amp;quot;, &amp;quot;cpu_6or4x&amp;quot;, &amp;quot;cpu_3or2x&amp;quot;, &amp;quot;cpu_2x&amp;quot;, &amp;quot;cpu_1x&amp;quot;, &amp;quot;ddr2x&amp;quot;, &amp;quot;ddr3x&amp;quot;, &amp;quot;dci&amp;quot;, &amp;quot;lqspi&amp;quot;, &amp;quot;smc&amp;quot;, &amp;quot;pcap&amp;quot;, &amp;quot;gem0&amp;quot;, &amp;quot;gem1&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;, &amp;quot;can0&amp;quot;, &amp;quot;can1&amp;quot;, &amp;quot;sdio0&amp;quot;, &amp;quot;sdio1&amp;quot;, &amp;quot;uart0&amp;quot;, &amp;quot;uart1&amp;quot;, &amp;quot;spi0&amp;quot;, &amp;quot;spi1&amp;quot;, &amp;quot;dma&amp;quot;, &amp;quot;usb0_aper&amp;quot;, &amp;quot;usb1_aper&amp;quot;, &amp;quot;gem0_aper&amp;quot;, &amp;quot;gem1_aper&amp;quot;, &amp;quot;sdio0_aper&amp;quot;, &amp;quot;sdio1_aper&amp;quot;, &amp;quot;spi0_aper&amp;quot;, &amp;quot;spi1_aper&amp;quot;, &amp;quot;can0_aper&amp;quot;, &amp;quot;can1_aper&amp;quot;, &amp;quot;i2c0_aper&amp;quot;, &amp;quot;i2c1_aper&amp;quot;, &amp;quot;uart0_aper&amp;quot;, &amp;quot;uart1_aper&amp;quot;, &amp;quot;gpio_aper&amp;quot;, &amp;quot;lqspi_aper&amp;quot;, &amp;quot;smc_aper&amp;quot;, &amp;quot;swdt&amp;quot;, &amp;quot;dbg_trc&amp;quot;, &amp;quot;dbg_apb&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x100 0x100&amp;gt;;&lt;br /&gt;
				ps-clk-frequency = &amp;lt;0x1fca055&amp;gt;;&lt;br /&gt;
				linux,phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				phandle = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			rstc@200 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,zynq-reset&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x200 0x48&amp;gt;;&lt;br /&gt;
				#reset-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			pinctrl@700 {&lt;br /&gt;
				compatible = &amp;quot;xlnx,pinctrl-zynq&amp;quot;;&lt;br /&gt;
				reg = &amp;lt;0x700 0x200&amp;gt;;&lt;br /&gt;
				syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		dmac@f8003000 {&lt;br /&gt;
			compatible = &amp;quot;arm,pl330&amp;quot;, &amp;quot;arm,primecell&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8003000 0x1000&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupt-names = &amp;quot;abort&amp;quot;, &amp;quot;dma0&amp;quot;, &amp;quot;dma1&amp;quot;, &amp;quot;dma2&amp;quot;, &amp;quot;dma3&amp;quot;, &amp;quot;dma4&amp;quot;, &amp;quot;dma5&amp;quot;, &amp;quot;dma6&amp;quot;, &amp;quot;dma7&amp;quot;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xd 0x4 0x0 0xe 0x4 0x0 0xf 0x4 0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x28 0x4 0x0 0x29 0x4 0x0 0x2a 0x4 0x0 0x2b 0x4&amp;gt;;&lt;br /&gt;
			#dma-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
			#dma-channels = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
			#dma-requests = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1b&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;apb_pclk&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		devcfg@f8007000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-devcfg-1.0&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x8 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8007000 0x100&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0xc 0x1 0xf 0x1 0x10 0x1 0x11 0x1 0x12&amp;gt;;&lt;br /&gt;
			clock-names = &amp;quot;ref_clk&amp;quot;, &amp;quot;fclk0&amp;quot;, &amp;quot;fclk1&amp;quot;, &amp;quot;fclk2&amp;quot;, &amp;quot;fclk3&amp;quot;;&lt;br /&gt;
			syscon = &amp;lt;0x6&amp;gt;;&lt;br /&gt;
			linux,phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
			phandle = &amp;lt;0x3&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		efuse@f800d000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-efuse&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf800d000 0x20&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00200 {&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-global-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00200 0x20&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xb 0x301&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8001000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0xa 0x4 0x0 0xb 0x4 0x0 0xc 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8001000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8002000 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x25 0x4 0x0 0x26 0x4 0x0 0x27 0x4&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,ttc&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x6&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8002000 0x1000&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		timer@f8f00600 {&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x1 0xd 0x301&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;arm,cortex-a9-twd-timer&amp;quot;;&lt;br /&gt;
			reg = &amp;lt;0xf8f00600 0x20&amp;gt;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x4&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0002000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1c&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x15 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		usb@e0003000 {&lt;br /&gt;
			compatible = &amp;quot;xlnx,zynq-usb-2.20a&amp;quot;, &amp;quot;chipidea,usb2&amp;quot;;&lt;br /&gt;
			status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
			clocks = &amp;lt;0x1 0x1d&amp;gt;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x2c 0x4&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xe0003000 0x1000&amp;gt;;&lt;br /&gt;
			phy_type = &amp;quot;ulpi&amp;quot;;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		watchdog@f8005000 {&lt;br /&gt;
			clocks = &amp;lt;0x1 0x2d&amp;gt;;&lt;br /&gt;
			compatible = &amp;quot;cdns,wdt-r1p2&amp;quot;;&lt;br /&gt;
			interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
			interrupts = &amp;lt;0x0 0x9 0x1&amp;gt;;&lt;br /&gt;
			reg = &amp;lt;0xf8005000 0x1000&amp;gt;;&lt;br /&gt;
			timeout-sec = &amp;lt;0xa&amp;gt;;&lt;br /&gt;
		};&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	chosen {&lt;br /&gt;
		bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk&amp;quot;;&lt;br /&gt;
		stdout-path = &amp;quot;serial0:115200n8&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	aliases {&lt;br /&gt;
		ethernet0 = &amp;quot;/amba/ethernet@e000c000&amp;quot;;&lt;br /&gt;
		serial0 = &amp;quot;/amba/serial@e0000000&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	memory {&lt;br /&gt;
		device_type = &amp;quot;memory&amp;quot;;&lt;br /&gt;
		reg = &amp;lt;0x0 0x10000000&amp;gt;;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
=== Single On-board eth ===&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
&lt;br /&gt;
'''Работает гигабит через type-c! Работает hot plug. Успех.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dual eth ===&lt;br /&gt;
&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Dual-phys-on-MDIO-EMIO/td-p/737716 интересная статья о дуал eth]&lt;br /&gt;
&lt;br /&gt;
Попытка поднять два физика. '''Пока не работает'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 00];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@0 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;0&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x8&amp;gt;; &lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0xa&amp;gt;; &lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;; &lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    local-mac-address = [00 0a 35 00 00 01];&lt;br /&gt;
    enet-reset = &amp;lt;&amp;amp;gpio0 47 0&amp;gt;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oryx ===&lt;br /&gt;
&lt;br /&gt;
Итоговый system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Меняем номера uart, чтобы системным был ttyPS1, а пользовательским ttyPS0&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
        serial0 = &amp;amp;uart0;&lt;br /&gt;
        serial1 = &amp;amp;uart1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS1,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
            stdout-path = &amp;quot;serial1:115200n8&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
            compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
            interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
            interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart0{&lt;br /&gt;
    port-number = &amp;lt;0&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;uart1{&lt;br /&gt;
    port-number = &amp;lt;1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В Vivado включен eth0(с mdio) и выключен eth1.&lt;br /&gt;
Pullup пока что все включены&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Xilinx/u-boot-xlnx/blob/master/doc/device-tree-bindings/net/micrel-ksz90x1.txt статья в помощь]&lt;br /&gt;
&lt;br /&gt;
'''Работает'''&lt;br /&gt;
&lt;br /&gt;
На новых платах(с отпаянными линиями линиями eth):&lt;br /&gt;
* на полноценных проводах с ходу&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
На старых платах:&lt;br /&gt;
&lt;br /&gt;
* на полноценных проводах только если выставить 100 в ethtool&lt;br /&gt;
* на обкусанных проводах только если выставить 10 в ethtool&lt;br /&gt;
&lt;br /&gt;
Везде работает так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!&lt;br /&gt;
&lt;br /&gt;
Можно в custom_itit.sh прописать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifdown eth0&lt;br /&gt;
ethtool -s eth0 speed 10 duplex full autoneg on&lt;br /&gt;
ifup eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
            device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
            rxc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            rxdv-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            txc-skew-ps = &amp;lt;1800&amp;gt;;&lt;br /&gt;
            txen-skew-ps = &amp;lt;0&amp;gt;;&lt;br /&gt;
            reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В принципе, работает сеть на новой плате с нормальным кабелем без модификации devicetree. Остальные комбинации плат-кабелей надо проверять&lt;br /&gt;
&lt;br /&gt;
== i2c ==&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem Packages -&amp;gt;&lt;br /&gt;
     base -&amp;gt;&lt;br /&gt;
          i2c-tools -&amp;gt;&lt;br /&gt;
               [*] i2c-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для поиска устройств можно написать&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2cdetect -y -r 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842160/Cadence+I2C+Driver Статья] по i2c и RTC&lt;br /&gt;
&lt;br /&gt;
== QSPI Flash ==&lt;br /&gt;
&lt;br /&gt;
для работы по флешь памяти как в ките (S25FL128S) - оставляем в дев.три родные compatible = &amp;quot;n25q512a&amp;quot;,&amp;quot;micron,m25p80&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== SWDT System Watchdog Timer==&lt;br /&gt;
&lt;br /&gt;
* Модифицируем Uenv для настройки wawtchdog через uboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Создаем скрипт для сброса watchdog:&lt;br /&gt;
&lt;br /&gt;
swdt_rst.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
watch -n 5 'devmem 0xf8005008 32 0x1999' &amp;amp;&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Добавляем вызов скрипта в автозагрузку&lt;br /&gt;
&lt;br /&gt;
PS Посмотреть можно в проекте bin/Clonicus, коммит ffc437e435d3b5c207bb1186a9561fd06a46d89f&lt;br /&gt;
&lt;br /&gt;
== RTC ==&lt;br /&gt;
&lt;br /&gt;
* Включаем в ядро подходящий драйвер&lt;br /&gt;
&lt;br /&gt;
* Модифицируем device-tree&lt;br /&gt;
&lt;br /&gt;
Вставляем в девайс три:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    i2c0: i2c@e0004000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
        rtc@51 {&lt;br /&gt;
                compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
                reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
    i2c1: i2c@e0005000 {&lt;br /&gt;
        clock-frequency = &amp;lt;0xC350&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет выглядеть так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i2c@e0004000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x26&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x19 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0004000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    rtc@51 {&lt;br /&gt;
        compatible = &amp;quot;nxp,pcf85363&amp;quot;;&lt;br /&gt;
        reg = &amp;lt;0x51&amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
i2c@e0005000 {&lt;br /&gt;
    compatible = &amp;quot;cdns,i2c-r1p10&amp;quot;;&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    clocks = &amp;lt;0x1 0x27&amp;gt;;&lt;br /&gt;
    interrupt-parent = &amp;lt;0x4&amp;gt;;&lt;br /&gt;
    interrupts = &amp;lt;0x0 0x30 0x4&amp;gt;;&lt;br /&gt;
    reg = &amp;lt;0xe0005000 0x1000&amp;gt;;&lt;br /&gt;
    #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
    #size-cells = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
    clock-frequency = &amp;lt;0xc350&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если готового драйвера нет:&lt;br /&gt;
&lt;br /&gt;
UG1144 pg.54&lt;br /&gt;
&lt;br /&gt;
Создаем новый модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-create -t modules --name &amp;lt;name_module&amp;gt; --enable&lt;br /&gt;
petalinux-create -t modules --name rtc-pcf85363 --enable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим исходный код в project-spec/meta-user/recipes-modules/rtc-pcf85363/files&lt;br /&gt;
&lt;br /&gt;
Исправленный драйвер лежит в git Clonicus\linux\&lt;br /&gt;
&lt;br /&gt;
Для удаления модуля:&lt;br /&gt;
&lt;br /&gt;
* удаляем папку из project-spec/meta-user/recipes-modules&lt;br /&gt;
&lt;br /&gt;
* В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку&lt;br /&gt;
&lt;br /&gt;
* переоткрыть petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Пробуем собрать модуль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c &amp;lt;name_module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И перепаковываем BOOT.bin&lt;br /&gt;
&lt;br /&gt;
Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)&lt;br /&gt;
&lt;br /&gt;
просмотр модулей&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
загрузить драйвер можно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/4.9.0-xilinx-v2017.4/extra/rtc-pcf85363.ko&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe rtc-pcf85363&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''&lt;br /&gt;
&lt;br /&gt;
Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC&lt;br /&gt;
&lt;br /&gt;
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -r -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Синхронизация rtc по системному времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w -f /dev/rtc2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим custom_init.sh для изменения default-rtc на наше устройство&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /dev/rtc&lt;br /&gt;
ln -s /dev/rtc2 /dev/rtc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установка системного времени&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
date --set &amp;quot;2013-7-31 09:30&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись системного времени в RTC&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запись времени RTC в системное время&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hwclock -s&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить время с интеренета&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rdate -s &amp;lt;IP address of time server&amp;gt;&lt;br /&gt;
rdate -s 132.163.96.5 (example)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При перезагрузке &amp;quot;reboot&amp;quot; система автоматически запишет системное время в RTC&lt;br /&gt;
&lt;br /&gt;
== FPGA CONFIG from Uboot ==&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы прошить PL из uboot используем команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
fpga loadb 0 &amp;lt;ddr_file_addr&amp;gt; &amp;lt;file_size&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо скриптами:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit // читаем файл в ddr&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000 // прошиваем PL&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_loadipaddr // вызов самих скриптов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
0x10_0000 - начальный адрес ddr&lt;br /&gt;
&lt;br /&gt;
0x1_400_000 - размер в байтах для 20МБайт - указываем размер битника с запасом. Теоретически может так не работать, но работает&lt;br /&gt;
&lt;br /&gt;
== ETH over TTY==&lt;br /&gt;
&lt;br /&gt;
В ядре включаем: slip, Universal TUN/TAP&lt;br /&gt;
&lt;br /&gt;
В rootfs включаем net-tools&lt;br /&gt;
&lt;br /&gt;
Включаем iptables для перемршрутизации между подсетями и для него:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[*] Networking support  ---&amp;gt;                                          [CONFIG_NET]&lt;br /&gt;
      Networking Options  ---&amp;gt;&lt;br /&gt;
        [*] Network packet filtering framework (Netfilter) ---&amp;gt;       [CONFIG_NETFILTER]&lt;br /&gt;
          [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]&lt;br /&gt;
          Core Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter connection tracking support               [CONFIG_NF_CONNTRACK]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]&lt;br /&gt;
            &amp;lt;*/M&amp;gt; LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]&lt;br /&gt;
          IP: Netfilter Configuration ---&amp;gt;&lt;br /&gt;
            &amp;lt;*/M&amp;gt; IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PC1:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.1/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PC2:&lt;br /&gt;
&lt;br /&gt;
slattach -L -s 115200 -p slip /dev/ttyPS1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ifconfig sl0 192.168.1.2/24 up&lt;br /&gt;
&lt;br /&gt;
route add default gw 192.168.1.1 sl0&lt;br /&gt;
&lt;br /&gt;
== UART_PL ==&lt;br /&gt;
&lt;br /&gt;
Включаем в настройках ядра поддержку uart_lite, выставляем правильное максимальное число уартов&lt;br /&gt;
&lt;br /&gt;
Модифицируем system-user.dtsi&lt;br /&gt;
&lt;br /&gt;
Обращаем внимание на нумерацию serial, axi_uartlite, она должна не повторяться. То же самое с interrupts &lt;br /&gt;
Указываем верный физический адрес на шине и диапазон адресов в &amp;lt;reg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {&lt;br /&gt;
            serial2 = &amp;amp;axi_uartlite_0;&lt;br /&gt;
            serial3 = &amp;amp;axi_uartlite_1;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
/ {&lt;br /&gt;
    amba_pl {&lt;br /&gt;
        #address-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
        compatible = &amp;quot;simple-bus&amp;quot;;&lt;br /&gt;
        ranges;&lt;br /&gt;
        &lt;br /&gt;
        axi_uartlite_0: serial@80000008 {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 30 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;3&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x80000008 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
        axi_uartlite_1: serial@8000001C {&lt;br /&gt;
                clock-names = &amp;quot;ref_clk&amp;quot;;&lt;br /&gt;
                clocks = &amp;lt;&amp;amp;clkc 0&amp;gt;;&lt;br /&gt;
                compatible = &amp;quot;xlnx,xps-uartlite-1.00.a&amp;quot;;&lt;br /&gt;
                current-speed = &amp;lt;115200&amp;gt;;&lt;br /&gt;
                device_type = &amp;quot;serial&amp;quot;;&lt;br /&gt;
                interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                interrupts = &amp;lt;0 31 1&amp;gt;;&lt;br /&gt;
                port-number = &amp;lt;4&amp;gt;;&lt;br /&gt;
                reg = &amp;lt;0x8000001C 0x10&amp;gt;;&lt;br /&gt;
                xlnx,baudrate = &amp;lt;0x1c200&amp;gt;;&lt;br /&gt;
                xlnx,data-bits = &amp;lt;0x8&amp;gt;;&lt;br /&gt;
                xlnx,odd-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
                xlnx,s-axi-aclk-freq-hz-d = &amp;quot;100.0&amp;quot;;&lt;br /&gt;
                xlnx,use-parity = &amp;lt;0x0&amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ПЛИС не прошита - будет кернел паник&lt;br /&gt;
&lt;br /&gt;
== IRQ ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки irq добавляем в device-tree&lt;br /&gt;
&lt;br /&gt;
'''Важно - мы перетираем bootargs!'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
            bootargs = &amp;quot;console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amba {&lt;br /&gt;
    hififo: hififo@40000000 {&lt;br /&gt;
                    compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
                    interrupt-parent = &amp;lt;&amp;amp;intc&amp;gt;;&lt;br /&gt;
                    interrupts = &amp;lt;0 29 1&amp;gt;;&lt;br /&gt;
                    reg = &amp;lt;0x40000000 0x1000 0x18000000 0x8000000&amp;gt;;&lt;br /&gt;
            };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
&lt;br /&gt;
Запустил на Z706&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+Linux+USB+Device+Driver во-первых]&lt;br /&gt;
[http://zedboard.org/content/using-petalinux-configure-zedboard%EF%BC%8C-usb-otg-can-not-work во-вторых]&lt;br /&gt;
[https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2016-3-zynq-7010-USB-not-working/td-p/737696 в-третьих]&lt;br /&gt;
&lt;br /&gt;
В дефолтных настройках ядра petalinux_2018.1 все было включено&lt;br /&gt;
&lt;br /&gt;
включаем ресет на MIO7 pullup disabled&lt;br /&gt;
&lt;br /&gt;
все ноги интерфейса ulpi pullup disabled&lt;br /&gt;
&lt;br /&gt;
Содержимое system-user.dtsi&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/include/ &amp;quot;system-conf.dtsi&amp;quot;&lt;br /&gt;
	/{&lt;br /&gt;
&lt;br /&gt;
    usb_phy0:phy0 {&lt;br /&gt;
&lt;br /&gt;
        compatible=&amp;quot;ulpi-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        #phy-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       reg = &amp;lt;0xe0002000 0x1000&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       view-port=&amp;lt;0x170&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
       drv-vbus;&lt;br /&gt;
&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;amp;usb0 {&lt;br /&gt;
&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        dr_mode = &amp;quot;host&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        usb-phy = &amp;lt;&amp;amp;usb_phy0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
} ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB-ETHERNET ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     USB support -&amp;gt;&lt;br /&gt;
          [*] USB Modem (CDC ACM)&lt;br /&gt;
          USB Gadget Support -&amp;gt;&lt;br /&gt;
               [*] Ethernet Control Model (all)&lt;br /&gt;
               [*] RNDIS&lt;br /&gt;
               [*] Ethernet Emulation Model&lt;br /&gt;
               [*] CDC Composite Device (Ethernet and ACM)&lt;br /&gt;
               [*] USB Gadget Drivers (Ethernet gadget...)&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          USB Network Adapters -&amp;gt;&lt;br /&gt;
               [*] Realtek RTL8152/RTL8153&lt;br /&gt;
               [*] Multi-purpose USB Networking Framework&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi Dongle ==&lt;br /&gt;
&lt;br /&gt;
[https://forum.trenz-electronic.de/index.php?topic=747.0 раз]&lt;br /&gt;
[https://github.com/jinchenglee/zybo_linux_setup_doc два]&lt;br /&gt;
[http://billauer.co.il/blog/2014/06/linux-realtek-hostapd/ три]&lt;br /&gt;
&lt;br /&gt;
Творим:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Networking support -&amp;gt;&lt;br /&gt;
     Wireless -&amp;gt;&lt;br /&gt;
          [*] cfg80211&lt;br /&gt;
          [*] Generic IEEE 802.11 ... (mac80211)&lt;br /&gt;
Device Drivers -&amp;gt;&lt;br /&gt;
     Network device support -&amp;gt;&lt;br /&gt;
          Wireless LAN -&amp;gt;&lt;br /&gt;
               Realtek rtlwifi family of devices -&amp;gt;&lt;br /&gt;
                    [*] Realtek ..../RTL8188CE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8188EE Wireless Network Adapter ???&lt;br /&gt;
                    [*] Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter&lt;br /&gt;
     Staging drivers -&amp;gt;&lt;br /&gt;
          [*] Realtek RTL8188EU wireless LAN MIC driver&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rootfs&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Filesystem packages -&amp;gt;&lt;br /&gt;
     network -&amp;gt;&lt;br /&gt;
          wpa-supplicant -&amp;gt;&lt;br /&gt;
               [*] wpa-supplicant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lwfinger/rtl8188eu/blob/master/rtl8188eufw.bin качаем файл]&lt;br /&gt;
&lt;br /&gt;
Модификаци инит-скрипта&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /run/media/mmcblk0p1/wpa_supplicant.conf /etc/&lt;br /&gt;
&lt;br /&gt;
mkdir /lib/firmware/&lt;br /&gt;
mkdir /lib/firmware/rtlwifi/&lt;br /&gt;
cp /run/media/mmcblk0p1/rtl8188eufw.bin /lib/firmware/rtlwifi/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi ESP ==&lt;br /&gt;
&lt;br /&gt;
[http://www.wiki.xilinx.com/Zynq+SDIO+Wifi Xilinx SDIP WiFi]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/sdio-wifi-driver-ar6103-problem Zedboard раз]&lt;br /&gt;
&lt;br /&gt;
[https://stackoverflow.com/questions/32129689/how-to-bind-sdio1-with-wi-fi-linux два]&lt;br /&gt;
&lt;br /&gt;
[http://picozed.org/content/steps-get-wlink8-working-using-petalinux-picozed picozed три]&lt;br /&gt;
&lt;br /&gt;
[http://zedboard.org/content/adding-wi-fi-and-bluetooth-connectivity-zedboard-using-murata-1dx-pmod zedboard четыре]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Оживление 2-го ядра ==&lt;br /&gt;
&lt;br /&gt;
* Находим /home/ivan/clonicus_1.2.3/build/tmp/work-shared/plnx_arm/kernel-source/arch/arm/mach-zynq/efuse.c&lt;br /&gt;
* В функции zynq_efuse_cpu_state делаем сразу ретурн тру&lt;br /&gt;
* Че-нибудь меняем в настройках ядра для пересборки&lt;br /&gt;
* Выполняем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-build -c kernel -x compile -f&lt;br /&gt;
petalinux-build -c kernel -x deploy -f&lt;br /&gt;
petalinux-build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Забираем image.ub&lt;br /&gt;
&lt;br /&gt;
'''ИЛИ'''&lt;br /&gt;
&lt;br /&gt;
Правим device-tree, заменяем адрес efuse на 0xf800cff0&lt;br /&gt;
&lt;br /&gt;
== webserver == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/emlid/ReachView Репозиторий emlid ReachView] (bnd на py/Flask, fnd на html/Ajax/js/Bootstrap)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Backend:'''&lt;br /&gt;
&lt;br /&gt;
* [http://svenand.blogdrives.com/archive/195.html#.XPTYt4gzaUk Источник по busybox-httpd]&lt;br /&gt;
&lt;br /&gt;
* [https://www.afternerd.com/blog/python-http-server/ Гайд по python server]&lt;br /&gt;
&lt;br /&gt;
* [https://ru.wikibooks.org/wiki/Flask Викиучебник по Flask]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/193242/ ХаброГайд по python/Flask]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frontend:'''&lt;br /&gt;
&lt;br /&gt;
* [https://unminify.com/ unminify CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://getbootstrap.com/docs/4.3/getting-started/introduction/ Bootstrap EN getting started]&lt;br /&gt;
&lt;br /&gt;
* [https://bootstrap-4.ru/ Bootstrap RU]&lt;br /&gt;
&lt;br /&gt;
* [http://htmlbook.ru/samhtml/tekst/spetssimvoly Справочник по операторам и тегам HTML/CSS]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/howto/default.asp Сборник шаблонов CSS W3schools]&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3schools.com/w3css/w3css_tabulators.asp Анимированный сайдбар/табы]&lt;br /&gt;
&lt;br /&gt;
* [https://css-tricks.com/ CSS Tricks]&lt;br /&gt;
&lt;br /&gt;
* [https://www.cssmatic.com/ Онлайн тени/границы/градиент блоков]&lt;br /&gt;
&lt;br /&gt;
* [https://internetingishard.com/html-and-css/semantic-html/ Semantic HTML grid layout]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/202408/ Хаброгайд(ч1) по верстке]&lt;br /&gt;
&lt;br /&gt;
* [https://habr.com/ru/post/211032/ ХаброГайд(ч2) по Bootstrap]&lt;br /&gt;
&lt;br /&gt;
* [https://fontawesome.com/icons?d=gallery Fontawesome ICONS open lib]&lt;br /&gt;
&lt;br /&gt;
:* [https://htmlacademy.ru/courses/43/run/1 Нормальный онлайн HTML/CSS/JS editor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== busybox httpd ===&lt;br /&gt;
В petalinux многие пакеты скукожены до их минимальных вариантов и встроены в общий пакет busybox. &lt;br /&gt;
В busybox есть также и вебсервер busybox-httpd.&lt;br /&gt;
Для использования нужно на этапе настройки файловой системы его включить:&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
Конфиг: &lt;br /&gt;
 base -&amp;gt;&lt;br /&gt;
     busybox -&amp;gt;&lt;br /&gt;
          [*] busybox&lt;br /&gt;
          [*] busybox-httpd&lt;br /&gt;
          [ ] busybox-hwclock&lt;br /&gt;
          [*] busybox-inetd&lt;br /&gt;
          [*] busybox-mdev&lt;br /&gt;
          [ ] busybox-syslog &lt;br /&gt;
          [*] busybox-udhcpc &lt;br /&gt;
          [ ] busybox-udhcpd &lt;br /&gt;
&lt;br /&gt;
Сам httpd будет в '''/usr/sbin'''.&lt;br /&gt;
Рабочая папка по умолчанию в '''/srv/www/'''. Если в нее кидать файлы, то именно из нее будет отображаться контент в браузере. Папку можно изменить, перезапустив httpd с ключом -h &amp;lt;workdir&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Порт по умолчанию 80. Работает, как демон в /etc/init.d/, вкл-выкл оттуда же.&lt;br /&gt;
&lt;br /&gt;
Если положить в /srv/www/ файл index.html с неким кодом, то в браузере отобразится вебморда. Картинки работают по ссылкам.&lt;br /&gt;
&lt;br /&gt;
'''index.html'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;clonicus'112 webserver&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Hello, World!&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;h4&amp;gt;Web server is now up!&amp;lt;/h4&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;https://i.redd.it/oagz5eobkkt11.jpg&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;http://www.srns.ru&amp;quot;&amp;gt;For more information see SRNS.ru&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== python в petalinux ===&lt;br /&gt;
В petalinux 2017.4 есть 2 питона - 2.7 и 3.5.&lt;br /&gt;
&lt;br /&gt;
 $ petalinux-config -c rootfs&lt;br /&gt;
&lt;br /&gt;
'''python2.7'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     devel-&amp;gt;&lt;br /&gt;
         python-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''python3.5'''&lt;br /&gt;
  Filesystem Packages-&amp;gt;&lt;br /&gt;
     misc-&amp;gt;&lt;br /&gt;
         python3-*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Модуль runpy.py для запуска команд вида 'python -m &amp;lt;module&amp;gt;' находится в python -&amp;gt; python-misc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimpleHTTPServer.py ===&lt;br /&gt;
Для первого теста поднимем встроенный в python2.7 минисервер SimpleHTTPServer.py в /usr/lib/python2.7. &lt;br /&gt;
&lt;br /&gt;
Для его запуска напишем скрипт&lt;br /&gt;
&lt;br /&gt;
'''webserver.py''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import SimpleHTTPServer &lt;br /&gt;
import SocketServer &lt;br /&gt;
 &lt;br /&gt;
PORT = 80 &lt;br /&gt;
 &lt;br /&gt;
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler &lt;br /&gt;
 &lt;br /&gt;
httpd = SocketServer.TCPServer((&amp;quot;&amp;quot;, PORT), Handler) &lt;br /&gt;
 &lt;br /&gt;
print &amp;quot;serving at port&amp;quot;, PORT &lt;br /&gt;
httpd.serve_forever()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $ python webserver.py &lt;br /&gt;
&lt;br /&gt;
При наличии в папке со скриптом файла index.html сервер поднимется автоматически.&lt;br /&gt;
&lt;br /&gt;
=== Добавление слоев в сборку ===&lt;br /&gt;
&lt;br /&gt;
[https://www.srns.ru/wiki/Blog:DneprovD/18.07.2019_Yocto_layers Переехало в статью]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:HOWTO]]&lt;br /&gt;
[[Категория:Oryx]]&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2018-05-16 10:06:30 +0300 | Lipa }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-28T14:06:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* U-boot patch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&lt;br /&gt;
# в пункте для DTB на пробу поставил&lt;br /&gt;
(X) from boot image&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью. Стирать можно маленькими разделами или всю флешку разом&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000   &lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку. Переменная filesize заполняется сама.&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x0 ${filesize}   #(DDR_address  offset  image_size) &lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
&lt;br /&gt;
(!) При внесении изменений в юбут не забываем добавить коммент к версии в&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ petalinux-config -c u-boot&lt;br /&gt;
&lt;br /&gt;
    General setup -&amp;gt;&lt;br /&gt;
      Local version - append to U-Boot release&lt;br /&gt;
      дописываем отличия версии, например, qspi&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:46:26Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Разметка QSPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&lt;br /&gt;
# в пункте для DTB на пробу поставил&lt;br /&gt;
(X) from boot image&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью. Стирать можно маленькими разделами или всю флешку разом&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000   &lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку. Переменная filesize заполняется сама.&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x0 ${filesize}   #(DDR_address  offset  image_size) &lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:44:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Прошивка QSPI флешки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью. Стирать можно маленькими разделами или всю флешку разом&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000   &lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку. Переменная filesize заполняется сама.&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x0 ${filesize}   #(DDR_address  offset  image_size) &lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:43:38Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Прошивка QSPI флешки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI флешки ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью. Стирать можно маленькими разделами или всю флешку разом&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000   &lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку. Переменная filesize заполняется сама.&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x0 ${filesize}   #(DDR_address  offset  image_size) &lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x00100000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:42:30Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Прошивка QSPI флешки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI флешки ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000    #(стирать можно маленькими разделами или всю флешку разом)&lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x0010000 0x0 ${filesize}   #(DDR_address  offset  image_size) (filesize заполняется сама)&lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x0010000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:42:14Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Прошивка QSPI флешки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI флешки ====&lt;br /&gt;
&lt;br /&gt;
QSPI флешка прошивается из U-boot через sf probe, sf write.&lt;br /&gt;
Это же делает SDK, когда прошивается флешка через JTAG. SDK собирает свой юбут внутри себя, и им прошивает. Недостатком было то, что юбут из SDK не пропатчен на поддержку новой флешки, и он валится на обнаружении. Возможно, его можно пропатчить внутри SDK, я не пробовал.&lt;br /&gt;
&lt;br /&gt;
Как прошивал:&lt;br /&gt;
# Собрал проект через petalinux-build.&lt;br /&gt;
# Положил все нужные файлы на sd-карту.&lt;br /&gt;
# Загрузился с sd-карты, зашел в u-boot.&lt;br /&gt;
# Из консоли U-boot выполнил:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# подключаемся&lt;br /&gt;
&amp;gt; sf probe 0&lt;br /&gt;
&lt;br /&gt;
# стираем области перед записью&lt;br /&gt;
&amp;gt; sf erase 0 0x1AC0000    (стирать можно маленькими разделами или всю флешку разом)&lt;br /&gt;
&lt;br /&gt;
# загружаем файлы в DDR и пишем их на флешку&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 BOOT.bin&lt;br /&gt;
&amp;gt; sf write 0x0010000 0x0 ${filesize}   (DDR_address  offset  image_size) (filesize заполняется сама)&lt;br /&gt;
&lt;br /&gt;
&amp;gt; fatload mmc 0 0x00100000 image.ub&lt;br /&gt;
&amp;gt; sf write 0x0010000 0x120000 ${filesize}&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:32:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* QSPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI флешки ====&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:31:54Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Разметка QSPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого U-boot будет искать указанные файлы по указанным адресам на QSPI флешке при включенном режиме загрузки с QSPI флешки. Также это отразится на генерируемом файле юбута Petalinux/qspi/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h. Этот файл обновляется при вызове petalinux-config -c u-boot (вроде).&lt;br /&gt;
&lt;br /&gt;
==== Прошивка QSPI флешки ====&lt;br /&gt;
&lt;br /&gt;
==== QSPI ====&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:29:06Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Разметка QSPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Flash Settings'''&lt;br /&gt;
&lt;br /&gt;
Там задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
2) Там же в petalinux-config -&amp;gt; Subsystem AUTO Hardware Settings -&amp;gt; '''Advanced bootable images storage Settings''' заходим в каждый пункт и выставляем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
image storage media&lt;br /&gt;
(X) primary flash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== QSPI ====&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:25:09Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* Разметка QSPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в '''petalinux-config''' -&amp;gt; '''Subsystem AUTO Hardware Settings'''&lt;br /&gt;
&lt;br /&gt;
Там в '''Flash Settings''' задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|500px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* QSPI Flash */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
==== Разметка QSPI ====&lt;br /&gt;
&lt;br /&gt;
Делал так:&lt;br /&gt;
&lt;br /&gt;
1) Идем в '''petalinux-config''' -&amp;gt; '''Subsystem AUTO Hardware Settings'''&lt;br /&gt;
&lt;br /&gt;
Там в '''Flash Settings''' задаем разделы флешки:&lt;br /&gt;
[[Файл:Qspi-partitions-KibiBytes.PNG|600px|right|thumb]]&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
     Primary Flash (ps7_qspi_0)  ---&amp;gt;&lt;br /&gt;
[ ] Advanced Flash Auto Configuration&lt;br /&gt;
		*** partition 0 *** &lt;br /&gt;
	(boot) name             &lt;br /&gt;
	(0x100000) size         &lt;br /&gt;
		*** partition 1 *** &lt;br /&gt;
	(bootenv) name          &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 2 *** &lt;br /&gt;
	(kernel) name           &lt;br /&gt;
	(0x1400000) size        &lt;br /&gt;
		*** partition 3 *** &lt;br /&gt;
	(dtb) name              &lt;br /&gt;
	(0x20000) size          &lt;br /&gt;
		*** partition 4 *** &lt;br /&gt;
	(rootfs) name           &lt;br /&gt;
	(0xA00000) size         &lt;br /&gt;
		*** partition 5 *** &lt;br /&gt;
	(bitstream) name        &lt;br /&gt;
	(0x600000) size         &lt;br /&gt;
		*** partition 6 *** &lt;br /&gt;
	(spare) name            &lt;br /&gt;
	(0x1AC0000) size        &lt;br /&gt;
		*** partition 7 *** &lt;br /&gt;
	()  name&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для наглядности накидал [https://openipc.org/tools/firmware-partitions-calculation?locale=ru на сайтике картинку]&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Qspi-partitions-KibiBytes.PNG</id>
		<title>Файл:Qspi-partitions-KibiBytes.PNG</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Qspi-partitions-KibiBytes.PNG"/>
				<updated>2024-08-15T14:11:18Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-08-15T14:05:03Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* U-boot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Env to binary ====&lt;br /&gt;
В исходниках U-boot давно лежит утилита mkenvimage.c.&lt;br /&gt;
Пока что так и не попользовался ей.&lt;br /&gt;
https://bootlin.com/blog/mkenvimage-uboot-binary-env-generator/&lt;br /&gt;
&lt;br /&gt;
Код Андрея по переводу текстового uEnv.txt в бинарный:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import zlib&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    sys.exit('args error!')&lt;br /&gt;
&lt;br /&gt;
inputFilename = str(sys.argv[1])&lt;br /&gt;
outputFilename = str(sys.argv[2])&lt;br /&gt;
write_size = int(sys.argv[3])&lt;br /&gt;
&lt;br /&gt;
with open(inputFilename, &amp;quot;r&amp;quot;) as fid:&lt;br /&gt;
    lines = [line for line in fid]&lt;br /&gt;
&lt;br /&gt;
lines_zero = (''.join(lines)).replace('\n', '\0')&lt;br /&gt;
lines_zero = lines_zero + (write_size - len(lines_zero)) * '\0'&lt;br /&gt;
fbytes = lines_zero.encode()&lt;br /&gt;
fid.close()&lt;br /&gt;
&lt;br /&gt;
crc = (zlib.crc32(fbytes)).to_bytes(4, byteorder='little')&lt;br /&gt;
&lt;br /&gt;
file_contents = crc + fbytes&lt;br /&gt;
&lt;br /&gt;
fid = open(outputFilename,&amp;quot;wb&amp;quot;)&lt;br /&gt;
fid.write(file_contents)&lt;br /&gt;
fid.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод. &lt;br /&gt;
То же можно сделать где-то в petalinux конфигах / юбут конфигах, не залезая в исходники.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	<entry>
		<id>https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0</id>
		<title>Blog:DneprovD/17.06.2024 Clonicus 2.0</title>
		<link rel="alternate" type="text/html" href="https://buyordew.srns.ru/wiki/Blog:DneprovD/17.06.2024_Clonicus_2.0"/>
				<updated>2024-06-26T07:49:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dneprov D: /* QSPI Flash */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;summary hidden=true&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:IMG_20240621_134919.jpg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/summary&amp;gt;&lt;br /&gt;
{{Форма2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Косяки ==&lt;br /&gt;
=== DDR ===&lt;br /&gt;
На плате установлен 1 чип DDR3L MT41K128M16-107 на 256 МБ. В проекте вивадо достаточно было выбрать похожее устройство, тайминги были выставлены автоматически. Задержки по дорогам берутся из альтиума. &lt;br /&gt;
&lt;br /&gt;
Память сначала отказывалась работать, повисала на калибровке WL. Потыкались осцилографом - проблема была в некачественной пайке.&lt;br /&gt;
&lt;br /&gt;
[https://static.chipdip.ru/lib/911/DOC012911114.pdf Даташит на DDR]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=W3Jt_y6PHjA&amp;amp;ab_channel=Phil%E2%80%99sLab Видео, какие тайминги откуда брать]&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/en-US/ds191-XC7Z030-XC7Z045-data-sheet#page=17 Таблица20: максимальная скорость DDR в цинках]&lt;br /&gt;
&lt;br /&gt;
=== SD Card ===&lt;br /&gt;
Были проблемы с подмонтированием разделов и ошибки чтения секторов. Проблема схемотехническая в обвязке и непонятном левелшифтере PI4ULS5V106.&lt;br /&gt;
&lt;br /&gt;
=== Nomada ===&lt;br /&gt;
Припаян не тот кварц (выбран не с тем номиналом напряжения). Подтянут к нужному номиналу резистором.&lt;br /&gt;
&lt;br /&gt;
== Заметки ==&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
(!) Для корректной работы желательно пересобирать u-boot при изменении девайстри, и boot.bin командой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
На плате есть 2 физика: &lt;br /&gt;
* К GEM0 подключен Realtek RTL8211E-VL-CG. &lt;br /&gt;
* К GEM1 подключен Texas Instruments DP83867.&lt;br /&gt;
* Шина MDIO общая, на пинах 52-53.&lt;br /&gt;
&lt;br /&gt;
В Vivado включал отдельно только Ethernet0, только Ethernet1, оба сразу с MDIO на нулевом. &lt;br /&gt;
&lt;br /&gt;
Каждый физик отдельно видится на мдио независимо от того, к Ethernet0 или Ethernet1 она подключена. В стандалоне тестах в sdk автосогласование проходят оба физика, тест их находит.&lt;br /&gt;
&lt;br /&gt;
U-boot версии 2017.4 видит оба физика на мдио, но драйвер прикручивает только к первому по порядку в девайстри. Два сразу старый U-boot не умеет до версии 2018.1 (гуглится обсуждение).&lt;br /&gt;
&lt;br /&gt;
При работе с двумя физиками рекомендуют накатить на ядро патч драйвера macb, чтобы он видел два физика. При этом раздел mdio {} в девайстри заработал только при помещении его в общую часть, там где {aliases, chosen}.&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Заметка на хиливики про Common MDIO DT Macb Driver]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips#PetaLinuxYoctoTips-PatchingtheLinuxKernelofaPetaLinuxProject Как патчить ядро]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver Пример девайстри с вики для двух PHY]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/69132?language=en_US Оффициальный AR xilinx для dual PHY с патчами]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006hpe3DSAQ/dual-ethernet-still-not-working-after-patching-macb-driver-petalinux-20172?language=en_US AR#1]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#2]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHu9HSAS/dual-phys-on-mdioemio?language=en_US AR#3]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00007AMwsGSAT/how-to-fix-zynq7000-dual-ethernet-phy-on-single-mdio-bus-in-xilinxv20191-and-newer?language=en_US AR#4]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/question/0D52E00006iHlW2SAK/zynq-dual-ethernet-question?language=en_US AR#5]&lt;br /&gt;
&lt;br /&gt;
==== Один PHY ====&lt;br /&gt;
Рабочий devicetree для ядра без патча, один PHY (на выбор):&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/* RTL8211E */&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
       &lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        phy0: phy@1 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;            &lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/*TI dp83867 */&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
    mdio {&lt;br /&gt;
        status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
        #address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
        #size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
            status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
	    ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
	    ti,min-output-impedance;&lt;br /&gt;
	    ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Два PHY ====&lt;br /&gt;
Пропатчено ядро для общей mdio. Mdio на Ethernet0 в Vivado, пины 52-53. Первый физик поднимается автоматически. Второй жив, пожнимается через:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
ifconfig eth1 192.168.0.231 netmask 255.255.255.0 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi''':&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
/ {&lt;br /&gt;
    aliases {...}&lt;br /&gt;
&lt;br /&gt;
    chosen {...}&lt;br /&gt;
&lt;br /&gt;
    mdio {		&lt;br /&gt;
	compatible = &amp;quot;cdns,macb-mdio&amp;quot;;&lt;br /&gt;
	reg = &amp;lt;0xe000b000 0x1000&amp;gt;; &lt;br /&gt;
	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	clocks = &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 30&amp;gt;, &amp;lt;&amp;amp;clkc 13&amp;gt;;&lt;br /&gt;
	clock-names = &amp;quot;pclk&amp;quot;, &amp;quot;hclk&amp;quot;, &amp;quot;tx_clk&amp;quot;;&lt;br /&gt;
	#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
	#size-cells = &amp;lt;0&amp;gt;;&lt;br /&gt;
		&lt;br /&gt;
	phy0: phy@1 {&lt;br /&gt;
            compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;1&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
        phy1: phy@12 {&lt;br /&gt;
	    compatible = &amp;quot;ethernet-phy-ieee802.3-c22&amp;quot;;&lt;br /&gt;
	    device_type = &amp;quot;ethernet-phy&amp;quot;;&lt;br /&gt;
	    reg = &amp;lt;12&amp;gt;;&lt;br /&gt;
	    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
            ti,rx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,tx-internal-delay = &amp;lt;0x7&amp;gt;;&lt;br /&gt;
            ti,fifo-depth = &amp;lt;0x01&amp;gt;;&lt;br /&gt;
            ti,min-output-impedance;&lt;br /&gt;
            ti,dp83867-rxctrl-strap-quirk;&lt;br /&gt;
    	};&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem0{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy0&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii-id&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 01];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gem1{&lt;br /&gt;
    status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
    phy-handle = &amp;lt;&amp;amp;phy1&amp;gt;;&lt;br /&gt;
    phy-mode = &amp;quot;rgmii&amp;quot;;&lt;br /&gt;
    local-mac-address = [00 0a 35 00 22 02];&lt;br /&gt;
       &lt;br /&gt;
    xlnx,eth-mode = &amp;lt;0x1&amp;gt;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QSPI Flash ===&lt;br /&gt;
На плате установлена не поддерживаемая (нету) по табличке W25Q512JVEIQ.&lt;br /&gt;
&lt;br /&gt;
Флешка поднялась, причина - отсутствие резистора на QSPI_SCK_MODE4 - была закоротка на землю.&lt;br /&gt;
&lt;br /&gt;
Пропатчил юбут, добавив в файл &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/drivers/mtd/spi/spi_flash_ids.c флешку, и наложив патч:&lt;br /&gt;
&lt;br /&gt;
'''0001-add-spi-support-for-w25q512jv.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
From 17ebfc83d3929446288d1143d33d8fbd156360d0 Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: DneprovD &amp;lt;dneprov_dv@mail.ru&amp;gt;&lt;br /&gt;
Date: Thu, 20 Jun 2024 12:27:45 +0300&lt;br /&gt;
Subject: [PATCH] add spi support for w25q512jv&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 drivers/mtd/spi/spi_flash_ids.c | 1 +&lt;br /&gt;
 1 file changed, 1 insertion(+)&lt;br /&gt;
&lt;br /&gt;
diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
index cb27c88..c3e725a 100644&lt;br /&gt;
--- a/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
+++ b/drivers/mtd/spi/spi_flash_ids.c&lt;br /&gt;
@@ -167,6 +167,7 @@ const struct spi_flash_info spi_flash_ids[] = {&lt;br /&gt;
 	{&amp;quot;w25q32dw&amp;quot;,	   INFO(0xef6016, 0x0,	64 * 1024,    64, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q64dw&amp;quot;,	   INFO(0xef6017, 0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 	{&amp;quot;w25q128fw&amp;quot;,	   INFO(0xef6018, 0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
+	{&amp;quot;w25q512jv&amp;quot;,      INFO(0xef4020, 0x0,  64 * 1024,  1024, RD_FULL | WR_QPP | SECT_4K) },&lt;br /&gt;
 #endif&lt;br /&gt;
 	{},	/* Empty entry to terminate the list */&lt;br /&gt;
 	/*&lt;br /&gt;
-- &lt;br /&gt;
1.9.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h добавил&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#define CONFIG_SPI_FLASH_WINBOND Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/50991?language=en_US Список поддерживаемых Zynq 7000 флешек и гайд что делать с неподдерживаемыми]&lt;br /&gt;
&lt;br /&gt;
[https://support.xilinx.com/s/article/62743?language=en_US Гайд для неподдерживаемых]&lt;br /&gt;
&lt;br /&gt;
[https://srns.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:QSPI_FLASH_support_guide_rev1.0.pdf Гайд по добавлению правок в U-boot]&lt;br /&gt;
&lt;br /&gt;
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842262/Zynq+QSPI+Driver Zynq QSPI Driver на хилипедии]&lt;br /&gt;
&lt;br /&gt;
=== U-boot ===&lt;br /&gt;
==== Env ====&lt;br /&gt;
uEnv.txt - только для sd boot (захардкожено в u-boot-xlnx/include/configs/zynq-common.h).&lt;br /&gt;
&lt;br /&gt;
Вроде бы можно [https://community.intel.com/t5/FPGA-SoC-And-CPLD-Boards-And/Unable-to-read-file-u-boot-scr/td-p/219580 обернуть юбутом (mkImage)] тектовый файл, и зашить в qspi. Не пробовал, вдруг не нужно.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Выравнивание_заголовка = left| Ссылка = left|Заголовок = Код стандартной env из zynq-common.h:}}&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/* Default environment */&lt;br /&gt;
#ifndef CONFIG_EXTRA_ENV_SETTINGS&lt;br /&gt;
#define CONFIG_EXTRA_ENV_SETTINGS	\&lt;br /&gt;
	&amp;quot;ethaddr=00:0a:35:00:01:22\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_image=uImage\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;kernel_load_address=0x2080000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;ramdisk_image=uramdisk.image.gz\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_load_address=0x4000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_image=devicetree.dtb\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_load_address=0x2000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bitstream_image=system.bit.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_image=BOOT.bin\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbit_addr=0x100000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;loadbootenv_addr=0x2000000\0&amp;quot; \&lt;br /&gt;
	&amp;quot;kernel_size=0x500000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;devicetree_size=0x20000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;ramdisk_size=0x5E0000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;boot_size=0xF00000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;fdt_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;initrd_high=0x20000000\0&amp;quot;	\&lt;br /&gt;
	&amp;quot;bootenv=uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;importbootenv=echo Importing environment from SD ...; &amp;quot; \&lt;br /&gt;
		&amp;quot;env import -t ${loadbootenv_addr} $filesize\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0&amp;quot; \&lt;br /&gt;
	&amp;quot;preboot=if test $modeboot = sdboot &amp;amp;&amp;amp; env run sd_uEnvtxt_existence_test; &amp;quot; \&lt;br /&gt;
			&amp;quot;then if env run loadbootenv; &amp;quot; \&lt;br /&gt;
				&amp;quot;then env run importbootenv; &amp;quot; \&lt;br /&gt;
			&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; \0&amp;quot; \&lt;br /&gt;
	&amp;quot;mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;mmcinfo &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 ${loadbit_addr} ${bitstream_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;fpga load 0 ${loadbit_addr} ${filesize}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;norboot=echo Copying Linux from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;qspiboot=echo Copying Linux from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;uenvboot=&amp;quot; \&lt;br /&gt;
		&amp;quot;if run loadbootenv; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Loaded environment from ${bootenv}; &amp;quot; \&lt;br /&gt;
			&amp;quot;run importbootenv; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi; &amp;quot; \&lt;br /&gt;
		&amp;quot;if test -n $uenvcmd; then &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Running uenvcmd ...; &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvcmd; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;sdboot=if mmcinfo; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load mmc 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;usbboot=if usb start; then &amp;quot; \&lt;br /&gt;
			&amp;quot;run uenvboot; &amp;quot; \&lt;br /&gt;
			&amp;quot;echo Copying Linux from USB to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;load usb 0 ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
			&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; &amp;quot; \&lt;br /&gt;
		&amp;quot;fi\0&amp;quot; \&lt;br /&gt;
	&amp;quot;nandboot=echo Copying Linux from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${kernel_load_address} 0x100000 ${kernel_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${devicetree_load_address} 0x600000 ${devicetree_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;echo Copying ramdisk... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read ${ramdisk_load_address} 0x620000 ${ramdisk_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;jtagboot=echo TFTPing Linux to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${kernel_load_address} ${kernel_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${devicetree_load_address} ${devicetree_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot ${ramdisk_load_address} ${ramdisk_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_norboot=echo Copying Image from NOR flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;cp.b 0xE2100000 0x100000 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_nandboot=echo Copying Image from NAND flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;nand read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_qspiboot=echo Copying Image from QSPI flash to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf probe 0 0 0 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;sf read 0x100000 0x0 ${boot_size} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_sdboot=echo Copying Image from SD to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;load mmc 0 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
	&amp;quot;rsa_jtagboot=echo TFTPing Image to RAM... &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;tftpboot 0x100000 ${boot_image} &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;zynqrsa 0x100000 &amp;amp;&amp;amp; &amp;quot; \&lt;br /&gt;
		&amp;quot;bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}\0&amp;quot; \&lt;br /&gt;
		DFU_ALT_INFO&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Иван загружал clonicus.bit юбутом через Uboot.env. Вроде как можно вместо Uboot.env сделать uEnv.txt - на схожесть не проверял.&lt;br /&gt;
&lt;br /&gt;
'''Иванова Uboot.env''' в текстовом редакторе после приведения в читаемый вид:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
&amp;lt;TіQautoload=yes&lt;br /&gt;
boot_dtb=fatload mmc 0 0x9000000 system.dtb&lt;br /&gt;
boot_image=fatload mmc 0 0xA000000 image.ub&lt;br /&gt;
bootcmd=run swdt_set &amp;amp;&amp;amp; run fpga_config &amp;amp;&amp;amp; run boot_image &amp;amp;&amp;amp; run boot_dtb &amp;amp;&amp;amp; bootm 0xA000000 0xA000000 0x9000000&lt;br /&gt;
bootdelay=1&lt;br /&gt;
ethaddr=00:0a:35:00:21:70&lt;br /&gt;
fdtcontroladdr=ffa91b0&lt;br /&gt;
fileaddr=100000&lt;br /&gt;
filesize=5b3f74&lt;br /&gt;
swdt_set=run swdt_ccr &amp;amp;&amp;amp; run swdt_rst &amp;amp;&amp;amp; run swdt_zmr&lt;br /&gt;
swdt_ccr=mw 0xf8005004 0x92063b&lt;br /&gt;
swdt_rst=mw 0xf8005008 0x1999&lt;br /&gt;
swdt_zmr=mw 0xf8005000 0xabc043&lt;br /&gt;
fpga_config=run load_bit &amp;amp;&amp;amp; run pl_load&lt;br /&gt;
ipaddr=192.168.0.110&lt;br /&gt;
kernel_img=image.ub&lt;br /&gt;
load_bit=fatload mmc 0 0x100000 clonicus.bit&lt;br /&gt;
netmask=255.255.255.0&lt;br /&gt;
pl_load=fpga loadb 0 0x100000 0x1400000&lt;br /&gt;
serverip=192.168.0.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== U-boot patch ====&lt;br /&gt;
Попробовал пропатчить u-boot для добавления поддержки qspi флешки, которая не поддерживалась.&lt;br /&gt;
&lt;br /&gt;
[https://docs.amd.com/v/u/2019.1-English/ug1144-petalinux-tools-reference-guide#page=107 Как сделать внешние исходники u-boot в проекте]&lt;br /&gt;
&lt;br /&gt;
[https://devconnected.com/how-to-create-and-apply-git-patch-files/ Как делать git patch]&lt;br /&gt;
&lt;br /&gt;
Методология создания патча для U-boot:&lt;br /&gt;
* Куда-то рядом или внутрь проекта в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/ скачивается [https://github.com/Xilinx/u-boot-xlnx/tree/xilinx-v2017.4 гит юбута].&lt;br /&gt;
* Переходим на ветку xilinx-v2017.4&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Создаем новую ветку mytest&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git checkout -b mytest&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Находим в исходниках файлик(и), в который хотим внести изменения. Вносим изменения. Коммитим в ветку mytest.&lt;br /&gt;
* Делаем файл патча относительно ветки xilinx-v2017.4, находясь в ветке mytest. В той папке, в которой вызываем команду, появится файл '''0001-&amp;lt;commit-mesg&amp;gt;.patch'''&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
git format-patch xilinx-v2017.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Копируем файл 0001-&amp;lt;commit-mesg&amp;gt;.patch в &amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/files/&lt;br /&gt;
* Добавляем в файл '''&amp;lt;projectname&amp;gt;/project-spec/meta-user/recipes-bsp/u-boot/u-boot-xlnx_%.bbappend''' строку с именем патча:&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
SRC_URI_append = &amp;quot; file://0001-add-spi-support-for-w25q512jv.patch&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Собираем&lt;br /&gt;
&amp;lt;source lang = bash&amp;gt;&lt;br /&gt;
petalinux-build -c u-boot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для изменения стартового сообщения U-Boot 2017.01 (Jun 07...) идем в &amp;lt;projectname&amp;gt;/components/ext_sources/MY-U-BOOT/u-boot-xlnx/Makefile. В строке 5 есть VERSION, в строке 1280 сам вывод.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Zynq]]&lt;br /&gt;
[[Категория:EmbeddedLinux]]&lt;br /&gt;
[[Category:Clonicus]]&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2024-06-17 07:27:00 +00:00 | Dneprov D }}&lt;/div&gt;</summary>
		<author><name>Dneprov D</name></author>	</entry>

	</feed>