LINUX.ORG.RU

Избранные сообщения aol

Встречайте свободного убийцу MessagEase: 8VIM

 , , , ,

На самом деле это клон заброшенного проприетарного 8Pen, которому уже лет 10 в обед, ага.

Программа весьма сыровата, но в целом уже юзабельна, и метит в полноценную клавиатуру со всеми нужными хацкерам кнопками.

Буквально на днях случайно обнаружили, когда заглянули в F-Droid за Vi IMproved Touch :P

https://www.8vim.com/

cast --multiple @t184256, @Yareg, @Tweaker, @I60R, @zl0y, @vsn, @HerrWeigel

mertvoprog
()

Представлено MyCompany - бесплатное и открытое решение для небольшого бизнеса

 erp-системы, , mycompany, бизнес-приложения

Группа Open Source

Несколько дней назад было представлено открытое и бесплатное решение MyCompany, которое реализует основные бизнес-процессы малого бизнеса. Оно полностью бесплатно, выпускается под Apache лицензией, и ее исходники находятся на Github. Решение легко устанавливается и поддерживает российское законодательство.

В качестве системы управления базой данных используется PostgreSQL. На сервере решение устанавливается и запускается как Java приложение, состоящее из сервера приложений и веб-приложения под управлением Apache Tomcat. В качестве GUI может использоваться как веб-интерфейс, так и десктоп-клиент, запускающийся через Java Web Start.

Демо-версию с заполненными данными можно посмотреть по адресу https://demo.lsfusion.org/mycompany-ru. Авторизация по указанной ссылке отключена.

В решении реализован складской учет, управление заказами поставщиков и покупателей, учет платежей и задолженностей, фиксация производства и спецификаций, интерфейс POS, скидки, прайс-листы и многое другое.

Поддерживается несколько валют и собственных компаний. Реализованы печатные формы УПД, ТОРГ-12 и ТОРГ-13, интеграция с ЧЗ, КриптоПро, сервисом DaData.

Решение разработано на базе открытой и бесплатной платформы lsFusion (лицензия LGPL), имеет модульную архитектуру и легко дорабатывается под необходимые требования.

>>> Подробности (habr.com)

CrushBy
()

КриптоПро (cptools) не запускается у второго пользователя

 

Доброго времени суток.

На ПК установлена ОС AltLinux P9 с ISO alt-p9-cinnamon-20201212-x86_64.iso

На данный дистрибутив, по статье с wiki был установлен КриптоПро. Использован дистрибутив КриптоПро 5 (5.0.11455, последняя Сертифицированная версия КриптоПро CSP 5.0.11455 (Fury) от 8.05.2019) , полученный из личного кабинета КриптоПро. Была установлена ГУИ cptools (apt-get install cprocsp-cptools-gtk*).

На ПК сотрудники будут работать в несколько смен (не подразумевается одновременная работа, а поочередная работа пользователей, с авторизацией каждого пользователя под своей учетной записью).

После установки запускаем утилиту у пользователя «Пользователь1» через «Пуск» -> «Параметры» -> «Инструменты КриптоПро» - утилита cptools запускается, всё в порядке.
Заходим на данную машину под другим пользователем «Пользователь2», запускаем утилиту через «Пуск» -> «Параметры» -> «Инструменты КриптоПро» - утилита cptools НЕ запускается.
При попытке запуска у пользователя «Пользователь2» утилиты cptools через терминал видим вывод у терминале:

double free or corruption (top)
Аварийный останов

Запускаем у пользователя «Пользователь2» утилиту cptools воспользовавшись strace и видим, что cptools пытается обратиться к файлам в каталоге /var/opt/cprocsp/tmp/. Так как файлы уже созданы и владельцем созданных файлов является «Пользователь1», то у пользователя «Пользователь2» возникает ошибка «Операция не позволена (1)».

Если под пользователем «root» очистить каталог /var/opt/cprocsp/tmp/ от содержащихся файлов, то у пользователя «Пользователь2» утилита cptools успешно запустится, но при этом перестанет запускаться у пользователя «Пользователь1». Ну далее последовательность вы поняли.

Задал вопрос на форуме AltLinux - как бороться с данной проблемой, ответ пока не получил.
Задал вопрос на форуме КриптоПро - как бороться с данной проблемой, ответ так же пока не получил.

Кто-нибудь сталкивался с такой проблемой? Как можно вылечить данную ситуацию?

ivanlex
()

Анонс платы IcepeakITX ELBRUS-8CB

 ,

Группа Hardware and Drivers

Тихо и незаметно загадочная группа неустановленных лиц готовит к выходу ориентированную на безопасность материнскую плату на базе процессора Эльбрус-8СВ.

( читать дальше... )

>>> Подробности (crowdsupply.com)

alexanius
()

Существует ли альтернативный (неофициальный) open-source сервер Telegram?

 ,

Раз в Telegram свободный клиент и закрытый сервер, я подумал, а нет ли какого-либо решения для поднятия своего сервера Telegram?

Примерно та же ситуация (свободный клиент и закрытый сервер) в Second Life, для неё существует проект OpenSimulator. Правда, OpenSimulator различается по функциям с сервером Linden Lab, так, например, у клиента Firestorm раздельные версии для Second Life и OpenSimulator.

Интересно, есть ли подобное для Telegram?

Amaryllis
()

Чем сделать автоматическую трассировку

 , ,

Добрый день, ЛОР.

Судя по всему, я хочу какой-то гибрид из gdb, ltrace (и, возможно, valgrind).

gdb позволяет смотреть трассировку программы при попадании на точку останова.

ltrace выводит все вызовы библиотечных функций (но только библиотечных).

А можно ли каким-то инструментом (например, тем же gdb, но ни в мане, ни в «инструкциях от Васянов» я ничего похожего не нашёл) запустить свою программу и получить полный лог её хождения по собственным функциям от начала до конца? Без брекпойнтов, чтобы программа могла работать в условиях, максимально приближенных к боевым? Понятно, можно нашпиговать каждую функцию отладочным выводом на std::cout, но может, можно это как-то автоматизировать?

hobbit
()

Kickstarter-кампания с целью открытия исходного кода Sciter

 , , , sciter

Группа Проприетарное ПО

На Kickstarter идёт кампания по сбору средств с целью открытия исходного кода Sciter. Период проведения: 16.09-18.10. Собрано: $2679/97104.

Sciter — это встраиваемый кроссплатформенный движок HTML/CSS/TIScript, предназначенный для создания GUI к настольным, мобильным и IoT приложениям, который уже долгое время используют сотни компаний по всему миру. Все эти годы Sciter был проектом с закрытым исходным кодом - его создатель, Андрей Федонюк, был его единственным разработчиком. Но, кажется, настало время привлечь других разработчиков для развития легковесной альтернативы Электрону!

Цели:

  • Открыть исходный код Sciter ориентировочно через 2 месяца после успешного завершения кампании.
  • Вариант Sciter на JavaScript - это тот же движок, но с JavaScript вместо используемого TIScript. Цель состоит в том, чтобы запустить популярные JS-фреймворки как есть или с минимальными усилиями по переносу. На данный момент планируется использовать QuickJS, чтобы движок оставался как можно более компактным, но при необходимости можно будет использовать V8. В планах сделать альтернативу Electron в духе Sciter.Quark.
  • Sciter.JS Inspector - проводник DOM и отладчик скриптов. Интеграция Sciter с другими языками, в частности, Sciter.Go, чтобы компилятор Go мог создавать монолитные распространяемые файлы Go/GUI. Другие проекты, которые придумает сообщество.

Планируется выпустить Sciter под лицензией GPL.

Дополнительные цели: Если кампания соберет вдвое больше средств, чем заявлено, то Sciter будет опубликован под лицензией BSD.

Презентация архитектуры Sciter.

Как помочь открыть код:

  • пожертвовать на кампанию или/и
  • распространять информацию о кампании: HackerNews, Reddit, ...

>>> Подробности (kickstarter.com)

aserlor
()

почему команда dd пишет образ iso на флешку меньше чем за секунду?

 

размер 4 гига.

Zpp
()

репозиторий бинарных пакетов на git-хостинге

 ,

на каком сервисе лучше разместить несколько небольших репозиториев от 10 до 100 пакетов каждый? где выше скорость доступа? возможен ли бан? предполагается какой-нибудь gitignore и бамп раз в два-три месяца.

zombi_pony
()

Про qthread moveToThread

 ,

Возможно ли создавать воркер прямо уже в созданном и qthread или я хочу слишком многого?

Например сейчас создаю поток и рабочий объект в нем так:

    m_eThread = new QThread();
    m_eWorker = new Extractor();
    m_eWorker->moveToThread(m_eThread);

    connect(m_eWorker, &Extractor::errorString, this, &U::errorString);

    connect(m_eWorker, &Extractor::extractionFinished, m_eThread, &QThread::quit);
    connect(m_eWorker, &Extractor::extractionFinished, m_eWorker, &Extractor::deleteLater);
    connect(m_eThread, &QThread::finished, m_eThread, &QThread::deleteLater);

    connect(m_eWorker, &Extractor::initialized, m_eWorker, &Extractor::extract);
    connect(m_eThread, &QThread::started, m_eWorker, [this, fileName, destDir]() {
        QMetaObject::invokeMethod(m_eWorker, [this, fileName, destDir]() { m_eWorker->initialize(fileName, destDir); });
    });

    m_eThread->start();
    m_eThread->setPriority(QThread::LowPriority);

Наркоманская магия (не уверен что последний connect правильно написан) в двух последних connect нужна чтобы Extractor создавал свои обьекты уже будучи перемещенным в m_eThread.
Выделение всего в конструкторе Extractor же приведет что moveToThread сломает, например, QNetworkAccessManager.

Напичкав код qDebug() << __FUNCTION__ << thread(); можно увидить:

U::createExtractionThread QThread(0x229d1b66cf0)
Extractor::Extractor QThread(0x229d1b66cf0)
Extractor::initialize QThread(0x229d5552870)
Extractor::extract QThread(0x229d5552870)
Extractor::extractDir QThread(0x229d5552870)
Extractor::extractFile QThread(0x229d5552870)
bhfq
()

Сбор подписей в поддержку финансирования Фонда открытых технологий (Open Technology Fund, OTF)

 ,

Группа Open Source

Сотни организаций и тысячи частных лиц, имеющих непосредственное отношение к разработке открытого ПО или правозащитной деятельности, обратились к Конгрессу США с просьбой не лишать открытые проекты фонда OTF финансирования из бюджета. Опасения по этому поводу у подписантов вызвал ряд недавних кадровых решений президента США Дональда Трампа, в результате которых приоритетную поддержку могут получить решения с закрытым исходным кодом. Это негативно скажется на безопасности и доступности ПО.

Фонд открытых технологий выступает в роли посредника между правительством США и рядом проектов с открытым исходным кодом. С 2012 г. фонд получает государственное финансирование через Агентство США по глобальным медиа (US Agency for Global Media, USAGM) и раздает гранты проектам с открытым исходным кодом, целью которых декларируется «защита демократии и свободы слова по всему миру».

>>> Подробности (saveinternetfreedom.tech)

Lzzz
()

Посоветуйте аудиоплеер который может в webdav

 , , ,

Добрый день ЛОР. Собственно разыскиваю плеер могущий в webdav для интеграции с nextcloud, желательно на qt.

xaTa
()

Загрузка любого дистрибутива в RAM

 mkchrootrd,

Здравствуйте мои юные кали-хакеры и любители оставаться анонимными. С утра, ковыряя VDS (пользуюсь услугами ру-провайдера), [ДАННЫЕ УДАЛЕНЫ] запрос, и [ДАННЫЕ УДАЛЕНЫ] дамп диска [ДАННЫЕ УДАЛЕНЫ].

А теперь скрипт, который из кастомного, т.е. созданного и настроенного вами chroot'а создаёт initramfs образ, готовый к загрузке и работе в tmpfs.

С ним вы можете на любой системе прямо «на лету» свичнуться в tmpfs, хоть прямо сейчас, на своём компьютере. Предварительно установив в chroot любой дистрибутив по желанию и настроив его под себя. А потом скриптом упаковать его в initramfs образ и свичнуться, да.

Для создания минимального (от слова «маленький», а не «огрызок») образа потребуется squashfs-tools. Чтобы свичнуться «на лету» нужен kexec-tools. Установите их. В ядре должны быть включены опции: CONFIG_OVERLAY_FS=y, CONFIG_SQUASHFS=y и CONFIG_SQUASHFS_XZ=y. [личное мнение: ZSTD получается размером больше, чем XZ]

Например. Хотите генту?

# mkdir gentoo_chroot/
# cd gentoo_chroot/
# wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200519T155804Z/stage3-amd64-20200519T155804Z.tar.xz
# tar xf stage3-amd64-*.tar.xz
# rm stage3-amd64-*.tar.xz
# cd ..

На этом этапе мы получили ванильную генту в gentoo_chroot/. Рекомендую её настроить, хотя бы сделать chroot gentoo_chroot/ /bin/bash и установить passwd для root, иначе в систему вы не войдёте. Я не знаю, что это за особенность такая, не давать установить пароль если его нет. В моём CRUX когда пароль на root отсутствует и ты логинишься первый раз (в tty или в ssh по ключу), оно просто предлагает установить пароль. Какая тут может быть дыра в безопасности на свежеустановленной системе? Не знаю...

Предлагаю так же в gentoo_chroot/ скопировать модули и фирмварь для корректной работы текущего ядра и железа.

# cp -a /lib/modules gentoo_chroot/lib/modules
# cp -a /lib/firmware gentoo_chroot/lib/firmware

Ну и создадим образ наконец.

# ./mkchrootrd gentoo_chroot/ ~/gentoo_initrd

Усё. У нас теперь целая настоящая гента в gentoo_initrd файлике упакована. Давайте загрузимся же в неё скорее с текущим ядром.

# eval $(cat /proc/cmdline | cut -f 1 -d \ )
# kexec -l $BOOT_IMAGE --initrd=gentoo_initrd --reuse-cmdline
# kexec -e

Если вы не хотите делать kexec по каким-то причинам, то положите этот же образ в свой /boot, а в параметрах загрузки укажите initrd /gentoo_initrd. Перезагрузитесь и получите тот-же результат.

Ура! Гента загрузилась. Тоже самое можно проделать с любым дистрибутивом, просто установите его, настройте как вам угодно, а затем скриптом создайте initramfs образ. Я уж взял для примера Gentoo, не стал лишний раз приводить в пример CRUX.

Жмём Reset чтобы сбросить всё и загрузиться в свою систему с морально устаревшего M.2 NVMe накопителя обратно.

Перевёл свою VDS на работу в tmpfs. Диск /dev/vda отформатировал в NTFS. Рекомендую всем. 👍👍👍👍👍👍

Скрипт:

#!/bin/bash
#
# Author: Sp00f1ng <sp00f1ng@sp00f1ng.com>
# License: Public Domain
#
################################################################################
#
# mkchrootrd chroot_directory/ [initrd_image]
#
################################################################################
# 
# Depends on: squashfs-tools
# Optional:   kexec-tools
# Kernel:
#
# File systems  --->
#    <*> Overlay filesystem support
#    [*] Miscellaneous filesystems  --->
#       <*> SquashFS 4.0 - Squashed file system support
#          [*] Include support for XZ compressed file systems
#
################################################################################
#
# Example usage:
#
# mkdir gentoo_chroot/
# cd gentoo_chroot/
# wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200519T155804Z/stage3-amd64-20200519T155804Z.tar.xz
# tar xf stage3-amd64-*.tar.xz
# rm stage3-amd64-*.tar.xz
#
# [.. do something else with gentoo_chroot/ like additional configuration ...]
# [ cp -a /lib/modules ./lib/modules ]
# [ cp -a /lib/firmware ./lib/firmware ]
#
# cd ../
#
# ./mkchrootrd gentoo_chroot/ ~/gentoo_initrd
#
# eval $(cat /proc/cmdline | cut -f 1 -d \ )
# kexec -l $BOOT_IMAGE --initrd=gentoo_initrd --reuse-cmdline
# kexec -e
# 
# Have fun and happy hacking day 1 <3 <3 7 !

panic() {
	if [ -e "$TMP" ]; then
		rm -rf $TMP 2>/dev/null
	fi
	exit ${1:1}
}

got_help() {
	grep ^\# "$0"
}

got_cmdline() {
	while [ "$1" ]; do
		if [ ! -n "$CHROOT_DIR" ]; then
			CHROOT_DIR="$1"
			shift
			continue
		fi
		if [ ! -n "$INITRD_IMG" ]; then
			INITRD_IMG="$1"
			shift
			continue
		fi
		shift
	done
}

cp_bin() {
	local src="$1"
	local dst="$2"
	local dep=""

	if [ "$dst" = "" ]; then
		dst="$src"
	fi

	if [ -e "$TMP$dst" ]; then
		return
	fi

	install -D -m 0755 "$src" "$TMP$dst"

	for dep in $(ldd "$src" 2>/dev/null | grep -o '/.* '); do
		cp_bin "$dep"
	done
}

mk_env() {
	for dir in proc sys dev run mnt overlay; do
		install -d $TMP/$dir
	done

	for dev in console tty tty1 null; do
		cp -a "/dev/$dev" "$TMP/dev/$dev"
	done

	for bin in sh switch_root mount umount mkdir rmdir; do
		cp_bin "$(which $bin)"
	done

	touch $TMP/init
	chmod +x $TMP/init

	cat > $TMP/init << EOF
#!/bin/sh
mount -t proc none /proc
echo "0" > /proc/sys/kernel/printk
mount -t sysfs none /sys
mount -t devtmpfs devtmpfs /dev
mount -t tmpfs none /run
mount -t tmpfs tmpfs /overlay
lowerdir="/lower"
upperdir="/overlay/upper"
workdir="/overlay/work"
mkdir -p \$lowerdir
mkdir -p \$upperdir
mkdir -p \$workdir
mount -t squashfs -o ro /root.sqfs \$lowerdir
mount -t overlay -o ro,lowerdir="\$lowerdir",upperdir="\$upperdir",workdir="\$workdir" overlay /mnt
umount /proc
umount /sys
umount /dev
umount /run
exec switch_root /mnt /sbin/init
EOF
}

main() {
	CHROOT_DIR=""
	INITRD_IMG=""

	got_cmdline "$@"

	if [ ! -n "$CHROOT_DIR" ] || [ ! -n "$INITRD_IMG" ]; then
		got_help
		panic 0
	fi

	if [ ! -d "$CHROOT_DIR" ]; then
		echo "'$CHROOT_DIR' is not directory."
		panic 1
	fi

	if [ ! -x "$(which mksquashfs)" ]; then
		echo "'mksquashfs' squashfs-tools not found."
		panic 1
	fi

	mk_env

	mksquashfs $CHROOT_DIR $TMP/root.sqfs \
		-b 1048576 -comp xz -Xdict-size 100%

	cd $TMP
	echo "Building Initial RAM Disk [$INITRD_IMG]"
	find . -print0 | cpio --null --create --format=newc --verbose > "$INITRD_IMG"
	echo "Done [$INITRD_IMG]"
}

trap "panic" INT HUP QUIT TERM EXIT

readonly MKCHROOTRD_COMMAND="$0"
readonly MKCHROOTRD_VERSION="1.0"

TMP=$(mktemp -d)

main "$@"

# EOF
Spoofing
()

FlightGear 2020.1

 , ,

FlightGear 2020.1
Группа Игры

Вышла в свет версия 2020.1 свободного авиасимулятора FlightGear. Авиасимулятор разрабатывается с 1997 года и используется как фанатами авиасимуляторов, так и в учебных и научных целях в вузах или в качестве интерактивных выставок в различных музеях.

Улучшения после версии 2019.1:

  • Фреймворк рендеринга Compositor вынесен в отдельный бинарник.
  • Улучшена поддержка авианосцев.
  • Улучшены модели полётной динамики JSBSim и YASim.
  • Улучшены опции вида.
  • Улучшено отображение строений OpenStreetMap.
  • Обновлены модели Boeing 777, Airbus A320, Ан-24, F-16, Piper J3Cub, Saab JA37 Viggen, Piper PA28 Cherokee, Bombardier Q-400, Space Shuttle.

>>> Подробности (flightgear.org)

gedisdone
()

Golang book

 

Посоветуйте plz сабж, ну или какой-нибудь ресурс. Это https://tour.golang.org/welcome/1 прочел и базовые понятия есть, но хочется углубить знания. Спасибо!

dissident
()

Передача данных через DMA и PCIe

 , ,

Всем привет.

Подскажите пожалуйста, что я делаю не так.

Задача: передать массив данных в ПЛИС через PCIe и DMA.

Пока данные могу слать и читать с помощью ioread и iowrite, так же можно переслать через memcry, это говорит что девайс на pci жив и с ним можно работать, dma в пределах ПЛИСА так же отлично работает.

Вот теперь пытаюсь выделить кусок физической памяти в хосте, проинитеть его тестовыми данными (я просто решил её полностью заполнить константным значением), затем передать адрес этой памяти в pcie ПЛИСА и забрать от туда данные через dma (те pcie заберет по адресу данные, положит их к себе в выделенный бар (axi bar) и даст команду dma что можно забирать и складывать в ddr.

регистры ddr и pcie ПЛИСА так же пишутся, проверял. По всей видимости, косяк в коде.

Изначально область BAR0 (axi bar) со стороны ПЛИС обнулена, область для тестовых данных в DDR я тоже зануляю по включению питания. Когда шлю данные из хоста в BAR0 (axi bar) появляются странные, но достаточно не хаотичные цифры, но отличные от тех что шлю. Это говорит о том что что-то всётаки приходит из хоста.

Посмотрите пожалуйста код и подскажите что исправить.

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/dma-mapping.h>

#include "vi_cntr.h"

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Drakonof");
MODULE_DESCRIPTION("PCI");
MODULE_VERSION("0.1");
 

#define CDMA_BAR  0
#define PCI_BAR   1
#define DDR_BAR   2


#define DEVICE_NAME "drakonof_pci"

static dma_addr_t dma_handle = 0;
static void * dmabuf = NULL;
static volatile uint32_t *pci_reg_mem = NULL, *cdma_reg_mem = NULL;
static volatile uint32_t  *ddr_mem = NULL;
static resource_size_t cdma_start,cdma_len,pci_start,pci_len,ddr_start,ddr_len;


static struct pci_device_id vi_cntr_pci_id[] = {
{ PCI_DEVICE(VI_CNTR_VENDOR, VI_CNTR_ID), },
{ 0, }
};


MODULE_DEVICE_TABLE(pci, vi_cntr_pci_id);


static int vi_cntr_probe(struct pci_dev *pDev, const struct pci_device_id *id);
static void vi_cntr_remove(struct pci_dev *pDev);


static struct pci_driver vi_cntr_pci = {
    .name = DEVICE_NAME,
    .id_table = vi_cntr_pci_id,
    .probe = vi_cntr_probe,
    .remove = vi_cntr_remove
};


static int __init pci_init(void)
{
    struct pci_dev *p_pci_dev = NULL;

    if((p_pci_dev = pci_get_device(VI_CNTR_VENDOR,VI_CNTR_ID,                     p_pci_dev)) == NULL)
    {
        printk(KERN_NOTICE "PCI device not finded\n");
    }

    return pci_register_driver(&vi_cntr_pci);
}


static void __exit pci_exit(void)
{
    pci_unregister_driver(&vi_cntr_pci);
}


static int vi_cntr_probe(struct pci_dev *p_pci_dev, const struct pci_device_id *pId)
{
    u16 vendor = 0,
        id = 0;

    u32 i = 0;


    if(pci_enable_device(p_pci_dev))
    {
        printk(KERN_INFO "pci_enable_device error\n");
    }

    pci_read_config_word(p_pci_dev, PCI_VENDOR_ID, &vendor);
    pci_read_config_word(p_pci_dev, PCI_DEVICE_ID, &id);

    printk(KERN_INFO "\n----------------------------------\n");
    printk(KERN_INFO "Device vendor: 0x%X\nDevice id: 0x%X\n", vendor, id);

    cdma_start = pci_resource_start(p_pci_dev,CDMA_BAR);
    cdma_len = pci_resource_len(p_pci_dev,CDMA_BAR);
    pci_start = pci_resource_start(p_pci_dev,PCI_BAR);
    pci_len = pci_resource_len(p_pci_dev,PCI_BAR);
    ddr_start = pci_resource_start(p_pci_dev,DDR_BAR);
    ddr_len = pci_resource_len(p_pci_dev,DDR_BAR);

    if(pci_set_dma_mask(p_pci_dev, DMA_BIT_MASK(64)))
    {
        printk(KERN_INFO "pci_set_dma_mask error.\n");
        return -1;
    }


    if((dmabuf=dma_alloc_coherent(&p_pci_dev->dev,8192,&dma_handle,GFP_USER)) == NULL)
    {
        printk(KERN_INFO "dma_alloc_coherent error.\n");
        return -1;
    }

    if(pci_request_regions(p_pci_dev, DEVICE_NAME))
    {
        printk(KERN_INFO "pci_request_regions error.\n");
        return -1;
    }

    pci_set_master(p_pci_dev);

    if((cdma_reg_mem = ioremap(cdma_start,cdma_len)) == NULL)
    {
        printk(KERN_INFO "ioremap pci_reg_mem error.\n");
        return -1;
    }

    if((pci_reg_mem = ioremap(pci_start,pci_len)) == NULL)
    {
        printk(KERN_INFO "ioremap pci_reg_mem error.\n");
        return -1;
    }

    if((ddr_mem = ioremap(ddr_start,ddr_len)) == NULL)
    {
        printk(KERN_INFO "ioremap pci_reg_mem error.\n");
        return -1;
    }

    // здесь я заполняю массив для передачи константой
    dma_sync_single_for_cpu(&p_pci_dev->dev, dma_handle, 8192, DMA_TO_DEVICE);
    for(i = 0; i < 256; i++)
    {
        *(u32*)(dmabuf + i)= 0xABCDEF89;
    }
    dma_sync_single_for_device(&p_pci_dev->dev, dma_handle, 8192, DMA_TO_DEVICE);

    // передаю адрес выделенной физической памяти в pcie ПЛИСА
    pci_reg_mem[0x208/4]=(dma_handle >> 32);
    pci_reg_mem[0x20c/4]=(dma_handle & 0xFFFFFFFF);

    // заполняю регистры cdma ПЛИС
    cdma_reg_mem[0x18/4]=0x30000000; // из BAR0 (axi bar)
    cdma_reg_mem[0x20/4]=0x80000000; // в ddr
    // передать 256 байт, это так же запускает копирование 
    // данных из BAR0 (axi bar) в ddr
    cdma_reg_mem[0x28/4]=256;

    // жду статуса конца передачи от cdma
    i = 0;
    while(!(cdma_reg_mem[0x4/4] & 0x2))
    {
        if(i == 100000)
    { 
        printk(KERN_INFO "SR ERR %X\n",cdma_reg_mem[0x4/4]);
        break;
    }
        else i++;
    }

    iounmap(pci_reg_mem);
    iounmap(cdma_reg_mem);
    iounmap(ddr_mem);
    pci_release_regions(p_pci_dev);
    pci_disable_device(p_pci_dev);
    dma_free_coherent(&p_pci_dev->dev, 8192, dmabuf, dma_handle);

  return 0;
}

Спасибо!

Drakonoff
()

Осваиваемся с Vulkan

 , , , ,

Примерно за пол-года вроде как разобрался с Vulkan.

Пишу сейчас рендерер плагин для своего графического движка

https://gitlab.com/KawaiiGraphics/KurisuRenderer

После OpenGL, для которого всё есть GLint либо GLuint, очень порадовала типизация. Также командные буферы – действительно крутая вещь – в них мало того, что можно писать из нескольких потоков (хотя и с ограничениями), так ещё и записанные однажды, они могут использоваться многократно! Возможность обеспечить более полную загрузку железа с меньшим временем на ожидание вертикальной синхронизации, например, через явное управление очередями тоже впечатляет.

В общем Vulkan в целом мне зашёл. Но есть несколько «но».

Во-первых непонятно зачем перекорёжили гомогенные координаты – ось y зачем-то направили вниз, а глубину и вовсе загнали в интервал от 0 до 1, вместо -1 до 1. Насколько я понимаю, то как направлены оси, в общем-то, ни от чего не зависит. Просто решили, что они направлены вот так и всё. А потому не ясно зачем было менять их – если бы оси были направлены как в OpenGL, можно было бы кормить Vulkan теми же матрицами и мешами, что и OpenGL без всяких плясок с бубном в шейдерах. Ну да ладно, направили оси иначе и направили.

Во-вторых и в главных – SPIRV. В OpenGL замечательная система шейдерных модулей, для которых компиляция отделена от линковки, которая позволяет приложению конструировать шейдерные программы (а в последних версиях OpenGL стадии) из функциональных взаимозаменяемых блоков. Совершенно не ясно, зачем было её херить :( В Vulkan стадии стали неделимыми, так ещё и бинарными. У нас всё ещё графический API и ли какой-нибудь уродский .NET с промежуточным байт кодом? Видимо разработчикам движков так ненавязчиво предлагается иметь некоторый набор заданных заранее семейств материалов и не давать пользователям в руки шейдеры в принципе? Но это же дно-о-о. Мы так в 90-е – 00-е вернёмся, когда был только фиксированный графический конвейер – и всё. В 20-х у нас будет чуть больше моделей освещения/затенения, парочка интересных эффектов водной поверхности, огня и т.д. Но всё так же никакой гибкости.

В общем будущее светло, но не безоблачно. Многопоточный рендеринг, кеширование сцен и возможность безбубенной многооконности, сияют, превращая ночь в день, а днём затмевая Солнце; а маячащая на горизонте возможность multi GPU через DMABUF звучит как гимн разума и изобретательности :D Но отношение Khronos к шейдерам, как минимум, настораживает..

Кто уже тоже успел повулканить? Что думаете о наступившем будущем?

robus
()

Программный MCU сервер для видео конференций

 ,

Есть в природе нормальный опенсорсный, либо халявный MCU для SIP-клиентов ? Нагрузка будет небольшая, до 4 терминалов.

ovax
()

Принцип работы webrtc?

 

Где можно найти подробное описание?
Вот браузер отправляет запрос к серверу по tcp.
Ответ идет с ip stun сервера к которому браузер подключается по udp, чтобы получить свой внешний ip?
Что потом?

yoholo
()

Ядро Linux в Eclipse CDT

 , ,

Решил открыть в последнем (4.14) Eclipse CDT проект на C, использующий Makefile в свободной форме.

Что ж, проиндексировалось и открылось всё весьма быстро и, как видно, сам Eclipse в памяти занимает меньше 1 ГБ. И да, я могу вручную (ни о каком автоопределении целей, как это умеет remake, речи не даже идёт) добавить произвольные цели make (make targets) и собрать их (см. окно «Build Targets» справа).

Но на этом плюсы заканчиваются.

Eclipse не обрабатывает Makefile’ы и не строит базу данных компиляции в процессе создания проекта и потому индексирует тупо всё, что попадётся под руку. Это значит, что список включённых в проект файлов (часть модулей же обычно исключена из .config), равно как и #define’ы, ему априори неизвестны, и ни о каком точном рефакторинге говорить нельзя.

Более того, часть (включённого) кода в редакторе «сияет красным», и мне сообщают об ошибках, которых нет. Так, на снимке на 324-й строке fs/btrfs/async-thread.c Eclipse не может определить тип переменной work, хотя и ежу понятно, что это тип struct btrfs_work *, и этот тип определён в лежащем рядышком хедере. При попытке навигации к объявлению переменной work (хотя это локальная переменная в btrfs_work_helper()) мне предлагается 100500 кандидатов, разбросанных по всему проекту (диалог Open Declaration).

Вердикт – текстовый редактор, не более. Я, как давний пользователь и поклонник Eclipse, реально разочарован.

Несколько обязательных комментариев:

  • WM – WindowMaker
  • Тема оформления GTK3 – Greybird. К сожалению, только в «штатных» темах Adwaita, Greybird и Numix Eclipse выглядит удовлетворительно (в силу того, что разработчики SWT сделали ряд «хаков» для поддержки этих конкретных тем оформления), хотя, напр., поля ввода по-прежнему выглядят гигантскими. Сами разработчики рекомендуют попробовать отключить вышеупомянутые «хаки» (-Dorg.eclipse.swt.internal.gtk.noThemingFixes, см. bug 527729) и включить Clearlooks-Phénix, но, на мой взгляд, там работы ещё непочатый край: кнопки панели инструментов становятся раза в полтора больше и «уезжают» вправо.
  • Да, ШГ. Да, «кровь из глаз». Да, я всё это уже не раз слышал.
Bass
()