LINUX.ORG.RU

Сообщения wolverin

 

Где потеря RTP пакетов?

Форум — Admin

Приветствую.

Для проксирования видео с камер используется оборачивание в vpn (хотя это мне кажется не важно, т.к. проблема даже если просто запушить) и затем проксирование через mediamtx (он же rtsp-simple-server).

Канал условно гигабитный на этом видео шлюзе, если посмотреть видео напрямую с камеры проблем нет, как только прогнать через проксю - картинка либо тормозить (для мжпег), либо сыпется (для х264), но справедливости ради не всегда и не везде (особенно ночью улучшение существенное по качеству происходит).

Писал разработчику - отвечает ищи сам, у него все в шоколаде ((

Свой небольшой опыт мне говорит, что ртсп сервер занят какой то херней и не успевает пересылать полученные пакеты, т.к. входящий трафик примерно в 2 раза больше исходящего, хотя должно быть как минимум не меньше, а теоретически больше исходящий.

 ,

wolverin
()

Как посмотреть содержимое HTTP Accept-Encoding: gzip

Форум — Admin

Приветствую.

Пытаюсь разобраться, что происходит между чужими ПО сервера и клиента (не работает сервис после обновления). Сдампил rest обмен, ответ выглядит как

HTTP/1.1 200 OK
Date: Thu, 18 Apr 2024 09:52:54 GMT
Server: Apache/2.4.38 (Debian)
Set-Cookie: PHPSESSID=f0ifisf0j0nc8n662i85uevdv4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 5980
Connection: close
Content-Type: text/html; charset=UTF-8

...собсна тело...

есть способ увидеть его???

 ,

wolverin
()

RTSP публикация

Форум — Development

Приветствую all! ))

Итакс продолжаю изучать вопрос RTSP публикация надежна?

Вновь уточню, что требуется послать rtp только при запросе с rtsp сервера.

Поскольку в свое поделие rtsp сервера так же выполняю публикацию подготовленного видео потока (Как забирается RTP поток у сервера RTSP?), чтобы организовать отдельный поток сервиса с очередью через локальный интерфейс с его внешними буферами (все штатными либами ффмпега без заморочек про сдп, временные базы, синхронизации потоков и прочее), то запушил так же штатно на внешний халявный rtsp-simple-server, который выполняет роль видео прокси в чужом проекте (с мыслями его перепроектировать).

И значит в tcpdump такой обмен вижу после установления tcp подключения

- моя утилита
OPTIONS rtsp://имя_внешнего_хоста:слушающий_порт/блаблабла RTSP/1.0
CSeq: 1
User-Agent: Lavf59.25.100

- сервер
RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, ANNOUNCE, SETUP, PLAY, RECORD, PAUSE, GET_PARAMETER, TEARDOWN
Server: gortsplib

затем

- утилита
ANNOUNCE rtsp://имя_внешнего_хоста:слушающий_порт/блаблабла RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: Lavf59.25.100
Content-Length: 305

- сервер ответ 0 длины, видимо tcp-ое подтверждение доставки, которое вижу после каждой посылки

затем

- утилита
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 адрес_сервера
t=0 0
a=tool:libavformat LIBAVFORMAT_VERSION
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAKNoB4AiflmoCAgKAAAADAIAAAApHjBlQ,aM4NyA==; profile-level-id=42C028
a=control:streamid=0

- сервер
RTSP/1.0 200 OK
CSeq: 2
Server: gortsplib
Session: 545498661

затем

- утилита
SETUP rtsp://имя_внешнего_хоста:слушающий_порт/блаблабла/streamid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
CSeq: 3
User-Agent: Lavf59.25.100
Session: 545498661

- сервер
RTSP/1.0 200 OK
CSeq: 3
Server: gortsplib
Session: 545498661
Transport: RTP/AVP/TCP;unicast;interleaved=0-1

затем

- утилита
RECORD rtsp://имя_внешнего_хоста:слушающий_порт/блаблабла RTSP/1.0
Range: npt=0.000-
CSeq: 4
User-Agent: Lavf59.25.100
Session: 545498661

- сервер
RTSP/1.0 200 OK
CSeq: 4
Server: gortsplib
Session: 545498661

ПОСЛЕ этого поделие на основе либ ффмпега начинать слать RTP пакеты по ранее установленному TCP соединению на тот же порт.

т.е. как бэ сервер не говорит «публикации» PLAY только когда требуется, что кажется проблемой…

Что же делать как быть!?

 , , , ,

wolverin
()

Выделенный-облачный сервер где взять?

Форум — Admin

Приветствую.

На 1 ГБит/с БЕЗ тарификации по объему трафика.

Посоветуйте? В идеале где то на Урале-Сибири, чтобы время отклика минимальное получить.

Сейчас на timeweb плачу 8000 в месяц за выделенный E3-1230v5, 32 Гб RAM, 2 х 240 Gb SSD, но до них 40 мс только пинг ходит от меня.

 ,

wolverin
()

Пересжатие H264 с потерей кадров

Форум — Development

Приветствую.

Опять продолжение темы Запись сырого h264

Теоретический подсчет показал, что в сравнении с raw записью 1920х1080 MJPEG создающую нагрузку на носитель где то 1.2 Мб/c при 5 фпс, такая же запись H264 при 30 фпс создает поток где то 0.6 Мб/c, т.е. в принципе уже проверенную пропускную способность по записи укладываюсь, а вот с онлайн стримом вопрос.

Абсолютно точно придется пропускать кадры. Если для мжпег удалось сделать это очень равномерно, т.к. из очереди std::deque всегда брался для пересжатия из мжпег в х264 только последний кадр, то в случае с h264 нужно занусуть видео поток в канал где то до 2мбит/c, т.е. декодирование->масштабирование в 2-2.5 раза->сжатие. Все это делается на слабенькой arm пока без доступа к ядру гпу.

Первое что приходит в голову это подряд пересжимать кадры и сбрасывать очередь каждый раз при поступлении I кадра - да камера отдает I кадры каждую секунды и еще 29 P кадров, расстояние не большое, но «рывок» в конце каждой секунды все равно хоть как будет и скорее всего придется отбросить 2/3 кадров (по аналогии с мжпег пересжатием в х264).

Буду благодарен любой идее )

 , , ,

wolverin
()

Как забирается RTP поток у сервера RTSP?

Форум — Development

Приветствую.

Дошли руки для продолжения темы (RTSP публикация надежна?), но пока классический вариант освоить требуется.

Все это «ноу-хау» )) делаю на основе кода на С умершего ffserver от ffmpeg, в котором и реализован только сам RTSP (+html) сервер, а RTP протокол обернут в библиотеки ffmpeg-a - собсна что мне и нужно с одной стороны, но не дает понимание как там работает RTP.

С RTSP понятно - слушающий сокет, через который по входящим событиям (poll) парсится текст. После rtsp согласования открывается еще один (хотя в netstat вижу 2 для rtp и rtcp) слушающий сокет, в который начинают писаться кадры, обернутые в rtp и разбитые на udp/tcp пакеты (в первую очередь рассматриваю udp соединение).

Собсна из за непонимания как происходит RTP обмен вопросы

  1. rtp клиент запрашивает каждый раз новые данные или rtsp сервер просто пишет в сокет, пока в сокет rtsp не придет закрыть соединение?
  2. несколько причин есть очередного рефакторинга, но одна из них это в том, что rtsp клиент может отваливаться и не прислать teardown - с помощью чего подобное лучше отслеживать, исходить из того, что каждый rtsp клиент обязан периодически слать options и по таймауту закрывать сокеты?
  3. вся эта кухня делается на одноплатнике, который уже занят на 75% по процессору, а хочется не только отдавать больше одного видео потока как это сделано в ffserver, но еще и разные (последние создадут нагрузку только на чтение с флешки помимо сети для случая однотипных) - однопоточный RTSP/RTP сервер потянет такие задачи для случая до 10 соединений или лучше сразу разделять 2 протокола на 2 потока?

Пы.Сы. звиняйте за многа букав )

 , , ,

wolverin
()

mariadb 10.3.39 не меняются переменные из конфига

Форум — Admin

Приветствую

Некоторые изменения нужно внести в конфиг в частности innodb_buffer_pool_size хочу дефолтные поднять

написано так

:/etc/mysql/mariadb.conf.d# grep -v ^# 50-server.cnf

[server]

[mysqld]

user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql

bind-address            = 127.0.0.1


query_cache_size        = 16M

log_error = /var/log/mysql/error.log
expire_logs_days        = 10


character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

innodb_buffer_pool_size = 268435456


[embedded]

[mariadb]

[mariadb-10.3]

захожу в клиента смотрю после рестарта

MariaDB [(none)]> show variables like 'innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size       | 134217728      |
| innodb_buffer_pool_dump_at_shutdown | ON             |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_dump_pct         | 25             |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_instances        | 1              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | ON             |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 134217728      |
+-------------------------------------+----------------+

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

SET GLOBAL innodb_buffer_pool_size = 256000000;

 ,

wolverin
()

Подсчет потерь (алгоритм)?

Форум — Development

Приветствую.

Нуждаюсь в идеи )

Сцуть - есть 100500 железок в интернетах, которые раз в 10-15 минут опрашиваются, в БД в поле отправленных запросов пишу +1, когда ответ приходит (снимок) в БД в поле полученных ответов пишу +1 и дата-время последнего ответа

Вопрос - как посчитать АКТУАЛЬНОЕ количество потерь в % скажем за 10 или 100 опросов??? так чтобы не плодить количество записей

 

wolverin
()

No space left on device

Форум — Admin

Приветствую.

как такое может быть, что

# df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/mmcblk1p1   40M   12M   29M  30% /mnt/mmcblk0p1
/dev/mmcblk1p2  1.2G  1.1G     0 100% /mnt/mmcblk0p2
/dev/mmcblk1p3  2.5G  600M  1.9G  25% /mnt/mmcblk0p3

НО

# cp 512MB.swap /mnt/mmcblk0p3/
cp: cannot create regular file '/mnt/mmcblk0p3/512MB.swap': No space left on device

 , , , ,

wolverin
()

nftables для FQDN

Форум — Admin

Приветствую.

Раз уж приходится переходить с iptables, которое сабж не умеет, на nftables появилась такая возможность?

 ,

wolverin
()

Ламбда в списке инициализации конструктора ?

Форум — Development

Приветствую.

Сначала написал многа букв в вопросе, но решил спросить просто кодом раз уж всегда требуют его - почему через обычный метод AutoCommit выполняется раньше всех и все работает, а через лямбду нет ибо порядок инициализации не соблюдается???

class CParamsTXT
{
private:
    const bool bAutoCommit;
    IBPP::Transaction tr;
    IBPP::Statement st;
    CDefFile * pCfg;
    const string Typ, Section, id_bank;

    bool getAutoCommit(IBPP::Transaction tr)
    {
fprintf(stderr, "\n111 111\n");
        const bool rt = !tr->Started();
        if (rt) tr->Start();
        return rt;
    }

protected:
    string GetParam(string & param, string Field, string Ident, string Default = "")
    { ... }

public:
    const string DateFormat, DatePoint, DecPoint, codepage;
    vector<string> svF;
    const char cNote;

    CParamsTXT(CDefFile * pCfg_, IBPP::Transaction tr_, IBPP::Statement st_, string Typ_, string Section_, string id_bank_, string DateFormat_, string DatePoint_, string DecPoint_, string codepage_, string Note_)
    :
        bAutoCommit([](IBPP::Transaction tr_){
fprintf(stderr, "\n111 222\n");
            const bool rt = !tr_->Started();
            if (rt) tr_->Start();
            return rt;}),
//      bAutoCommit(getAutoCommit(tr_)),
        tr(tr_), st(st_), pCfg(pCfg_),
        Typ(Typ_), Section(Section_), id_bank(id_bank_),
        DateFormat(GetParam(DateFormat_, "date_format", "DateFormat", "d/m/y")),
        DatePoint(GetParam(DatePoint_, "date_point", "DatePoint", "/")),
        DecPoint(GetParam(DecPoint_, "dec_point", "DecPoint", ".")),
        codepage(GetParam(codepage_, "codepage", "codepage", "DOS")),
        cNote(GetParam(Note_, "note", "NoteTXT", "")[0])
    { }

 

wolverin
()

DHCP не обновляет BIND9

Форум — Admin

Приветствую.

Очередная проблема после поднятия версии Debian c 8 до 10: isc-dhcp-server перестал обновлять локальную зону на шлюзе, из ошибок вижу такие сообщения

Nov 22 12:23:34 server dhcpd[]: DDNS: cleaning up lease pointer for a cancel cb=0x557dffa84800
Nov 22 12:23:34 server dhcpd[]: Unable to add forward map from имяхоста.имядомена.ru to 192.168.xxx.xxx: operation canceled

в бинде вообще тишина, никаких запросов нет

Делал конфиг когда то под Debian 6 конечно, но все работало пока не обновился

# grep -v ^# dhcpd.conf

ddns-update-style interim;
ddns-updates on;
ddns-domainname "имядомена.ru";
do-forward-updates on;
update-static-leases on;
ignore client-updates;
update-conflict-detection false;

include "/etc/dhcp/dhcpd.key";

zone имядомена.ru {
    primary 192.168.xxx.2;
    key DHCP_UPDATER;
}

zone xxx.168.192.in-addr.arpa {
    primary 192.168.xxx.2;
    key DHCP_UPDATER;
}

option domain-name "имядомена.ru";
option domain-name-servers 192.168.xxx.2;

option local-pac-server code 252 = text;
option local-pac-server "http://proxy/proxy.pac\000";

default-lease-time 36000;       # 10h
max-lease-time 86400;           # 24h

authoritative;

log-facility local7;

shared-network имясети {
    subnet 192.168.xxx.0 netmask 255.255.255.0 {
        range 192.168.xxx.10 192.168.xxx.250;
        option broadcast-address 192.168.xxx.255;
        option routers 192.168.xxx.2;
        option ntp-servers 192.168.xxx.2;
        filename "pxelinux.0";
        next-server 192.168.xxx.1;
    }
}

host имя1 {
    hardware ethernet 52:54:00:8b:xx:xx;
    fixed-address 192.168.xxx.xxx;
}

пока гуглеж не помогает, может кто сталкивался?

 ,

wolverin
()

Импорт ключей gpg

Форум — Admin

Приветствую.

После поднятия версии Debian c 8 до 10 перестали работать ключи, пытаюсь по новой их импортировать - пишет ошибку

$ gpg --import PUBRING.PGP
gpg: Всего обработано: 2
gpg:         пропущено ключей PGP-2: 2

Тут конечно написаны такие ужасы

Some algorithms and parts of the protocols as used by the 20 years old PGP-2 software are meanwhile considered unsafe.

With GnuPG 2.1 all support for those keys has gone.

но что конкретно нужно сделать в этой ситуации не соображу, буду очень благодарен любой помощи.

 

wolverin
()

libvirtd не грузится

Форум — Admin

Приветствую.

После поднятия версии Debian c 8 до 10 не запускается виртуалка с ошибкой

libvirtd[9019]: /usr/sbin/libvirtd: symbol lookup error: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4: undefined symbol: libssh2_scp_recv2

либы стоят

# apt policy libssh2-1
libssh2-1:
  Установлен: 1.8.0-2.1+deb10u1
  Кандидат:   1.8.0-2.1+deb10u1
  Таблица версий:
 *** 1.8.0-2.1+deb10u1 500
        500 http://security.debian.org buster/updates/main amd64 Packages
        100 /var/lib/dpkg/status
     1.8.0-2.1 500
        500 http://mirror.yandex.ru/debian buster/main amd64 Packages

# apt policy libcurl3-gnutls
libcurl3-gnutls:
  Установлен: 7.64.0-4+deb10u7
  Кандидат:   7.64.0-4+deb10u7
  Таблица версий:
 *** 7.64.0-4+deb10u7 500
        500 http://security.debian.org buster/updates/main amd64 Packages
        100 /var/lib/dpkg/status
     7.64.0-4+deb10u2 500
        500 http://mirror.yandex.ru/debian buster/main amd64 Packages

гуглеж что то не помогает, подскажите в чем может быть проблема?

 ,

wolverin
()

Для чего alignas?

Форум — Development

Приветствую.

Про определение о требовании выравнивания читал конечно. Но таки как выбирается аргумент??? чтобы получить кучи прироста производительности )

Т.е. я например объявляю объекты как

alignas(64) std::atomic<size_t> tail;
alignas(64) std::atomic<size_t> head;

на xeon прирост в 2 раза, а на виртуалке можно считать погрешностью, но при 16 уже на виртуалке хоть и маленький, но таки -5% времени выполнения, при этом на процессоре падение.

 ,

wolverin
()

dkim pubkey_unavailable

Форум — Admin

приветствую.

савчера вдрух mail.ru начал мозги делать доставкой писем по поводу SPF, DKIM, DMARC

вроде все сделал по их инструкции https://help.mail.ru/postmaster/technical-settings/notes

добавил в bind9 3 записи вида

@       IN TXT "v=spf1 a mx ~all"
@       IN TXT "v=DKIM1; k=rsa; p=ПУБЛИЧНЫЙКЛЮЧ"
@       IN TXT "v=DMARC1; p=none"

поставил opendkim, прописал там соответственно место приватного ключа, в postfix сконфигрурировал на использование opendkim

один фих они пишут мне в заголовке

Authentication-Results: mxs.mail.ru; spf=pass (mx324.i.mail.ru: domain of ДОМЕН designates IPадрес as permitted sender) smtp.mailfrom=wolverin@ДОМЕН smtp.helo=mail.ДОМЕН;
	 dkim=invalid reason=pubkey_unavailable header.d=ДОМЕН
Received-SPF: pass (mx324.i.mail.ru: domain of ДОМЕН designates IPадрес as permitted sender) client-ip=IPадрес; envelope-from=wolverin@ДОМЕН; helo=mail.ДОМЕН;

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ДОМЕН; s=mail;
	t=1698894939; bh=JjZLfQmoespEUwGKuwbvnkkjWozy3SgKdtKb0xyF/W4=;
	h=Date:From:To:Subject:From;
	b=o+dgSgqvHNSmHZaJgs+9T6ErJ8sM8CMYLiaMRVgIZ4ED3hqE4yb/Vxy3x2j8Xb7qz
	 03wTwz4AFtmAR/UrSXjKSvCYiusvtSomimsWbUfvq/fNHhWZxLfQntnGEGO+RLTL+T
	 izuF0e1ptd/ZjmvrzBI5m9OZjQtoeLkLleP1vNLY=

User-Agent: Roundcube Webmail/1.2.3
X-DKIM-FAIL: DKIM test failed: invalid (address=wolverin@ДОМЕН domain=ДОМЕН reason=pubkey_unavailable).
X-Mailru-Src: mx
X-4EC0790: 10
X-6b629377: 1
X-7564579A: 646B95376F6C166E
X-77F55803: E822A06ED42C499A7F63DA2F9F2A54461ED951AC22C7845A9D1D1EE593088C900BBDAAE39103F3638701F0628C4B95CB650AB02DA031907FC423C6D7DB1CDA95F7F2529DD7A3558E4DF7BC4678047644
X-7FA49CB5: A9FCD207E66530D8A18204E546F3947C6807E7B3823913D9AFB8EE5BB20AF148C8A9BA7A39EFB7663CFE1401686631C009758206774B3CD2D5E8D9A59859A8B61831C2A8CBD9F7CA71492C2D3FF63AF69449624AB7ADAF37FD314BCFCDE4A234277E793F4B08E8842DAF2A56518EC330CC198E72ECD316A4BD9CCCA9EDD067B1FF0C04525729832C4E1E7243831EC1F578DA827A17800CE786D80B7E7735AB376320D30F47244B793CFE1401686631C082BFA309970D60C2B287FD4696A6DC2F5F5C1EE8F4F765FC04C22ED69F47F2D8B287FD4696A6DC2FA8DF7F3B2552694A4E2F5AFA99E116B42401471946AA11AF176DF2183F8FC7C086614E11AFA257BF8F08D7030A58E5ADC58D69EE07B1408453DF159EA87357C20A6AB1C7CE11FEE32FFDA4F57982C5F4B289B51CCB092ABD5571747095F342E8C234C8B12C006B7AAEC4162A2AA392DA8DFF822C4FED0E964788BA5126CA40DB8EEF46B7454FC60B9742502CCDD46D0DEDCF5861DED71B2F389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C078FCF50C7EAF9C588941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B601F8F2FECC0250C8CC7F00164DA146DA6F5DAA56C3B73B23E7726E8460B7C23C
X-C1DE0DAB: 0D63561A33F958A52EF6A6EFBDB43C8BA0F06EF541F76ED3AC0764A0D20A0778F87CCE6106E1FC07E67D4AC08A07B9B0A6C7FFFE744CA7FB9C5DF10A05D560A950611B66E3DA6D700B0A020F03D25A09EDCF5861DED71B2FF32E08699F8F45A1CDFF422315505062BA7CCD254A1CF5E833629329AA2D25E5
X-C8649E89: 1C3962B70DF3F0AD26C0D434D75DEB27F22D334B9B612B432CCB5A6D6581D03D0776B5B2C279835F17BCBE6708A5A68D02015372BE9702A20F84C43FA2038CDE3DE146DE6857D72CDEB7323C50A52AFEAC8CE95F42CF61090966F1585594D6159B815B7972F6FBBE7894B9023F5C129066BFC862880C174652EE4E5D9E54FDA44C41F94D744909CECE91D1F769AC3F588EBB7F9845D5049F9CB4C0EABAFD0B4C37E69C174A41D00C
X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr59cQFxbtK52nlS5dXYHM/vGJPPyhnCcOsWxjvstlFwfLDmG3SyZat9J5NbkWIjxq932/b2BQGyWkRn3AgzCpU/iMtBVD51WbvH0GkMdp0FX1YB//7MgRjFKDtzAHcKfpojwMUFqnUrer
X-F696D7D5: 1DeD6lt5UnY/fUsKeIs0lzdPoFv7BEpSOG24EIKoYNjqMV5tCw+fwA==

tcp порт 53 до бинда тоже открыл, так то письма ходят, но подскажите что этому майлу может быть еще нужно???

 

wolverin
()

Почему write(fd,..) висит?

Форум — Development

Приветствую

В продолжении темы Рестартануть драйвер как?

нашел как из консоли бесконечно количество раз рестартить драйвер

systemctl stop ***.service
echo spi0.0 > /sys/bus/spi/drivers/flexfb/unbind 
echo spi0.0 > /sys/bus/spi/drivers/flexfb/bind
systemctl start ***.service

делают тоже самое на сях как

static int setSPI(bool mode)
{
    const char
        * flexfb,
        spi[] = "spi0.0";

    if (mode)
    {
        flexfb = "/sys/bus/spi/drivers/flexfb/bind";
        fputs("Start spi device\n", stderr);
    }
    else
    {
        flexfb = "/sys/bus/spi/drivers/flexfb/unbind";
        fputs("Stop spi device\n", stdout);
    }

    int rt = -1;
    int fd = open(flexfb, O_WRONLY);
    if (fd > 0)
    {
        if ((rt = write(fd, spi, sizeof(spi))) <= 0)
            fprintf(stderr, "ERROR set SPI: %d %s [%s]\n", errno, strerror(errno), flexfb);
        close(fd);
    }
    else
        fprintf(stderr, "ERROR open %s: %d %s\n", flexfb, errno, strerror(errno));

    return rt;
}

уже без всяких systemctl просто запускаю и останавливаю приложение и в какой то момент на write(fd не снимаемая БЛОКИРОВКА

где может быть у меня косяк?

 , ,

wolverin
()

Рестартануть драйвер как?

Форум — Development

Приветствую

В продолжении темы Как рестартануть /dev/fb1 ???

как можно перезапустить из своего бинарника драйвер через ядро БЕЗ modprobe ???

 ,

wolverin
()

Как рестартануть /dev/fb1 ???

Форум — Linux-hardware

Приветствую.

Через /dev/fb1 с одноплатника реализовано подключение lcd экрана, который зараза по необъяснимым причинам иногда белеет.

Может есть способ не ребутить убунту для «сброса» внешнего устройства? В идеале бы еще узнать текущее состояние конечно.

Полагаю оно прячется где то в прерываниях, но как найти с которым связано?

cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
 16:          0          0          0          0     GICv2  25 Level     vgic
 17:          0          0          0          0     GICv2  50 Level     /soc/timer@01c20c00
 18:          0          0          0          0     GICv2  29 Level     arch_timer
 19:   90547909  139451125  142656932  143202842     GICv2  30 Level     arch_timer
 20:          0          0          0          0     GICv2  27 Level     kvm guest timer
 22:          0          0          0          0     GICv2 120 Level     1ee0000.hdmi, dw-hdmi-cec
 24:          0          0          0          0     GICv2 118 Level     1c0c000.lcd-controller
 25:          0          0          0          0     GICv2  82 Level     1c02000.dma-controller
 26:         25          0          0          0     GICv2  92 Level     sunxi-mmc
 27:      79801          0          0          0     GICv2  94 Level     sunxi-mmc
 28:          1          0          0          0     GICv2 103 Level     musb-hdrc.4.auto
 29:          0          0          0          0     GICv2 104 Level     ehci_hcd:usb1
 30:          0          0          0          0     GICv2 105 Level     ohci_hcd:usb2
 31:          0          0          0          0     GICv2 106 Level     ehci_hcd:usb3
 32:          0          0          0          0     GICv2 107 Level     ohci_hcd:usb6
 33:          0          0          0          0     GICv2 108 Level     ehci_hcd:usb4
 34:          0          0          0          0     GICv2 109 Level     ohci_hcd:usb7
 35:   85647492          0          0          0     GICv2 110 Level     ehci_hcd:usb5
 36:          0          0          0          0     GICv2 111 Level     ohci_hcd:usb8
 39:     624264          0          0          0     GICv2  63 Level     1c25000.ths
 41:     305355          0          0          0     GICv2 114 Level     eth0
 42: 3951995844          0          0          0     GICv2  97 Level     sun6i-spi
 45:        432          0          0          0     GICv2  32 Level     ttyS0
 46:     177618          0          0          0     GICv2  33 Level     ttyS1
 49:          0          0          0          0     GICv2  38 Level     mv64xxx_i2c
 50:          0          0          0          0     GICv2  39 Level     mv64xxx_i2c
 51:          0          0          0          0     GICv2  40 Level     mv64xxx_i2c
 52:          0          0          0          0     GICv2  72 Level     1f00000.rtc
106:          1          0          0          0  sunxi_pio_edge  44 Edge      usb0-id-det
129:          1          0          0          0  sunxi_pio_edge   3 Edge      k1
IPI0:          0          0          0          0  CPU wakeup interrupts
IPI1:          0          0          0          0  Timer broadcast interrupts
IPI2:   90852252  258982397  266588110  269015295  Rescheduling interrupts
IPI3:        760        582        624        629  Function call interrupts
IPI4:          0          0          0          0  CPU stop interrupts
IPI5:      88146      26774      27729      28640  IRQ work interrupts
IPI6:          0          0          0          0  completion interrupts
Err:          0

 ,

wolverin
()

Линковка extern вместо передачи указателя в C и С++?

Форум — Development

Приветствую.

Вынес кусок кода в отдельный hpp, который использую в разных проектах. Из этого куска передаю указатель на метод в методы разного функционала скомпилированные в разных объектниках как на Сях, так и на С++

Все работает, НО можно ли сделать внешнее связывание одновременно как для Си, так и для С++ в одном проекте???

Например, я объявляю метод в разном функционале

для С++ в hpp просто как

extern void func(void * ptr)

для Си в секции

#ifdef __cplusplus
extern "C" {
#endif

extern void func(void * ptr)

#ifdef __cplusplus
}
#endif

Куски конечно компилируются, но при попытке собрать все это дело

MQTT.h:12:13: error: conflicting declaration of ‘void func(void*)’ with ‘C’ linkage
 extern void func(void * ptr);
             ^~~~~~~~~~~
In file included from IntercomIP.cpp:24:0:
SIP.hpp:36:13: note: previous declaration with ‘C++’ linkage
 extern void func(void * ptr);

По всякому уже попробовал ) Собирается только если будет как объектник выделенного кода, так и сам код включен в компиляцию бинарника, выглядит конечно это бредово.

 , , ,

wolverin
()

RSS подписка на новые темы