16.05.2018 PetaLinux

Материал из SRNS
Перейти к: навигация, поиск
(RTC)
(RTC)
Строка 1105: Строка 1105:
 
</source>
 
</source>
  
Если ОК, собираем  
+
Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)
 
<source lang="bash">
 
<source lang="bash">
 
petalinux-build
 
petalinux-build
Строка 1112: Строка 1112:
 
И перепаковываем BOOT.bin
 
И перепаковываем BOOT.bin
  
Пересобираем deveice-tree с указанием нового драйвера
+
Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)
  
'''Важно!''' Если при загрузке системы недоступен i2c (в клоникус i2c доступен только со специальным .bit). Иначе rtc не будет обнаружен и не будет добавлено устройство в систему
+
просмотр модулей
 
+
Не понятно - должен ли быть загружен модуль драйвера - просмотр модулей
+
  
 
<source lang="bash">
 
<source lang="bash">
Строка 1132: Строка 1130:
 
</source>
 
</source>
  
'''Но!, если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''
+
'''Если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''
 +
 
 +
Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC
  
 
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)
 
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)

Версия 13:44, 21 марта 2019


Содержание

Требования

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

Начиная с petalinux_2018.1 отсутствует devcfg. Необходимо использовать FPGA manager. Технология нами пока не освоена

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

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

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

кидаем в /components/yocto/ sstate-rel-v2017.4.tar.gz

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

Правка 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МБ

Для клоникуса с 256МБ ставим 8'000'000

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

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

Выключаем копирование образа по sftp и отключаем интернет-sstate

petalinux-config -c kernel

  • Подключаем в ядре поддержку физика и его дров.
$ petalinux-config -c kernel

для oryx:

Device Drivers->
     [*]Network device support ->
          [*]Ethernet driver support ->
               [*] Micrel devices
          [*] PHY Device support and infastructure -->
               [*] Drivers for Micrel PHYs

для clonicus:

Device Drivers->
     [*]Network device support ->
          [*] PHY Device support and infastructure -->
               [*] Texas Instruments DP83867 Gigabit PHY

petalinux-config -c rootfs

Подключаем при необходимости ethtool, gdbserver(просто gdb не заработал), libstdc, libgcc, glib2.0, glibc(glibc & ltd)

Filesystem Packages->
     misc ->
          gcc-runtime ->
               [*] libstdc ++
          gdb -->
               [*] gdb
          glib-2.0
               [*] glib-2.0
          glibc
               [*] glibc
               [*] ldd
     devel ->
          python ->
               python ->
                    [*] python

Опционально:

Filesystem Packages->
     base ->
          i2c-tools ->
               [*] i2c-tools
     console ->
          network ->
               ethtool ->
                    [*] ethtool // необходимо для oryx! для перенастройки autonegotiation

Можно еще подключать дебаг i2c

Необходимо убедиться, что образ может распаковаться в размер оперативы


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

device tree

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

Интересная статья по правке devicetree из uboot

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

  • далее (сборка идет 30-60 минут)
petalinux-build
  • делаем boot.bin
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force

$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --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 0xA000000 image.ub
$ bootm 0xA000000

либо

$ fatload mmc 0 0xA000000 image.ub
$ fatload mmc 0 0x9000000 system.dtb
$ bootm 0xA000000 0xA000000 0x9000000

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


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

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

Uboot

Для внесения правок в загрузку линукса используем список команд env

Просмотр текущих команд printenv

Сброс настроек в дефолт env default -a

Создать переменную env set <имя> <значение>

Правка переменной env edit <имя переменной>

---

Для каждой платы делаем следующее:

  • Удаляем в конце имени ".c"
  • Записываем на флешку рядом с образом линукса
  • Запускаем плату и прерываем autoboot
  • Пишем editenv ethaddr
  • Редактируем MAC-адрес
  • Пишем saveenv
  • Все! можем ребутать reset


Сохранить в файл saveenv

Автозапуск приложений

Во-первых тыц

Далее пишем

petalinux-create -t apps --template install -n myapp-init --enable

Правим файл /project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb

#
# This file is the myapp-init recipe.
#

SUMMARY = "Simple myapp-init application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://myapp-init"

S = "${WORKDIR}"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

inherit update-rc.d

INITSCRIPT_NAME = "myapp-init"
INITSCRIPT_PARAMS = "start 99 S ."

do_install() {
    install -d ${D}${sysconfdir}/init.d
    install -m 0755 ${S}/myapp-init ${D}${sysconfdir}/init.d/myapp-init
}
FILES_${PN} += "${sysconfdir}/*"

Правим сам исполняемый скрипт project-spec/meta-user/recipes-apps/myapp-init/files/myapp-init

#!/bin/sh

echo "Autorun script"

echo "Try run custom_init"
sh /run/media/mmcblk0p1/custom_init.sh

Записываем на флешку скрипт custom_init.sh с нужными командами и делаем его исполняемым

Записываем файл interfaces

Скачать архив: Файл:Init interfaces.rar

SSH

Как победить сохранение ssh-ключей:

Добавляем в init_script следующие строки:

mkdir /run/media/mmcblk0p2/.ssh
ln -s /run/media/mmcblk0p2/.ssh/ /home/root/
mkdir /run/media/mmcblk0p2/dropbear/
chmod 400 /run/media/mmcblk0p2/dropbear/
rm -r /etc/dropbear/
ln -s /run/media/mmcblk0p2/dropbear/ /etc/
  • Создается ссылка на флешку, где хранятся авторизованные пользователи
  • Создается папка для хранения секретного ключа платы
  • При запуске платы свежесозданный ключ заменяется тем, что лежит на флешке
  • При первом включении платы будет создан новый ключ

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

Daemon

Для настройки демона:

  • Добавляем строки в файл custom_init.sh
  • Кидаем на загрузочный раздел флешки папку из архива File:daemon.rar
cp -r /run/media/mmcblk0p1/daemon/lsb /lib/
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/

device tree

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

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

пример

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

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

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

$ dtc -I dts -O dtb -o <name>.dtb <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):

  • на полноценных проводах с ходу
  • на обкусанных проводах только если выставить 10 в ethtool

На старых платах:

  • на полноценных проводах только если выставить 100 в ethtool
  • на обкусанных проводах только если выставить 10 в ethtool

Везде работает так:

ethtool -s eth0 speed 10 duplex full autoneg on

Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!


&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";
        };
    };
};

В принципе, работает сеть на новой плате с нормальным кабелем без модификации devicetree. Остальные комбинации плат-кабелей надо проверять

i2c

В rootfs включаем

Filesystem Packages ->
     base ->
          i2c-tools ->
               [*] i2c-tools

Для поиска устройств можно написать

i2cdetect -r 0

Статья по i2c и RTC

RTC

  • Включаем в ядро подходящий драйвер
  • Модифицируем device-tree

Вставляем в девайс три:

&amba {
    i2c: i2c@e0004000 {
        rtc@51 {
                compatible = "nxp,pcf85363";
                reg = <0x51>;
        };
    };
};

Будет выглядеть так:

i2c@e0004000 {
        compatible = "cdns,i2c-r1p10";
        status = "okay";
        clocks = <0x1 0x26>;
        interrupt-parent = <0x4>;
        interrupts = <0x0 0x19 0x4>;
        reg = <0xe0004000 0x1000>;
        #address-cells = <0x1>;
        #size-cells = <0x0>;
        clock-frequency = <0x61a80>;

        rtc@51 {
                compatible = "nxp,pcf85363";
                reg = <0x51>;
        };
};

Если готового драйвера нет:

UG1144 pg.54

Создаем новый модуль

petalinux-create -t modules --name <name_module> --enable
petalinux-create -t modules --name rtc-pcf85363 --enable

Правим исходный код в project-spec/meta-user/recipes-modules/rtc-pcf85363/files

Исправленный драйвер лежит в git Clonicus\linux\

Для удаления модуля:

  • удаляем папку из project-spec/meta-user/recipes-modules
  • В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку

Пробуем собрать модуль

petalinux-build -c <name_module>

Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)

petalinux-build

И перепаковываем BOOT.bin

Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)

просмотр модулей

lsmod

загрузить драйвер можно

insmod /lib/modules/4.9.0-xilinx-v2017.4/extra/rtc-pcf85363.ko

или

modprobe rtc-pcf85363

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

Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC

Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)

hwclock -r -f /dev/rtc2

Синхронизация rtc по системному времени

hwclock -w -f /dev/rtc2

Правим custom_init.sh для изменения default-rtc на наше устройство

rm /dev/rtc
ln -s /dev/rtc2 /dev/rtc

Установка системного времени

date --set "2013-7-31 09:30"

Запись системного времени в RTC

hwclock -w

Запись времени RTC в системное время

hwclock -s

При перезагрузке "reboot" система автоматически запишет системное время в RTC

IRQ

Для поддержки irq добавляем в device-tree

Важно - мы перетираем bootargs!

/ {
    chosen {
            bootargs = "console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio";
    };
};

&amba {
    hififo: hififo@40000000 {
                    compatible = "generic-uio";
                    interrupt-parent = <&intc>;
                    interrupts = <0 29 1>;
                    reg = <0x40000000 0x1000 0x18000000 0x8000000>;
            };
};

USB

Запустил на Z706

во-первых во-вторых в-третьих

В дефолтных настройках ядра petalinux_2018.1 все было включено

включаем ресет на MIO7 pullup disabled

все ноги интерфейса ulpi pullup disabled

Содержимое system-user.dtsi

/include/ "system-conf.dtsi"
        /{

    usb_phy0:phy0 {

        compatible="ulpi-phy";

        #phy-cells = <0>;

       reg = <0xe0002000 0x1000>;

       view-port=<0x170>;

       drv-vbus;

    };

};

 

 

&usb0 {

        status = "okay";

        dr_mode = "host";

        usb-phy = <&usb_phy0>;

} ;

WiFi Dongle

раз

WiFi ESP

Xilinx SDIP WiFi

Zedboard раз

два

picozed три

zedboard четыре

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

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

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

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

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