MCom03-Linux
Обратно на СКИФ
Добавить пакеты/модули ядра в AltLinux из Buildroot
В этом руководстве будет добавлен модуль ядра SCTP в AltLinux
Добавить модуль ядра в buildroot и собрать
В папке с распакованным архивом mcom03-defconfig-src.tar.gz применить defconfig (make mcom03_defconfig FRAGMENTS=rockpi
) и выполнить команду
make linux-menuconfig
Далее по пути
│ -> Networking support
│ (1) -> Networking options
Включить клавишей `M`: <M> The SCTP Protocol --->
M – в виде модуля ядра.
При необходимости можно воспользоваться поиском (клавиша `/`) и ввести sctp. Чтобы включить дополнительные параметры.
Далее Save и выйти из menuconfig `ESC ESC`
В терминале в директории mcom03-defconfig-src:
make linux-rebuild && make
При необходимости протестировать полученный rootfs на плате (удостовериться, что модуль ядра загружен и работает)
Сборка AltLinux
Понадобится rootfs AltLinux и rootfs из собранного buildroot (с включенными SCTP)
В архиве[1] скрипт, который копирует нужные папки и ядро из buildroot в Altlinux (см README)
Полученный образ Alt можно прошить на uSD и загрузиться. Также рекомендуем прошить sbl.bin на QSPI из текущей сборки buildroot.
Проверка загрузки модуля ядра на AltLinux
[elvees@altgo1 ~]$ uname -a Linux altgo1 4 . 19.106 #2 SMP Wed Apr 5 16:24:31 MSK 2023 aarch64 GNU/Linux [elvees@altgo1 ~]$ lsmod | grep sctp sctp 397312 4
Вопросы по сборке AltLinux p10
Где взять исходники бинарных пакетов чтобы пересобрать их с GLIBC-2.32 ? Может быть у вас уже есть готовые варианты этих пакетов cобранных с GLIBC-2.32 ?
Предварительный образ AltLinux p10 по ссылке ниже. Список установленных пакетов см. в файлах packages-elvees.txt и packages-all.txt.
Для запуска образа AltLinux p10 с ядром 5.10 требуется обновлённый SBL (обновлён исходный код рецептов сборки sbl, ddrinit, tfa, u-boot). Коммиты пакетов перечислены в файле git-info.json. Исходные коды SBL в сборке Buildroot.
Ссылка на образы: https://box.elvees.com/index.php/s/9pgWwrtp9drTAmx
Прошу предоставить пакет бинарников mcom03-vpu-libs собранный с GLIBC 2.32.
В составе mcom03-altlinux-p10-rootfs-20230801.tar.gz установлен RPM-пакет mcom03-vpu-libs-202306.1.4e2132a-elv.alt1.aarch64. Данный пакет собран под glibc-2.32-alt5.aarch6.
В AltLinux p10 используется GLIBC 2.32, ваши бинарники собраны с GLIBC 2.34 - как они у вас заработали на ALTLinux p10 ?
У нас исходные коды драйверов, в AltLinux p10 мы компилируем бинарники с той версией GLIBC, которая установлена в AltLinux.
HOWTO: spidev в Buildroot для СКИФа
На примере исследовательской платы MCom03-BuB.
В файл linux-mcom03/arch/arm64/boot/dts/elvees/mcom03-bub-r1.3.0.dts
(dts-файл может поменяться) добавить:
&spi0 { status = "okay"; num-cs = <1>; cs-gpios = <&gpio0c 6 GPIO_ACTIVE_LOW>; spidev: spidev@0{ status = "okay"; compatible = "spidev"; reg = <0>; #address-cells = <1>; #size-cells = <0>; spi-max-frequency = <500000>; }; };
В сборке Buildroot включить пакет для Python, чтобы можно было запустить тестовый скрипт - python-spidev.
После этого в /dev/
должно появиться устройство вида /dev/spidev2.0
Для тестирования можно воспользоваться либо встроенной утилитой spidev-test (возможно ее нужно включить при конфигурации), либо самописной утилитой test_spi.py (код программы см. ниже).
Для проверки SPI необходимо соединить MISO и MOSI одним проводом (режим loopback).
test_spi.py
import argparse import spidev def freq_test(spi): send = bytearray(b"hello world") good_result = "hello world" kHz = 1000 MHz = 1000000 speeds = [ 10 * kHz, 30 * kHz, 100 * kHz, 300 * kHz, 1 * MHz, 3 * MHz, 10 * MHz, 30 * MHz, 40 * MHz, 50 * MHz, ] print("{:<15} {:<30}".format("Speed, Hz", "error_cnt")) for speed in speeds: i = 0 error_cnt = 0 while i < 10: ret = spi.xfer(send, speed, 0, 8) ret = "".join(chr(e) for e in ret) if ret != good_result: error_cnt += 1 i += 1 print("{:<15} {:<30}".format(speed, error_cnt)) def main(): parser = argparse.ArgumentParser( description="Script for SPI loopback test on different speeds. " "Required to connect MISO and MOSI by one wire. " ) parser.add_argument( "-p", "--port", default="/dev/spidev2.0", help="Spidev device (/dev/spidevX.Y)", ) args = parser.parse_args() spi_bus = int(args.port.replace("/dev/spidev", '')[0]) spi_device = int(args.port.replace("/dev/spidev", '')[-1]) spi = spidev.SpiDev() spi.open(spi_bus, spi_device) freq_test(spi) if __name__ == '__main__': main()
Результаты работы скрипта примерно следующие:
- python spi_test.py -p /dev/spidev2.0
Speed, Hz error_cnt
10000 0 30000 0 100000 0 300000 0 1000000 0 3000000 0 10000000 0 30000000 0 40000000 0 50000000 10