16.05.2018 PetaLinux

Материал из SRNS
Перейти к: навигация, поиск
(RTC)
 
(не показаны 133 промежуточные версии 3 участников)
Строка 6: Строка 6:
  
 
</summary>
 
</summary>
 
{{Форма2}}
 
  
 
== Требования ==
 
== Требования ==
Строка 17: Строка 15:
 
Необходима Ubuntu-16.04
 
Необходима Ubuntu-16.04
  
Требуется поставить ряд пакетов, полный список приведен в документе UG1144
+
Требуется поставить ряд пакетов, полный список приведен в документе [https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug1144-petalinux-tools-reference-guide.pdf#page=9 UG1144]
  
 
Устанавливаем PetaLinux в систему. Дистрибутив есть на [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2018-1.html Xilinx], либо у меня на компьютере. '''Ставить PetaLinux необходимо БЕЗ прав суперюзера!'''
 
Устанавливаем PetaLinux в систему. Дистрибутив есть на [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2018-1.html Xilinx], либо у меня на компьютере. '''Ставить PetaLinux необходимо БЕЗ прав суперюзера!'''
Строка 90: Строка 88:
 
Выставляем точку начала распаковки образа системы
 
Выставляем точку начала распаковки образа системы
  
Выключаем копирование образа по sftp и отключаем интернет-sstate
+
Выключаем копирование образа по sftp (Image Packaging Configuration -> Copy final images)
 +
 
 +
Отключаем интернет-sstate (Yocto Settings -> Enable Network sstate feeds)
  
 
=== petalinux-config -c kernel===
 
=== petalinux-config -c kernel===
Строка 122: Строка 122:
 
=== petalinux-config -c rootfs ===
 
=== petalinux-config -c rootfs ===
  
Подключаем при необходимости ethtool, gdbserver(просто gdb не заработал), libstdc, libgcc, glib2.0, glibc(glibc & ltd)
+
Подключаем при необходимости ethtool, gdbserver, gdb, libstdc, libgcc, glib2.0, glibc(glibc & ltd)
 
<source lang="bash">
 
<source lang="bash">
 
Filesystem Packages->
 
Filesystem Packages->
Строка 147: Строка 147:
 
           i2c-tools ->
 
           i2c-tools ->
 
               [*] i2c-tools
 
               [*] i2c-tools
 +
          usbutils ->
 +
              [*] usbutils
 
     console ->
 
     console ->
 
           network ->
 
           network ->
Строка 171: Строка 173:
 
<source lang="bash">
 
<source lang="bash">
 
petalinux-build
 
petalinux-build
 +
 +
cd /images/linux/
 
</source>
 
</source>
* делаем boot.bin
+
* делаем boot.bin в папке /images/linux/
 
<source lang="bash">
 
<source lang="bash">
 
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --u-boot --force
 
$ 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
 
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --force
 +
 +
 +
$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --kernel --force
 
</source>
 
</source>
  
Строка 348: Строка 355:
 
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/
 
cp /run/media/mmcblk0p1/daemon/receiver.conf /etc/
 
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/
 
cp /run/media/mmcblk0p1/daemon/receiver /etc/init.d/
 +
</source>
 +
 +
=== Serial port на новом линуксе ===
 +
Выяснилось, что без доп. настройки, в последовательный порт (dev/ttyPS0) после каждой посылки добавляются символы CR и LF. Оказалось, что и RTKLib, и софт Листопада не хотят работать с таким окончанием пакетов.
 +
 +
Выше не совсем так, скорее мысль в том, что каждый символ LF (0x0A) в наших данных меняется на символы CR LF, т.е. (0x0D0A). И тогда, в нашем битовом потоке меняется размер и содержимое и парсеры работают некорректно.
 +
Старый линукс на Ориксах добавляет только LF. Для решения проблемы нужно через stty выключить в настройках порта опцию '''onlcr''' (преобразовывать перевод строки в возврат каретки и новую строку).
 +
 +
Сделать это удалось пока только изменив скрипт демона receiver. Для решения проблемы заходим в /run/media/mmcblk0p1/daemon/receiver, и в начале секции receiver_start() {...} добавляем команду:
 +
 +
<source lang="bash">
 +
stty -F /dev/ttyPS0 -onlcr
 
</source>
 
</source>
  
Строка 972: Строка 991:
  
 
=== Oryx ===
 
=== Oryx ===
 +
 +
Итоговый system-user.dtsi
 +
 +
Меняем номера uart, чтобы системным был ttyPS1, а пользовательским ttyPS0
 +
<source lang="bash">
 +
/include/ "system-conf.dtsi"
 +
/ {
 +
    aliases {
 +
        serial0 = &uart0;
 +
        serial1 = &uart1;
 +
    };
 +
};
 +
 +
&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";
 +
        };
 +
    };
 +
};
 +
 +
/ {
 +
    chosen {
 +
            bootargs = "console=ttyPS1,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio";
 +
            stdout-path = "serial1:115200n8";
 +
    };
 +
};
 +
 +
&amba {
 +
    hififo: hififo@40000000 {
 +
            compatible = "generic-uio";
 +
            interrupt-parent = <&intc>;
 +
            interrupts = <0 29 1>;
 +
            reg = <0x40000000 0x1000 0x18000000 0x8000000>;
 +
    };
 +
};
 +
 +
&uart0{
 +
    port-number = <0>;
 +
};
 +
 +
&uart1{
 +
    port-number = <1>;
 +
};
 +
</source>
 +
  
 
В Vivado включен eth0(с mdio) и выключен eth1.
 
В Vivado включен eth0(с mdio) и выключен eth1.
Строка 994: Строка 1075:
 
</source>
 
</source>
 
Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!
 
Спидометр показывает 2,5МБ/с, т.е. 20Мбит/с!
 +
 +
Можно в custom_itit.sh прописать:
 +
<source lang="bash">
 +
ifdown eth0
 +
ethtool -s eth0 speed 10 duplex full autoneg on
 +
ifup eth0
 +
</source>
  
  
Строка 1037: Строка 1125:
  
 
<source lang="bash">
 
<source lang="bash">
i2cdetect -r 0
+
i2cdetect -y -r 0
 
</source>
 
</source>
  
 
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842160/Cadence+I2C+Driver Статья] по i2c и RTC
 
[https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842160/Cadence+I2C+Driver Статья] по i2c и RTC
 +
 +
== QSPI Flash ==
 +
 +
для работы по флешь памяти как в ките (S25FL128S) - оставляем в дев.три родные compatible = "n25q512a","micron,m25p80";
 +
 +
== SWDT System Watchdog Timer==
 +
 +
* Модифицируем Uenv для настройки wawtchdog через uboot:
 +
 +
<source lang="bash">
 +
bootcmd=run swdt_set && run fpga_config && run boot_image && run boot_dtb && bootm 0xA000000 0xA000000 0x9000000
 +
swdt_set=run swdt_ccr && run swdt_rst && run swdt_zmr
 +
swdt_ccr=mw 0xf8005004 0x92063b
 +
swdt_rst=mw 0xf8005008 0x1999
 +
swdt_zmr=mw 0xf8005000 0xabc043
 +
</source>
 +
 +
* Создаем скрипт для сброса watchdog:
 +
 +
swdt_rst.sh
 +
 +
<source lang="bash">
 +
watch -n 5 'devmem 0xf8005008 32 0x1999' &>/dev/null &
 +
</source>
 +
 +
* Добавляем вызов скрипта в автозагрузку
 +
 +
PS Посмотреть можно в проекте bin/Clonicus, коммит ffc437e435d3b5c207bb1186a9561fd06a46d89f
  
 
== RTC ==
 
== RTC ==
Строка 1051: Строка 1167:
 
<source lang="bash">
 
<source lang="bash">
 
&amba {
 
&amba {
     i2c: i2c@e0004000 {
+
     i2c0: i2c@e0004000 {
 +
        clock-frequency = <0xC350>;
 
         rtc@51 {
 
         rtc@51 {
                 compatible = "nxp,pcf8563";
+
                 compatible = "nxp,pcf85363";
 
                 reg = <0x51>;
 
                 reg = <0x51>;
 
         };
 
         };
 +
    };
 +
    i2c1: i2c@e0005000 {
 +
        clock-frequency = <0xC350>;
 
     };
 
     };
 
};
 
};
Строка 1063: Строка 1183:
 
<source lang="bash">
 
<source lang="bash">
 
i2c@e0004000 {
 
i2c@e0004000 {
        compatible = "cdns,i2c-r1p10";
+
    compatible = "cdns,i2c-r1p10";
        status = "okay";
+
    status = "okay";
        clocks = <0x1 0x26>;
+
    clocks = <0x1 0x26>;
        interrupt-parent = <0x4>;
+
    interrupt-parent = <0x4>;
        interrupts = <0x0 0x19 0x4>;
+
    interrupts = <0x0 0x19 0x4>;
        reg = <0xe0004000 0x1000>;
+
    reg = <0xe0004000 0x1000>;
        #address-cells = <0x1>;
+
    #address-cells = <0x1>;
        #size-cells = <0x0>;
+
    #size-cells = <0x0>;
        clock-frequency = <0x61a80>;
+
    clock-frequency = <0xc350>;
  
        rtc@51 {
+
    rtc@51 {
                compatible = "nxp,pcf8563";
+
        compatible = "nxp,pcf85363";
                reg = <0x51>;
+
        reg = <0x51>;
        };
+
    };
 +
};
 +
 
 +
i2c@e0005000 {
 +
    compatible = "cdns,i2c-r1p10";
 +
    status = "okay";
 +
    clocks = <0x1 0x27>;
 +
    interrupt-parent = <0x4>;
 +
    interrupts = <0x0 0x30 0x4>;
 +
    reg = <0xe0005000 0x1000>;
 +
    #address-cells = <0x1>;
 +
    #size-cells = <0x0>;
 +
    clock-frequency = <0xc350>;
 
};
 
};
 
</source>
 
</source>
Строка 1099: Строка 1231:
  
 
* В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку
 
* В файле project-spec/meta-user/recipes-core/images/petalinux-image.bbappend удаляем соответствующую строку
 +
 +
* переоткрыть petalinux-config -c rootfs
  
 
Пробуем собрать модуль
 
Пробуем собрать модуль
Строка 1105: Строка 1239:
 
</source>
 
</source>
  
Если ОК, собираем  
+
Если ОК, собираем (собирать модуль необязательно, petalinux-build его соберет)
 
<source lang="bash">
 
<source lang="bash">
 
petalinux-build
 
petalinux-build
Строка 1112: Строка 1246:
 
И перепаковываем BOOT.bin
 
И перепаковываем BOOT.bin
  
Пересобираем deveice-tree с указанием нового драйвера
+
Пересобираем deveice-tree с указанием нового драйвера (petalinux-build соберет сам deveice-tree)
 +
 
 +
просмотр модулей
 +
 
 +
<source lang="bash">
 +
lsmod
 +
</source>
 +
 
 +
загрузить драйвер можно
 +
 
 +
<source lang="bash">
 +
insmod /lib/modules/4.9.0-xilinx-v2017.4/extra/rtc-pcf85363.ko
 +
</source>
 +
или
 +
<source lang="bash">
 +
modprobe rtc-pcf85363
 +
</source>
 +
 
 +
'''Если все ок и в девайс три прописан правильный драйвер для устройства, то модуль будет загружен сам'''
 +
 
 +
Прошиваем .bit (для клоникуса нужен бит для работы PL-i2c). После этого можно пользоваться RTC
  
 
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)
 
Чтение времени из rtc если этот rtc не дефолтный (у нас rtc2)
Строка 1143: Строка 1297:
 
<source lang="bash">
 
<source lang="bash">
 
hwclock -s
 
hwclock -s
 +
</source>
 +
 +
Получить время с интеренета
 +
<source lang="bash">
 +
rdate -s <IP address of time server>
 +
rdate -s 132.163.96.5 (example)
 
</source>
 
</source>
  
 
При перезагрузке "reboot" система автоматически запишет системное время в RTC
 
При перезагрузке "reboot" система автоматически запишет системное время в RTC
 +
 +
== FPGA CONFIG from Uboot ==
 +
 +
Для того, чтобы прошить PL из uboot используем команду:
 +
<source lang="bash">
 +
fpga loadb 0 <ddr_file_addr> <file_size>
 +
</source>
 +
 +
либо скриптами:
 +
<source lang="bash">
 +
load_bit=fatload mmc 0 0x100000 clonicus.bit // читаем файл в ddr
 +
pl_load=fpga loadb 0 0x100000 0x1400000 // прошиваем PL
 +
fpga_config=run load_bit && run pl_loadipaddr // вызов самих скриптов
 +
</source>
 +
0x10_0000 - начальный адрес ddr
 +
 +
0x1_400_000 - размер в байтах для 20МБайт - указываем размер битника с запасом. Теоретически может так не работать, но работает
 +
 +
== ETH over TTY==
 +
 +
В ядре включаем: slip, Universal TUN/TAP
 +
 +
В rootfs включаем net-tools
 +
 +
Включаем iptables для перемршрутизации между подсетями и для него:
 +
 +
<source lang="bash">
 +
[*] Networking support  --->                                          [CONFIG_NET]
 +
      Networking Options  --->
 +
        [*] Network packet filtering framework (Netfilter) --->      [CONFIG_NETFILTER]
 +
          [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]
 +
          Core Netfilter Configuration --->
 +
            <*/M> Netfilter connection tracking support              [CONFIG_NF_CONNTRACK]
 +
            <*/M> Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]
 +
            <*/M> LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]
 +
          IP: Netfilter Configuration --->
 +
            <*/M> IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]
 +
 +
</source>
 +
 +
PC1:
 +
 +
slattach -L -s 115200 -p slip /dev/ttyPS1 &
 +
 +
ifconfig sl0 192.168.1.1/24 up
 +
 +
route add default gw 192.168.1.1 sl0
 +
 +
 +
PC2:
 +
 +
slattach -L -s 115200 -p slip /dev/ttyPS1 &
 +
 +
ifconfig sl0 192.168.1.2/24 up
 +
 +
route add default gw 192.168.1.1 sl0
 +
 +
== UART_PL ==
 +
 +
Включаем в настройках ядра поддержку uart_lite, выставляем правильное максимальное число уартов
 +
 +
Модифицируем system-user.dtsi
 +
 +
Обращаем внимание на нумерацию serial, axi_uartlite, она должна не повторяться. То же самое с interrupts
 +
Указываем верный физический адрес на шине и диапазон адресов в <reg>
 +
 +
<source lang="bash">
 +
/include/ "system-conf.dtsi"
 +
/ {
 +
    aliases {
 +
            serial2 = &axi_uartlite_0;
 +
            serial3 = &axi_uartlite_1;
 +
    };
 +
};
 +
/ {
 +
    amba_pl {
 +
        #address-cells = <0x1>;
 +
        #size-cells = <0x1>;
 +
        compatible = "simple-bus";
 +
        ranges;
 +
       
 +
        axi_uartlite_0: serial@80000008 {
 +
                clock-names = "ref_clk";
 +
                clocks = <&clkc 0>;
 +
                compatible = "xlnx,xps-uartlite-1.00.a";
 +
                current-speed = <115200>;
 +
                device_type = "serial";
 +
                interrupt-parent = <&intc>;
 +
                interrupts = <0 30 1>;
 +
                port-number = <3>;
 +
                reg = <0x80000008 0x10>;
 +
                xlnx,baudrate = <0x1c200>;
 +
                xlnx,data-bits = <0x8>;
 +
                xlnx,odd-parity = <0x0>;
 +
                xlnx,s-axi-aclk-freq-hz-d = "100.0";
 +
                xlnx,use-parity = <0x0>;
 +
        };
 +
        axi_uartlite_1: serial@8000001C {
 +
                clock-names = "ref_clk";
 +
                clocks = <&clkc 0>;
 +
                compatible = "xlnx,xps-uartlite-1.00.a";
 +
                current-speed = <115200>;
 +
                device_type = "serial";
 +
                interrupt-parent = <&intc>;
 +
                interrupts = <0 31 1>;
 +
                port-number = <4>;
 +
                reg = <0x8000001C 0x10>;
 +
                xlnx,baudrate = <0x1c200>;
 +
                xlnx,data-bits = <0x8>;
 +
                xlnx,odd-parity = <0x0>;
 +
                xlnx,s-axi-aclk-freq-hz-d = "100.0";
 +
                xlnx,use-parity = <0x0>;
 +
        };
 +
    };
 +
};
 +
</source>
 +
 +
Если ПЛИС не прошита - будет кернел паник
  
 
== IRQ ==
 
== IRQ ==
Строка 1217: Строка 1495:
  
 
} ;
 
} ;
 +
</source>
 +
 +
== USB-ETHERNET ==
 +
<source lang="bash">
 +
Device Drivers ->
 +
    USB support ->
 +
          [*] USB Modem (CDC ACM)
 +
          USB Gadget Support ->
 +
              [*] Ethernet Control Model (all)
 +
              [*] RNDIS
 +
              [*] Ethernet Emulation Model
 +
              [*] CDC Composite Device (Ethernet and ACM)
 +
              [*] USB Gadget Drivers (Ethernet gadget...)
 +
    Network device support ->
 +
          USB Network Adapters ->
 +
              [*] Realtek RTL8152/RTL8153
 +
              [*] Multi-purpose USB Networking Framework
 
</source>
 
</source>
  
Строка 1222: Строка 1517:
  
 
[https://forum.trenz-electronic.de/index.php?topic=747.0 раз]
 
[https://forum.trenz-electronic.de/index.php?topic=747.0 раз]
 +
[https://github.com/jinchenglee/zybo_linux_setup_doc два]
 +
[http://billauer.co.il/blog/2014/06/linux-realtek-hostapd/ три]
 +
 +
Творим:
 +
<source lang="bash">
 +
Networking support ->
 +
    Wireless ->
 +
          [*] cfg80211
 +
          [*] Generic IEEE 802.11 ... (mac80211)
 +
Device Drivers ->
 +
    Network device support ->
 +
          Wireless LAN ->
 +
              Realtek rtlwifi family of devices ->
 +
                    [*] Realtek ..../RTL8188CE Wireless Network Adapter ???
 +
                    [*] Realtek RTL8188EE Wireless Network Adapter ???
 +
                    [*] Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter
 +
    Staging drivers ->
 +
          [*] Realtek RTL8188EU wireless LAN MIC driver
 +
</source>
 +
 +
rootfs
 +
<source lang="bash">
 +
Filesystem packages ->
 +
    network ->
 +
          wpa-supplicant ->
 +
              [*] wpa-supplicant
 +
</source>
 +
 +
[https://github.com/lwfinger/rtl8188eu/blob/master/rtl8188eufw.bin качаем файл]
 +
 +
Модификаци инит-скрипта
 +
<source lang="bash">
 +
cp /run/media/mmcblk0p1/wpa_supplicant.conf /etc/
 +
 +
mkdir /lib/firmware/
 +
mkdir /lib/firmware/rtlwifi/
 +
cp /run/media/mmcblk0p1/rtl8188eufw.bin /lib/firmware/rtlwifi/
 +
</source>
  
 
== WiFi ESP ==
 
== WiFi ESP ==
Строка 1234: Строка 1567:
  
 
[http://zedboard.org/content/adding-wi-fi-and-bluetooth-connectivity-zedboard-using-murata-1dx-pmod zedboard четыре]
 
[http://zedboard.org/content/adding-wi-fi-and-bluetooth-connectivity-zedboard-using-murata-1dx-pmod zedboard четыре]
 +
 +
 +
== Оживление 2-го ядра ==
 +
 +
* Находим /home/ivan/clonicus_1.2.3/build/tmp/work-shared/plnx_arm/kernel-source/arch/arm/mach-zynq/efuse.c
 +
* В функции zynq_efuse_cpu_state делаем сразу ретурн тру
 +
* Че-нибудь меняем в настройках ядра для пересборки
 +
* Выполняем:
 +
 +
<source lang="bash">
 +
petalinux-build -c kernel -x compile -f
 +
petalinux-build -c kernel -x deploy -f
 +
petalinux-build
 +
</source>
 +
 +
* Забираем image.ub
 +
 +
'''ИЛИ'''
 +
 +
Правим device-tree, заменяем адрес efuse на 0xf800cff0
 +
 +
== webserver ==
 +
 +
* [https://github.com/emlid/ReachView Репозиторий emlid ReachView] (bnd на py/Flask, fnd на html/Ajax/js/Bootstrap)
 +
 +
 +
'''Backend:'''
 +
 +
* [http://svenand.blogdrives.com/archive/195.html#.XPTYt4gzaUk Источник по busybox-httpd]
 +
 +
* [https://www.afternerd.com/blog/python-http-server/ Гайд по python server]
 +
 +
* [https://ru.wikibooks.org/wiki/Flask Викиучебник по Flask]
 +
 +
* [https://habr.com/ru/post/193242/ ХаброГайд по python/Flask]
 +
 +
 +
'''Frontend:'''
 +
 +
* [https://unminify.com/ unminify CSS]
 +
 +
* [https://getbootstrap.com/docs/4.3/getting-started/introduction/ Bootstrap EN getting started]
 +
 +
* [https://bootstrap-4.ru/ Bootstrap RU]
 +
 +
* [http://htmlbook.ru/samhtml/tekst/spetssimvoly Справочник по операторам и тегам HTML/CSS]
 +
 +
* [https://www.w3schools.com/howto/default.asp Сборник шаблонов CSS W3schools]
 +
 +
* [https://www.w3schools.com/w3css/w3css_tabulators.asp Анимированный сайдбар/табы]
 +
 +
* [https://css-tricks.com/ CSS Tricks]
 +
 +
* [https://www.cssmatic.com/ Онлайн тени/границы/градиент блоков]
 +
 +
* [https://internetingishard.com/html-and-css/semantic-html/ Semantic HTML grid layout]
 +
 +
* [https://habr.com/ru/post/202408/ Хаброгайд(ч1) по верстке]
 +
 +
* [https://habr.com/ru/post/211032/ ХаброГайд(ч2) по Bootstrap]
 +
 +
* [https://fontawesome.com/icons?d=gallery Fontawesome ICONS open lib]
 +
 +
:* [https://htmlacademy.ru/courses/43/run/1 Нормальный онлайн HTML/CSS/JS editor]
 +
 +
 +
=== busybox httpd ===
 +
В petalinux многие пакеты скукожены до их минимальных вариантов и встроены в общий пакет busybox.
 +
В busybox есть также и вебсервер busybox-httpd.
 +
Для использования нужно на этапе настройки файловой системы его включить:
 +
 +
$ petalinux-config -c rootfs
 +
 +
Конфиг:
 +
base ->
 +
    busybox ->
 +
          [*] busybox
 +
          [*] busybox-httpd
 +
          [ ] busybox-hwclock
 +
          [*] busybox-inetd
 +
          [*] busybox-mdev
 +
          [ ] busybox-syslog
 +
          [*] busybox-udhcpc
 +
          [ ] busybox-udhcpd
 +
 +
Сам httpd будет в '''/usr/sbin'''.
 +
Рабочая папка по умолчанию в '''/srv/www/'''. Если в нее кидать файлы, то именно из нее будет отображаться контент в браузере. Папку можно изменить, перезапустив httpd с ключом -h <workdir>.
 +
 +
Порт по умолчанию 80. Работает, как демон в /etc/init.d/, вкл-выкл оттуда же.
 +
 +
Если положить в /srv/www/ файл index.html с неким кодом, то в браузере отобразится вебморда. Картинки работают по ссылкам.
 +
 +
'''index.html'''
 +
<source lang="html4strict">
 +
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 +
<html>
 +
<head>
 +
    <title>clonicus'112 webserver</title>
 +
</head>
 +
<body>
 +
    <h3>Hello, World!</h3>
 +
    <h4>Web server is now up!</h4>
 +
    <img src="https://i.redd.it/oagz5eobkkt11.jpg" width="50%">
 +
    <br><br>
 +
    <a href="http://www.srns.ru">For more information see SRNS.ru</a>
 +
    <br>
 +
</body>
 +
</html>
 +
</source>
 +
 +
 +
=== python в petalinux ===
 +
В petalinux 2017.4 есть 2 питона - 2.7 и 3.5.
 +
 +
$ petalinux-config -c rootfs
 +
 +
'''python2.7'''
 +
  Filesystem Packages->
 +
    devel->
 +
        python->
 +
 +
'''python3.5'''
 +
  Filesystem Packages->
 +
    misc->
 +
        python3-*>
 +
 +
Модуль runpy.py для запуска команд вида 'python -m <module>' находится в python -> python-misc.
 +
 +
 +
=== SimpleHTTPServer.py ===
 +
Для первого теста поднимем встроенный в python2.7 минисервер SimpleHTTPServer.py в /usr/lib/python2.7.
 +
 +
Для его запуска напишем скрипт
 +
 +
'''webserver.py''':
 +
 +
<source lang="python">
 +
import SimpleHTTPServer
 +
import SocketServer
 +
 +
PORT = 80
 +
 +
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
 +
 +
httpd = SocketServer.TCPServer(("", PORT), Handler)
 +
 +
print "serving at port", PORT
 +
httpd.serve_forever()
 +
</source>
 +
 +
$ python webserver.py
 +
 +
При наличии в папке со скриптом файла index.html сервер поднимется автоматически.
 +
 +
=== Добавление слоев в сборку ===
 +
 +
[https://www.srns.ru/wiki/Blog:DneprovD/18.07.2019_Yocto_layers Переехало в статью]
 +
 +
 +
  
 
[[Категория:HOWTO]]
 
[[Категория:HOWTO]]
Строка 1241: Строка 1734:
 
[[Category:Clonicus]]
 
[[Category:Clonicus]]
  
{{wl-publish: 2018-04-12 16:56:17 +0300 | Lipa }}
 
 
{{wl-publish: 2018-05-16 10:06:30 +0300 | Lipa }}
 
{{wl-publish: 2018-05-16 10:06:30 +0300 | Lipa }}

Текущая версия на 12:16, 5 мая 2022

Содержание

[править] Требования

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 (Image Packaging Configuration -> Copy final images)

Отключаем интернет-sstate (Yocto Settings -> Enable Network sstate feeds)

[править] 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
          usbutils ->
               [*] usbutils
     console ->
          network ->
               ethtool ->
                    [*] ethtool // необходимо для oryx! для перенастройки autonegotiation

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

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


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

[править] device tree

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

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

[править] Сборка проекта

  • далее (сборка идет 30-60 минут)
petalinux-build

cd /images/linux/
  • делаем boot.bin в папке /images/linux/
$ 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


$ petalinux-package --boot --format BIN --fsbl ./zynq_fsbl.elf --fpga name.bit --u-boot --kernel --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/

[править] Serial port на новом линуксе

Выяснилось, что без доп. настройки, в последовательный порт (dev/ttyPS0) после каждой посылки добавляются символы CR и LF. Оказалось, что и RTKLib, и софт Листопада не хотят работать с таким окончанием пакетов.

Выше не совсем так, скорее мысль в том, что каждый символ LF (0x0A) в наших данных меняется на символы CR LF, т.е. (0x0D0A). И тогда, в нашем битовом потоке меняется размер и содержимое и парсеры работают некорректно. Старый линукс на Ориксах добавляет только LF. Для решения проблемы нужно через stty выключить в настройках порта опцию onlcr (преобразовывать перевод строки в возврат каретки и новую строку).

Сделать это удалось пока только изменив скрипт демона receiver. Для решения проблемы заходим в /run/media/mmcblk0p1/daemon/receiver, и в начале секции receiver_start() {...} добавляем команду:

stty -F /dev/ttyPS0 -onlcr

[править] 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

Итоговый system-user.dtsi

Меняем номера uart, чтобы системным был ttyPS1, а пользовательским ttyPS0

/include/ "system-conf.dtsi"
/ {
    aliases {
        serial0 = &uart0;
        serial1 = &uart1;
    };
};

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

/ {
    chosen {
            bootargs = "console=ttyPS1,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio";
            stdout-path = "serial1:115200n8";
    };
};

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

&uart0{
    port-number = <0>;
};

&uart1{
    port-number = <1>;
};


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

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

Работает

На новых платах(с отпаянными линиями линиями eth):

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

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

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

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

ethtool -s eth0 speed 10 duplex full autoneg on

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

Можно в custom_itit.sh прописать:

ifdown eth0
ethtool -s eth0 speed 10 duplex full autoneg on
ifup eth0


&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 -y -r 0

Статья по i2c и RTC

[править] QSPI Flash

для работы по флешь памяти как в ките (S25FL128S) - оставляем в дев.три родные compatible = "n25q512a","micron,m25p80";

[править] SWDT System Watchdog Timer

  • Модифицируем Uenv для настройки wawtchdog через uboot:
bootcmd=run swdt_set && run fpga_config && run boot_image && run boot_dtb && bootm 0xA000000 0xA000000 0x9000000
swdt_set=run swdt_ccr && run swdt_rst && run swdt_zmr
swdt_ccr=mw 0xf8005004 0x92063b
swdt_rst=mw 0xf8005008 0x1999
swdt_zmr=mw 0xf8005000 0xabc043
  • Создаем скрипт для сброса watchdog:

swdt_rst.sh

watch -n 5 'devmem 0xf8005008 32 0x1999' &>/dev/null &
  • Добавляем вызов скрипта в автозагрузку

PS Посмотреть можно в проекте bin/Clonicus, коммит ffc437e435d3b5c207bb1186a9561fd06a46d89f

[править] RTC

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

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

&amba {
    i2c0: i2c@e0004000 {
        clock-frequency = <0xC350>;
        rtc@51 {
                compatible = "nxp,pcf85363";
                reg = <0x51>;
        };
    };
    i2c1: i2c@e0005000 {
        clock-frequency = <0xC350>;
    };
};

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

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 = <0xc350>;

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

i2c@e0005000 {
    compatible = "cdns,i2c-r1p10";
    status = "okay";
    clocks = <0x1 0x27>;
    interrupt-parent = <0x4>;
    interrupts = <0x0 0x30 0x4>;
    reg = <0xe0005000 0x1000>;
    #address-cells = <0x1>;
    #size-cells = <0x0>;
    clock-frequency = <0xc350>;
};

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

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-config -c rootfs

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

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

Получить время с интеренета

rdate -s <IP address of time server>
rdate -s 132.163.96.5 (example)

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

[править] FPGA CONFIG from Uboot

Для того, чтобы прошить PL из uboot используем команду:

fpga loadb 0 <ddr_file_addr> <file_size>

либо скриптами:

load_bit=fatload mmc 0 0x100000 clonicus.bit // читаем файл в ddr
pl_load=fpga loadb 0 0x100000 0x1400000 // прошиваем PL
fpga_config=run load_bit && run pl_loadipaddr // вызов самих скриптов

0x10_0000 - начальный адрес ddr

0x1_400_000 - размер в байтах для 20МБайт - указываем размер битника с запасом. Теоретически может так не работать, но работает

[править] ETH over TTY

В ядре включаем: slip, Universal TUN/TAP

В rootfs включаем net-tools

Включаем iptables для перемршрутизации между подсетями и для него:

[*] Networking support  --->                                          [CONFIG_NET]
      Networking Options  --->
        [*] Network packet filtering framework (Netfilter) --->       [CONFIG_NETFILTER]
          [*] Advanced netfilter configuration                        [CONFIG_NETFILTER_ADVANCED]
          Core Netfilter Configuration --->
            <*/M> Netfilter connection tracking support               [CONFIG_NF_CONNTRACK]
            <*/M> Netfilter Xtables support (required for ip_tables)  [CONFIG_NETFILTER_XTABLES]
            <*/M> LOG target support                                  [CONFIG_NETFILTER_XT_TARGET_LOG]
          IP: Netfilter Configuration --->
            <*/M> IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]

PC1:

slattach -L -s 115200 -p slip /dev/ttyPS1 &

ifconfig sl0 192.168.1.1/24 up

route add default gw 192.168.1.1 sl0


PC2:

slattach -L -s 115200 -p slip /dev/ttyPS1 &

ifconfig sl0 192.168.1.2/24 up

route add default gw 192.168.1.1 sl0

[править] UART_PL

Включаем в настройках ядра поддержку uart_lite, выставляем правильное максимальное число уартов

Модифицируем system-user.dtsi

Обращаем внимание на нумерацию serial, axi_uartlite, она должна не повторяться. То же самое с interrupts Указываем верный физический адрес на шине и диапазон адресов в <reg>

/include/ "system-conf.dtsi"
/ {
    aliases {
            serial2 = &axi_uartlite_0;
            serial3 = &axi_uartlite_1;
    };
};
/ {
    amba_pl {
        #address-cells = <0x1>;
        #size-cells = <0x1>;
        compatible = "simple-bus";
        ranges;
       
        axi_uartlite_0: serial@80000008 {
                clock-names = "ref_clk";
                clocks = <&clkc 0>;
                compatible = "xlnx,xps-uartlite-1.00.a";
                current-speed = <115200>;
                device_type = "serial";
                interrupt-parent = <&intc>;
                interrupts = <0 30 1>;
                port-number = <3>;
                reg = <0x80000008 0x10>;
                xlnx,baudrate = <0x1c200>;
                xlnx,data-bits = <0x8>;
                xlnx,odd-parity = <0x0>;
                xlnx,s-axi-aclk-freq-hz-d = "100.0";
                xlnx,use-parity = <0x0>;
        };
        axi_uartlite_1: serial@8000001C {
                clock-names = "ref_clk";
                clocks = <&clkc 0>;
                compatible = "xlnx,xps-uartlite-1.00.a";
                current-speed = <115200>;
                device_type = "serial";
                interrupt-parent = <&intc>;
                interrupts = <0 31 1>;
                port-number = <4>;
                reg = <0x8000001C 0x10>;
                xlnx,baudrate = <0x1c200>;
                xlnx,data-bits = <0x8>;
                xlnx,odd-parity = <0x0>;
                xlnx,s-axi-aclk-freq-hz-d = "100.0";
                xlnx,use-parity = <0x0>;
        };
    };
};

Если ПЛИС не прошита - будет кернел паник

[править] 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>;

} ;

[править] USB-ETHERNET

Device Drivers ->
     USB support ->
          [*] USB Modem (CDC ACM)
          USB Gadget Support ->
               [*] Ethernet Control Model (all)
               [*] RNDIS
               [*] Ethernet Emulation Model
               [*] CDC Composite Device (Ethernet and ACM)
               [*] USB Gadget Drivers (Ethernet gadget...)
     Network device support ->
          USB Network Adapters ->
               [*] Realtek RTL8152/RTL8153
               [*] Multi-purpose USB Networking Framework

[править] WiFi Dongle

раз два три

Творим:

Networking support ->
     Wireless ->
          [*] cfg80211
          [*] Generic IEEE 802.11 ... (mac80211)
Device Drivers ->
     Network device support ->
          Wireless LAN ->
               Realtek rtlwifi family of devices ->
                    [*] Realtek ..../RTL8188CE Wireless Network Adapter ???
                    [*] Realtek RTL8188EE Wireless Network Adapter ???
                    [*] Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter
     Staging drivers ->
          [*] Realtek RTL8188EU wireless LAN MIC driver

rootfs

Filesystem packages ->
     network ->
          wpa-supplicant ->
               [*] wpa-supplicant

качаем файл

Модификаци инит-скрипта

cp /run/media/mmcblk0p1/wpa_supplicant.conf /etc/

mkdir /lib/firmware/
mkdir /lib/firmware/rtlwifi/
cp /run/media/mmcblk0p1/rtl8188eufw.bin /lib/firmware/rtlwifi/

[править] WiFi ESP

Xilinx SDIP WiFi

Zedboard раз

два

picozed три

zedboard четыре


[править] Оживление 2-го ядра

  • Находим /home/ivan/clonicus_1.2.3/build/tmp/work-shared/plnx_arm/kernel-source/arch/arm/mach-zynq/efuse.c
  • В функции zynq_efuse_cpu_state делаем сразу ретурн тру
  • Че-нибудь меняем в настройках ядра для пересборки
  • Выполняем:
petalinux-build -c kernel -x compile -f
petalinux-build -c kernel -x deploy -f
petalinux-build
  • Забираем image.ub

ИЛИ

Правим device-tree, заменяем адрес efuse на 0xf800cff0

[править] webserver


Backend:


Frontend:


[править] busybox httpd

В petalinux многие пакеты скукожены до их минимальных вариантов и встроены в общий пакет busybox. В busybox есть также и вебсервер busybox-httpd. Для использования нужно на этапе настройки файловой системы его включить:

$ petalinux-config -c rootfs

Конфиг:

base ->
    busybox ->
         [*] busybox
         [*] busybox-httpd
         [ ] busybox-hwclock
         [*] busybox-inetd
         [*] busybox-mdev
         [ ] busybox-syslog 
         [*] busybox-udhcpc 
         [ ] busybox-udhcpd 

Сам httpd будет в /usr/sbin. Рабочая папка по умолчанию в /srv/www/. Если в нее кидать файлы, то именно из нее будет отображаться контент в браузере. Папку можно изменить, перезапустив httpd с ключом -h <workdir>.

Порт по умолчанию 80. Работает, как демон в /etc/init.d/, вкл-выкл оттуда же.

Если положить в /srv/www/ файл index.html с неким кодом, то в браузере отобразится вебморда. Картинки работают по ссылкам.

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>clonicus'112 webserver</title>
</head>
<body>
    <h3>Hello, World!</h3>
    <h4>Web server is now up!</h4>
    <img src="https://i.redd.it/oagz5eobkkt11.jpg" width="50%">
    <br><br>
    <a href="http://www.srns.ru">For more information see SRNS.ru</a>
    <br>
</body>
</html>


[править] python в petalinux

В petalinux 2017.4 есть 2 питона - 2.7 и 3.5.

$ petalinux-config -c rootfs

python2.7

 Filesystem Packages->
    devel->
        python->

python3.5

 Filesystem Packages->
    misc->
        python3-*>

Модуль runpy.py для запуска команд вида 'python -m <module>' находится в python -> python-misc.


[править] SimpleHTTPServer.py

Для первого теста поднимем встроенный в python2.7 минисервер SimpleHTTPServer.py в /usr/lib/python2.7.

Для его запуска напишем скрипт

webserver.py:

import SimpleHTTPServer
import SocketServer
 
PORT = 80
 
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
 
httpd = SocketServer.TCPServer(("", PORT), Handler)
 
print "serving at port", PORT
httpd.serve_forever()
$ python webserver.py 

При наличии в папке со скриптом файла index.html сервер поднимется автоматически.

[править] Добавление слоев в сборку

Переехало в статью

[ Иерархический вид ]Комментарии

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

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

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

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