16.05.2018 PetaLinux

Материал из SRNS
Перейти к: навигация, поиск


Содержание

Требования

Vivado 2018.1 (для single-gigabit ethernet можно более ранние версии)

Необходима Ubuntu-16.04

Требуется поставить ряд пакетов, полный список приведен в документе UG1144

Устанавливаем PetaLinux в систему. Дистрибутив есть на Xilinx, либо у меня на компьютере. Ставить PetaLinux необходимо БЕЗ прав суперюзера!

Подготовка завершена

Правка Vivado

Для поддержки MDIO в Vivado 17.1-17.4 нужен патч. Ставим!

Не помогло. Ставим 2018.1

Сборка

Пошаговое руководство по сборке содержится в документе UG1156

В консоли пишем source/[путь к петалинух]/settings.sh

Выполняем шаги из UG1156 по главе 5:

  • экспортируем из Vivado .hdf (в блок дизайн File->Export->Export Hardware)
  • создаем проект PetaLinux
$ petalinux-create --type project --template zynq --name <PROJECT>
  • переходим в папку с текущим проектом
  • подключаем файл .hdf
$ petalinux-config --get-hw-description=[путь к папке с файлом .hdf]
  • перед сборкой системы необходимо выполнить все команды конфигурации в данной последовательности:
$ petalinux-config

$ petalinux-config -c kernel

$ petalinux-config -c rootfs

petalinux-config

Если хотим спользовать внешний файл device-tree включаем:

Subsystem AUTO Hardware Settings->
     Advances bootable images storage settings->
          dtb image settings->
               image storage media
                    primary sd

Необходимо править netboot offset если оперативной памяти менее ~256МБ

$ petalinux-config
u-boot Configuration->
     netboot offset

Выставляем точку начала распаковки образа системы

petalinux-config -c kernel

  • Подключаем в ядре поддержку физика и его дров.
$ petalinux-config -c kernel
Device Drivers->
     [*]Network device support ->
          [*]Ethernet driver support ->
               [*] Micrel devices
          [*] PHY Device support and infastructure -->
               [*] Drivers for Micrel PHYs

petalinux-config -c rootfs

Подключаем при необходимости ethtool, gdb, libstdc

Необходимо убедиться, что добавление libstdc и gdb не увеличивает образ на столько, что он не может распаковаться в 0x8000000


Если будут проблемы, то надо будет править netboot offset

device tree

Если необходимо внести изменения в device tree, то смотрим конец статьи

Сборка проекта

  • далее (сборка идет 30-60 минут)
petalinux-build
  • делаем boot.bin
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force
  • записываем в загрузочную область флешки файлы boot.bin и image.ub

Всякое

Если мало памяти как у нас - возможна ошибка image is not a fdt ссылка

Необходимо править netboot offset

$ petalinux-config
u-boot Configuration->
     netboot offset

Можно вручную загрузиться из u-boot'а.

$ fatload mmc 0 0x8000000 image.ub
$ bootm 0x8000000

либо

$ fatload mmc 0 0x8000000 image.ub
$ fatload mmc 0 0x7000000 system.dtb
$ bootm 0x8000000 0x8000000 0x7000000

Можно поварьировать адрес


Проверка статуса прошитости FPGA

cat /sys/class/xdevcfg/xdevcfg/device/prog_done

device tree

Для внесения изменений в device tree добавляем нужные строки в файл

project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

пример

Для разборки device-tree ссылка

$ scripts/dtc/dtc -I dtb -O dts -o /path/to/fromdtb.dts /path/to/booted_with_this.dtb

Для сборки device-tree

$ dtc -I dts -O dtb -o <devicetree name>.dtb <devicetree name>.dts

Модификация device-tree

После долгих мучений получилось поднять DP83867 только после добавления модификатора в файл волшебная статья

описание параметров

project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

Single Kit-board eth

В Vivado включен eth1(с mdio) и выключен eth0.

Так работает

&gem1{
    status = "okay";
    phy-handle = <&phy0>;
    phy-mode = "rgmii-id";
       
    xlnx,eth-mode = <0x1>;

    mdio {
        status = "okay";
        #address-cells = <1>;
        #size-cells = <0>;
        phy0: phy@12 {
            compatible = "ethernet-phy-ieee802.3-c22";
            device_type = "ethernet-phy";

            reg = <12>;
            ti,rx-internal-delay = <0x7>;
            ti,tx-internal-delay = <0x7>;
            ti,fifo-depth = <0x01>;
            ti,min-output-impedance;
            ti,dp83867-rxctrl-strap-quirk;
            status = "okay";
        };
    };
};

Single On-board eth

В Vivado включен eth0(с mdio) и выключен eth1.

Работает гигабит через type-c! Работает hot plug. Успех.

&gem0{
    status = "okay";
    phy-handle = <&phy0>;
    phy-mode = "rgmii-id";
       
    xlnx,eth-mode = <0x1>;

    mdio {
        status = "okay";
        #address-cells = <1>;
        #size-cells = <0>;
        phy0: phy@0 {
            compatible = "ethernet-phy-ieee802.3-c22";
            device_type = "ethernet-phy";

            reg = <0>;
            ti,rx-internal-delay = <0x7>;
            ti,tx-internal-delay = <0x7>;
            ti,fifo-depth = <0x01>;
            ti,min-output-impedance;
            ti,dp83867-rxctrl-strap-quirk;
            status = "okay";
        };
    };
};

Dual eth

интересная статья о дуал eth

Попытка поднять два физика. Пока не работает

&gem0{
    local-mac-address = [00 0a 35 00 00 00];
    enet-reset = <&gpio0 47 0>;
    status = "okay";
    phy-handle = <&phy0>;
    phy-mode = "rgmii-id";
       
    xlnx,eth-mode = <0x1>;

    mdio {
        status = "okay";
        #address-cells = <1>;
        #size-cells = <0>;
        phy0: phy@0 {
            compatible = "ethernet-phy-ieee802.3-c22";
            device_type = "ethernet-phy";

            reg = <0>;
            ti,rx-internal-delay = <0x8>;
            ti,tx-internal-delay = <0xa>;
            ti,fifo-depth = <0x01>;
            ti,min-output-impedance;
            ti,dp83867-rxctrl-strap-quirk;
            status = "okay";
        };
        phy1: phy@12 {
            compatible = "ethernet-phy-ieee802.3-c22";
            device_type = "ethernet-phy";

            reg = <12>;
            ti,rx-internal-delay = <0x8>;
            ti,tx-internal-delay = <0xa>;
            ti,fifo-depth = <0x01>;
            ti,min-output-impedance;
            ti,dp83867-rxctrl-strap-quirk;
            status = "okay";
        };
    };
};

&gem1{
    local-mac-address = [00 0a 35 00 00 01];
    enet-reset = <&gpio0 47 0>;
    status = "okay";
    phy-handle = <&phy1>;
    phy-mode = "rgmii-id";
       
    xlnx,eth-mode = <0x1>;
};

Oryx

В Vivado включен eth0(с mdio) и выключен eth1. Pullup пока что все включены

статья в помощь

Работает, но с ходу только на новых платах с отпаянными линиями линиями eth. На старых платах на любых проводах только если выставить 100 в ethtool

&gem0{
    status = "okay";
    phy-handle = <&phy0>;
    phy-mode = "rgmii-id";
       
    xlnx,eth-mode = <0x1>;

    mdio {
        status = "okay";
        #address-cells = <1>;
        #size-cells = <0>;
        phy0: phy@1 {
            compatible = "ethernet-phy-ieee802.3-c22";
            device_type = "ethernet-phy";
            rxc-skew-ps = <1800>;
            rxdv-skew-ps = <0>;
            txc-skew-ps = <1800>;
            txen-skew-ps = <0>;
            reg = <1>;
            status = "okay";
        };
    };
};

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты