понедельник, 8 апреля 2024 г.

1 Wire на OrangePi Zero3

lsb_release -a

Distributor ID: Debian

Description:    Debian GNU/Linux 12 (bookworm)

Release:        12

Codename:       bookworm

-------------------------------------------------------------------------------------------------------------
Создаем текстовый файл dts с содержимым
-------------------------------------------------------------------------------------------------------------

/dts-v1/;

/ {
        compatible = "allwinner,sun50i-h616";

        fragment@0 {
                target = <0xffffffff>;

                __overlay__ {

                        w1_pins {
                                pins = "PC09";
                                function = "gpio_in";
                                phandle = <0x1>;
                        };
                };
        };

        fragment@1 {
                target-path = [2f 00];

                __overlay__ {

                        onewire@0 {
                                compatible = "w1-gpio";
                                pinctrl-names = "default";
                                pinctrl-0 = <0x1>;
                                gpios = <0xffffffff 0x2 0x09 0x0>;
                                status = "okay";
                        };
                };
        };

        __symbols__ {
                w1_pins = "/fragment@0/__overlay__/w1_pins";
        };

        __fixups__ {
                pio = "/fragment@0:target:0", "/fragment@1/__overlay__/onewire@0:gpios:0";
        };

        __local_fixups__ {

                fragment@1 {

                        __overlay__ {

                                onewire@0 {
                                        pinctrl-0 = <0x0>;
                                };
                        };
                };
        };
};
------------------------------------------------------------------------------------------------------------

Далее нужно обновить конфигурацию дерева устройств и задать номер pin, который будет слушать наш драйвер.  Использовал pin PC9 - gpios 0x2 (C третья буква)

пример конвертации файлов dtb или dtbo в dts и обратно.

# apt-get install device-tree-compiler
# cd /boot/orangepi
# dtc -b 0 -O dts -I dtb -o any.dts any.dtb # dtb -> dts
# редактируем наш dts
# dtc -b 0 -O dtb -I dts -o any.dtb any.dts # dts -> dtb(o)

dtc -b 0 -O dtb -I dts -o sun50i-h616-w1-gpio.dtbo sun50i-h616-w1-gpio.dts


в /boot/orangepiEnv.txt добавлена только строка, возможно и не нужна.

overlays=w1-gpio

в /etc/modules ничего не добавляется.

воскресенье, 28 августа 2022 г.

Проброс портов через socat

apt install socat

socat tcp-l:4000,reuseaddr,fork /dev/mydev/Com1,raw,echo=0,b115200 2>1 1>/dev/null&

Через TCP порт 4000, скорость 115,2 кбит/с

socat tcp-l:4001,reuseaddr,fork /dev/mydev/Com2,raw,echo=0,b2400,cs8,parenb=1 2>1 1>/dev/null&  

Команды для контроля

ps aux | grep socat

суббота, 27 августа 2022 г.

DotNET установка на ARM скриптом

Установка dotnet через скрипт. На 25.12.20233 будет установлен уже NET8

curl -sSL https://dot.net/v1/dotnet-install.sh | sudo bash /dev/stdin --channel LTS --runtime aspnetcore --install-dir /usr/share/dotnet/

где LTS это с долговременной поддержкой, можно Current использовать, типа текущая версия.

--runtime aspnetcore  — установка только runtime ASP.NET Core

Чтобы установить версию 6 требуется указать ее явно

curl -sSL https://dot.net/v1/dotnet-install.sh | sudo bash /dev/stdin --version 6.0.25 --runtime aspnetcore --install-dir /usr/share/dotnet/


Добавить путь по необходимости  

export PATH="$PATH:/usr/share/dotnet

или ссылку 

sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet




пятница, 21 февраля 2020 г.

Правила UDEV для фиксирования имен COM портов в Linux

Используя несколько преобразователей USB-RS485 может происходить переименование портов ttyUSB0 в ttyUSB1 и так далее, если мы их включаем или выключаем.
Всех тонкостей не помню, но большую часть параметров можно посмотреть используя команду
dmesg | grep usb

Для фиксации имен COM портов можно использовать правила udev, вот некоторые из них:

1. Адаптер USB-RS485 на чипсете CH340, у меня файл называется 99.ch340.com3.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ATTRS{devpath}=="1.3", SYMLINK+="mydev/Com3", GROUP="plugdev"

Привязка идет к номеру USB Raspberry Pi - ATTRS{devpath}=="1.3"

2. Адаптер на чипсете PL2303, файл 99.pl2303.com2.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{devpath}=="1.4", SYMLINK+="mydev/Com2", GROUP="plugdev"

Привязка идет к номеру USB Raspberry Pi - ATTRS{devpath}=="1.4"

3. Адаптер  EL204-4   USB-RS485(232) чипсет FTDI с серийным номером

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="AH001HE3", SYMLINK+="mydev/Com1", GROUP="plugdev"

В данном случае в папке /dev  создается папка mydev и симлинки с моими именами COM портов. Использую так же как в Winde COM с номером.

Ну, куда положить правила udev найти не трудно... 

"слямзил на просторах"
------------------------------------------------------------------------------------------------------------------

По сути для того, чтобы создать стабильный алиас для устройства достаточно одной строки:

 ACTION=="add",ENV{ID_BUS}=="usb",ENV{ID_SERIAL}=="usb_serial",SYMLINK+="ttyUSBPort4"

ttyUSPPort4 - это будущее имя устройства, оно, как и все, будет в /dev/

а вот на ID_SERIAL остановимся чуть подробнее:

цитируя udev wiki: "To get definitive information of the device you can use either ID_SERIAL or ID_SERIAL_SHORT". Так что на самом деле для идентификации годятся 2 параметра.

Посмотреть их можно так:

udevadm info /dev/ttyUSBX - где X номер вашего устройства.

-------------------------------------------------------------------------------------------------------------------

Перезапуск правил без reboot

# udevadm control --reload-rules && udevadm trigger