LINUX.ORG.RU

Сообщения com

 

Обработчик Wake On Lan пакетов

Форум — Admin

Есть Odroid XU4, к нему есть пульт ДУ (USB ИК приёмник).

По кнопке Power пульта сейчас запускаются иксы с Kodi, а системный governor выставляется в performance. Соответственно, при повторном нажатии иксы с Kodi выключаются, а governor меняется назад в ondemand, чтобы оно лишний раз кулером не жужжало.

Надоело менять в пульте батарейки, да и ловит он так себе, решил попробовать пульт для kodi для Android. Всё классно, только не понятно как теперь с этого пульта запускать иксы. Пульт умеет посылать WOL пакет по кнопке включения.

Отсюда вопрос: не существует ли в природе сервера-обработчика WOL для уже запущенного устройства? Чтобы оно ловило WOL пакет и запускало произвольную команду из конфига? Пока нашёл только такое (для Ъ: там nc слушает 9 порт, а дальше парсятся пакеты на bash). Печатает в консоль при нажатии кнопки включения на Android пульте. Можно, конечно, попробовать оформить это в виде системного сервиса, но, по моему, выглядит как костыль.

 , ,

com
()

Дистрибутив для разработки gnome

Форум — General

Посоветуйте, пожалуйста, дистрибутив со свежим gnome 3.

Хочу отправить патч в mutter. Хочется иметь самый свежий gnome 3 чтобы этот патч протестировать. При этом хочется графический установщик системы и поддержку X11.

Ставить, скорее всего, буду на виртуалку.

UPD: Документацию не читай & время теряй. Для сборки gnome из исходников есть jhbuild, который позволяет собрать нужный компонент в домашней директории пользователя и запустить оттуда. Пробовал использовать на Ubuntu 16.04, но не прокатило, так как для сборки требуется достаточно свежий софт установленный в хостовой системе (в частности, gcc не ниже 6, в 16.04 5.4.0 по дефолту). В целом, rpm-based дистрибутивы для сборки подходят больше, так как jhbuild перед сборкой пытается установить необходимые для сборки пакеты, и в deb-based дистрибутивах ищет их через apt-file, что очень медленно.

 , ,

com
()

Содержит ли данный код UB? Попытка №2

Форум — Development
#include <iostream>
#include <memory>
#include <type_traits>
#include <cstddef>

//Public API

class Object;

class ObjectReferencePrivate;
class ObjectReference {
    friend class ObjectReferencePrivate;

private:
    ObjectReference() = default;
    void* operator new(std::size_t size);

public:
    Object & object() const;

    static void operator delete (void *p);
};

class Object {
protected:
    Object() = default;

public:
    void printHello() const;
    std::unique_ptr<ObjectReference> makeReference();
    virtual ~Object() = default;
};

std::unique_ptr<ObjectReference> makeObject();

// Implementation

static_assert(std::is_trivially_destructible<ObjectReference>::value, "ObjectReference must be trivially destructible");

class ObjectImpl: public Object {
public:
    ObjectImpl() = default;

    std::string mHelloString = "Hello!";
};

class ObjectReferencePrivate {
    friend class ObjectReference;

private:
    ObjectReferencePrivate() {
        new (&object) ObjectImpl;
    }

public:
    static std::unique_ptr<ObjectReference> makeReference()  {
        return std::unique_ptr<ObjectReference>(new ObjectReference);
    }

    ~ObjectReferencePrivate() {
        reinterpret_cast<ObjectImpl *>(&object)->~ObjectImpl();
    }

    int referenceCounter = 1;
    typename std::aligned_storage<sizeof(ObjectReference), alignof(ObjectReference)>::type q;
    typename std::aligned_storage<sizeof(ObjectImpl), alignof(ObjectImpl)>::type object;
};

static_assert(std::is_standard_layout<ObjectReferencePrivate>::value, "ObjectReferencePrivate must be standard layout");

Object & ObjectReference::object() const {
    const unsigned char * const_d_ptr = reinterpret_cast<const unsigned char *>(this) - offsetof(ObjectReferencePrivate, q);

    unsigned char * d_ptr = const_cast<unsigned char *>(const_d_ptr);

    ObjectReferencePrivate *d = reinterpret_cast<ObjectReferencePrivate *>(d_ptr);

    return *reinterpret_cast<ObjectImpl *>(&d->object);
}

void* ObjectReference::operator new(std::size_t) {
    return &(new ObjectReferencePrivate)->q;
}

void ObjectReference::operator delete (void *p) {
    unsigned char * d_ptr = reinterpret_cast<unsigned char *>(p) - offsetof(ObjectReferencePrivate, q);

    ObjectReferencePrivate *d = reinterpret_cast<ObjectReferencePrivate *>(d_ptr);

    std::cout << "Attempt to delete ObjectReference. referenceCounter is " << d->referenceCounter << "." << std::endl;

    if (--d->referenceCounter)
        return;

    std::cout << "Actualy deleting ObjectReference and object." << std::endl;

    delete d;
}

void Object::printHello() const {
    const std::string & helloString = static_cast<const ObjectImpl *>(this)->mHelloString;

    std::cout << helloString << std::endl;
}

std::unique_ptr<ObjectReference> Object::makeReference() {
    unsigned char * d_ptr = reinterpret_cast<unsigned char *>(this) - offsetof(ObjectReferencePrivate, object);

    ObjectReferencePrivate *d = reinterpret_cast<ObjectReferencePrivate *>(d_ptr);

    ++d->referenceCounter;

    return std::unique_ptr<ObjectReference>(reinterpret_cast<ObjectReference *>(&d->q));
}

std::unique_ptr<ObjectReference> makeObject() {
    return ObjectReferencePrivate::makeReference();
}

//Public API usage

int main(int argc, char* argv[]) {
    std::unique_ptr<ObjectReference> ref1 = makeObject();

    {
        std::unique_ptr<ObjectReference> ref2 = ref1->object().makeReference();
    }

    ref1->object().printHello();

    return 0;
}

Ссылка на предыдущее обсуждение

Этот код иллюстрирует то чего хочется достичь. Судя по тому что написано в стандарте, объект умирает после того как заканчивается вызов деструктора, если у него не тривиальный деструктор, или если записать что-либо в его память в противном случае (6.6.3 (1.3), (1.4)). В память объекта я не пишу, так что объект остаётся жить и после вызова delete. Условие что в delete expression можно сунуть только результат new expression тоже выполнено.

Хотелось обойтись без ObjectReferencePrivate в публичном API, но стандарт говорит что если статический и динамический типы объекта в delete expression различаются и нет виртуального деструктора, то UB (8.5.2.5 (3)).

Из минусов — operator new и delete в публичном API.

 

com
()

Содержит ли данный код UB?

Форум — Development
#include <iostream>

class B {
public:
    ~B() {
        std::cout << "Calling B destructor" << std::endl;
    }
};

class A {
public:
    A(int refCount):
        refCount(refCount)
    {}

    virtual ~A() {
        std::cout << "Calling A destructor" << std::endl;
        --refCount;
    }

    static void operator delete (void *p) {
        int refCount = reinterpret_cast<A *>(p)->refCount;

        std::cout << "Attempt to delete A, refCount is " << refCount  << std::endl;

        if (refCount)
            return;

        std::cout << "Actualy deleting A" << std::endl;
        ::operator delete(p);
    }

private:
    int refCount;
    B b;
};

int main(int argc, char* argv[]) {
    const int refCount = 4;

    A * a = new A(refCount);

    for (int i = 0; i < refCount; ++i) {
        delete a;
    }

    return 0;
}

Вывод:

Calling A destructor
Calling B destructor
Attempt to delete A, refCount is 3
Calling A destructor
Calling B destructor
Attempt to delete A, refCount is 2
Calling A destructor
Calling B destructor
Attempt to delete A, refCount is 1
Calling A destructor
Calling B destructor
Attempt to delete A, refCount is 0
Actualy deleting A

Содержит ли данный код undefined behaviour?

# clang++-5.0 -std=c++11 -fsanitize=undefined main.cpp
# ./a.out

говорит что всё хорошо.

 

com
()

USB to SATA переходник и неправильное количество logocal blocks

Форум — Linux-hardware
root@odroid:~# smartctl -i /dev/sda
smartctl 6.5 2016-05-07 r4318 [armv7l-linux-3.10.96-113] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family: Western Digital Caviar Green (AF)
Device Model: WDC WD10EARS-00Y5B1
Serial Number: WD-WCAV5F043852
LU WWN Device Id: 5 0014ee 2af751f72
Firmware Version: 80.00A80
User Capacity: 1 000 204 886 016 bytes [1,00 TB]
Sector Size: 512 bytes logical/physical
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS (minor revision not indicated)
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Thu Oct 13 12:30:11 2016 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

При этом

root@odroid:~# smartctl -i -d scsi /dev/sda
smartctl 6.5 2016-05-07 r4318 [armv7l-linux-3.10.96-113] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor: JMicron
Product: Generic
Revision: 0107
Compliance: SPC-4
User Capacity: 1 000 202 043 392 bytes [1,00 TB]
Logical block size: 512 bytes
LU is fully provisioned
Logical Unit id: 0x001b8c0000050309error: designator length
Serial number: WD-WCAV5F043852
Device type: disk
Local Time is: Thu Oct 13 12:30:36 2016 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Temperature Warning: Disabled or Not Supported
root@odroid:~# lsusb
...
Bus 004 Device 005: ID 152d:0567 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
...

Жёсткий диск является частью md зеркала. Зеркало изначально было подключено напрямую через SATA на материнской плате. Решил погасить, наконец, жужжащий и жрущий электричество домашний сервак на amd64 и перейти на arm. Arm — Odroid XU3, в который воткнуты переходники USB3 to SATA, однако, ядро неправильно определяет количество logical blocks, и из-за этого md не может собрать зеркало (у md метка в конце раздела). Попытка смонтировать раздел как чистый ext тоже не увенчалась успехом. Говорит, раздел больше диска.

Старенький преходник USB2 to SATA видит диск как надо. Если не найду решения — пересоберу raid заново в укороченом виде, но больно уж не хочется копировать данные туда-сюда.

Куда копать?

 ,

com
()

ODROID-XU3

Форум — Talks

http://www.hardkernel.com/main/products/prdt_info.php?g_code=G140448267127&tab_idx=2

Для Ъ: очередное одноплатное ARM ненужно.

Я так понимаю, что камень там достсточно мощный, чтобы не задумываться о всяких там аппаратных декодерах видео итд.

Видео — mali, значит должен быть нормальный (блоб) драйвер под онтопик.

Имеется 2 usb 3.0. В один думаю воткнуть жёсткий диск, во второй — гигабитную сетевуху. Спаять\купить пульт ду, поставить XBMC, подключить к телеку.

Вопрос для знатоков: стоит ли это чудо своих $179.00?

 ,

com
()

Display lists и несколько потоков

Форум — Development

Читал о том, что многопоточность не даёт особого прироста, когда рисуешь на OpenGL из-за переключения контекстов и однопоточной архитектуры видеодрайверов. А будет ли прирост, если в несколько потоков создавать дисплей листы, а затем вызывать их из основного потока?

 

com
()

Вопрос специалистам по видеоподсистеме линукс

Форум — Development

Итак, имеем хардварный декодер видео на ARM SoC (Cubieboard с CedarX). А каким образом запилить к нему драйвер?

Господа блобопрограммисты решили что нужно сделать устройство в /dev, и с помощью него мапить память в юзерспейсную блобобиблиотеку, управляющую этим самым декодером.

А как сделать по уму? А то я вот зареверсил кусочек этой самой библиотеки, и теперь думаю как лучше это дело реализовать.

com
()

А как данный код будет выглядеть на сишечке??

Форум — Development

Имеется вот такой код:

  ldr     r12, [r0]
  bic     r2, r12, #0xD
  orr     r1, r2, #2
  str     r1, [r0]

А чем это было на сишечке? В голову приходит только

int number;
number = number & 0xfffffff2 | 2;
, но компиляция и последующий objdump выдаёт бредню вида
  ldr     r3, [r7]
  bic     r3, r3, #0xF
  orr     r3, r3, #2
  str     r3, [r7]

 , ,

com
()

Драйвер для ir

Форум — Linux-hardware

Собственно, приехала ко мне cubieboard. Всё классно, только вот с LIRC/пультом она работать не хочет. Точнее с моим пультом. Там внутрях драйвера sun4i-ir написано собственное декодирование протокола пультов NEC. И всё.

Почитав исходники и разные мануалы понял, что половину LIRC уже давно перетащили в ядро. В частности декодировщики протоколов передачи пультов.

Есть так же в ядре и драйвер, который работает с GPIO и всеми этими классными декодировщиками. Называется gpio-ir-recv.

Внимание вопрос: Переписать существующий драйвер для ir так, чтобы он использовал декодировщики сигнала из ядра, или написать новый драйвер, который заставит контроллер IR прикидываться GPIO, и натравить на этот GPIO gpio-ir-recv?

Да, в hardware шарю не очень, так что сильно не пинать. Зарание спасибо.

cast AiFiLTr0

 

com
()

Qt и демоны

Форум — Development

Воспользовался Google - нашёл QtService. Он часть Solutions. Обработал напильником, научил сигналам.

Кроме QtService нашёл людей не понимающих зависимость демона от Qt. И вообще эти люди считают Qt толстой, и при этом кричат что нужно вовсю использовать boost. Но я же не тащу в демон QtGui!

А boost типа не толстый?

 ,

com
()

C, Pioneer и readdir()

Форум — Development

Сломал себе весь мозг и уже заработал нехилый butthurt.

Есть автомобильная магнитола от всеми известного производителя «Pioneer» c usb входом. Ещё есть подозрение что прошивку для неё писал некто криворукий.

Итак, к сути проблемы: есть у меня хороший и замечательный ipod, с которого магнитола играет музыку. Производитель хвастсается поддержкой iустройств, пеарится и повышает чсв.

Когда вставляешь в usb обычную флешку, магнитола её читает... Но вот незадача, файлы в директориях не сортируются. Ваабще никак.

Путём сравнительного анализа и прочей лабуды было выявлено, что директория скорее всего читается с-шной POSIX функцией readdir(), которая, естественно, не гарантирует алфавитного порядка читаемого списка файлов.

Предположение про readdir родилось после выявления на моей линуксовой машине такого же порядка файлов при использовании этой функции как и на магнитоле.

Вопрос в следующем - как заставить readdir читать в том порядке в котором я захочу? Доступа к прошивке магнитолы, естественно, нет.

 ,

com
()

Ноут и две звуковухи

Форум — Linux-hardware

Приобрёл себе ноут Samsung 530u3c. Поставил Ubuntu 12.04.

Всё в ноуте хорошо, но только мне показалось что маловато от батарейки живёт. Запустил powertop.

             Usage     Device name
             10,1%        CPU use
            100,0%        Аудиокодек hwC0D0: Realtek (pulseaudio )
            100,0%        Аудиокодек hwC0D3: Intel
             20,0%        Display backlight
             15,8%        Display backlight
              0,0%        USB Device: usb-device-8087-0024
              0,0%        USB device: EHCI Host Controller
               ...

Две звуковухи! Так ещё и если powertop крутить, то та которая от Realtek замечательно саспендится если выключить звук. Но та которая от intel - хрен. Звук идёт через Realtek.

Назревает воторос - нахрена две звуковухи? Как вырубить кчертям intel?

Заранее спасибо.

com
()

Samsung 530u3c

Форум — Talks

Думаю приобрести сие чудо. Есть ли счастливые (или не очень) обладатели?

Прочитал в характеристиках про 24 гига какого-то экспресс-кэша (для моделей без SSD). Он видится как отдельный раздел, или что это вообще такое? Где-то слышал про RAID-контроллер, который этим делом заправляет... Насколько он настраиваемый?

P.S. Хочу заменить им старенький помирающий Compaq mini 311c. Всё-таки решился попробовать что-либо более 12'. Ноут обычно всегда ношу с собой.

 опять ноутбуки

com
()

А нужно ли?

Форум — General

Столкнулся с проблемой, не знаю как решить.

Был у меня в домашнем уютненьком сервачке террабайтный винт. И всё было бы хорошо, если на нём бы не закончилось место. Не сильно долго думая прикупил ещё 2 террабайтника и настроил софтварный RAID зеркалом.

Хочется странного - у меня есть раздел с фильмами\музыкой на заполненном винче, и есть такой же на пустом (который с raid). Хочу чтобы самба отображала это дело под ожной шарой.

LVM не подходит, так как тогда теряется весь смысл зеркалирования второго винта. Если использовать символические ссылки - умрёшь держать всё это дело в синхронизованном виде.

В голову пришла мысль написать велосипед для FUSE, смонтировать и натравить на него самбу. Вопрос - а нужно ли, или есть готовые решения, и я просто плохо гуглил?

Перемещено mono из talks

 

com
()

Достала убунта

Форум — Talks

Бунта, склько помню, была отличным дистрибутивом, но с каждым релизом становилась всё хуже и хуже. И даже когда появился Unity по дефолту, я к нему привык, даже написал патч, который переносил launcher вниз экрана, и этим можно было пользоваться... Но не тут то было. Релиз 12.04 окончательно всё испортил. Мой ноут греется как сковородка, не работает suspend, отвалился VDPAU (он, конечно, и раньше плохо работал, но на фоне всего остального начало реально раздражать). И вот, после тщетных попыток починить VDPAU (Поковырявшись в исходниках mplayer я понял что во всём виноват compiz, который сжирает видеопамять и не даёт VDPAU нормально работать), я таки решился. Я поставил себе Debian Stable с дефолтным гномом, и понял что чтобы в этом работать надо пилить его напильником. Качаю федору.

Итак, ЛОР, посоветуй линукс с человеческим лицом, чтобы поставить, забыть и начать работать! А то пока я писал этот пост, у меня глаза вытекли от дефолтных дебиановских шрифтов.

PS: Кеды не предлогать, ибо уж очень у них поганая VFS.

 post-friday, ,

com
()

[специалистам по всему][электроника]Умножитель сопротивления?

Форум — Talks

Сразу говорю, в электронике полный нуб.

Охота сделать переходник для автомобильной магнитолы с поддержкой кнопок на руле.

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

Подскажите, пожалуйста, в какую сторону копать.

 ,

com
()

Как работает dlopen?

Форум — Development

Пишу прогу, требуется поддержка плагинов.

Вопрос следующего характера - на сколько тяжёл вызов dlopen? Думаю сделать кэш этих самых плагинов. Встал вопрос где хранить инфу о плагине - написать её в текстовом файле и хранить в зипе вместе с библиотекой плагина, или вкомпилить эту самую инфу в библиотеку и каждый раз подгружать библиотеку, добавлять инфу в кэш, после чего выгружать и загружать позже по надобности.

com
()

[среда][хочу странного] Роутер с одной сетевухой

Форум — Admin

Есть маленький домашний сервер с двумя сетевухами. В одну приходит pppoe от модема (настроен в bridge), На второй - dhcp сервер для локальной сети. Вторая сетевуха соединена со стареньким Asus WL-500g, настроенным как точка доступа (тупо бридж между Wi-Fi и встроеным свичём). Между двумя сетевухами настроен NAT.

Уже очень долго зреет мысль обновить маленький сервер, и воткнуть туда что-нибудь на атоме. Но вот проблемка - на большинстве мамок с вшитыми атомами - один pci порт всего, и тратить его на вторую сетевуху ну ооочень не хочется.

Долго и упорно читал про VLAN. Понял не очень много, но видимо эта штука PPPoE соединение пробросить не сможет. Или сможет? В связи с этим вопрос сетевым знатокам - возможно ли повторить существующую конфигурацию с одной сетевухой? Сервер из корня сети убирать совсем не хочется (хочу чтобы у него был белый ip).

 ,

com
()

Вышел Qt Creator 2.4.0

Форум — Talks
com
()

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