LINUX.ORG.RU

Сообщения CYB3R

 

Makefile: пересобрать цель, если один из файлов изменился

Форум — Development

Есть такой мейкфайл:

RES = resources.xml

${RES:.xml=.c}: ${RES}
	glib-compile-resources ${RES} --target=$@ --generate-source
А resources.xml содержит:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/my">
    <file compressed="true" preprocess="xml-stripblanks">a.ui</file>
    <file compressed="true" preprocess="xml-stripblanks">b.ui</file>
    <file compressed="true" preprocess="xml-stripblanks">c.ui</file>
  </gresource>
</gresources>
Проблема в том, что при изменениях в a.ui, b.ui и c.ui и запуске make, resources.c не пересобирается, так как изменений в resources.xml не было.
Хочу сделать так, чтобы resources.c генерировался заново при любых изменениях в a.ui, b.ui или c.ui.

Подошёл бы даже вариант типа такого (если бы он работал):
RES = resources.xml
UI = a.ui b.ui c.ui

${RES:.xml=.c}: ${RES} ${UI}
	glib-compile-resources ${RES} --target=$@ --generate-source

 , , ,

CYB3R
()

Протокол для простого девайса

Форум — Development

Есть девайс с простым GSM-модемом (настолько простым, что нет даже AT-команд на HTTP, только на TCP).
Есть сервер. На сервере крутится openresty (nginx+lua).
Задача — читать сенсоры с девайса, по команде из веб-интерфейса помигать светодиодом.
Как это разумнее всего сделать? Мне сейчас приходит в голову только очень простой метод: девайс постоянно совершает HTTP 1.0 запросы к серверу и отправляет данные с сенсоров. Сервер отвечает «OK». Если вдруг нужно помигать светодиодом, сервер отвечает не «OK», а «LED». На что в следующем запросе девайс отвечает, что успешно мигнул, на сервере флаг мигания светодиодом убирается и приходит обычное «OK».
Плохо придумал? Тупо? Нужно городить какие-нибудь веб-сокеты?

 , , , ,

CYB3R
()

Let's Encrypt без Python

Форум — Admin

Сабж возможен? Кто-то уже делал?

 , , , ,

CYB3R
()

Первый канал вещает в HLS

Форум — Talks

Сабж.
Макоюзеры, пожалуйста, запустите Safari и дайте прямую ссылку на стрим! Надо же как-то Путина в новогоднюю ночь смотреть.

 , , , ,

CYB3R
()

Cisco EPC3008

Форум — Linux-hardware

Привет, ЛОР!
Есть один DOCSIS-модем. На коробке написано, Cisco EPC3008, но прошивка у него явно кастрированная. Модем долго работал без нареканий, но сейчас эта падла взяла привычку терять линк (возможно, перезагружаться?) и нехорошо себя вести.
Снял крышку, понял, что радиатор на нём очень горячий. Подпаялся к UART, найти который оказалось несложно, подобрал baudrate, но в самом начале модем перестаёт слать на UART что либо и причину странного поведения я установить не могу. Как получить с него dmesg (или что у него там?).
Вот всё, что приходит на UART:

BCM338211 TP0 
1
Sync:1 
346890
MemSize:             64 M

SA BootLoader Version: 2.3.1_R3 Pre-release Gnu spiboot reduced DDR drive
Build Date: Nov 10 2010
Build Time: 17:41:25
Setting SPI device 0 to clock 0
Setting SPI device 0 to clock 7
SPI flash ID 0xef4016, size 4MB, block size 64KB, write buffer 256, flags 0x0

Signature/PID: a03a

Image 1 Program Header:
   Signature: a03a
     Control: 0005
   Major Rev: 0003
   Minor Rev: 0010
  Build Time: 2013/6/10 07:13:35 Z
 File Length: 1583713 bytes
Load Address: 80004000
    Filename: e3000-v302r125573-130606c.bin
         HCS: f303
         CRC: fc47b239


Found image 1 at offset 20000

Enter '1', '2', or 'p' within 2 seconds or take default...
. . 

Performing CRC on Image 1...
CRC time = 58392967
Detected LZMA compressed image... decompressing... 
Target Address: 0x80004000
decompressSpace is 0x4000000
Elapsed time 1057692601

Decompressed length: 7524996

Executing Image 1...


 eCos - hal_diag_init
Init device '/dev/BrcmTelnetIoDriver'
Init device '/dev/ttydiag'
Init tty channel: 80730cf8
Init device '/dev/tty0'
Init tty channel: 80730d18
Init device '/dev/haldiag'
HAL/diag SERIAL init
Init device '/dev/ser0'
BCM 33XX SERIAL init - dev: 0.2
Set output buffer - buf: 0x807b1870 len: 4096
Set input buffer - buf: 0x807b2870 len: 4096
BCM 33XX SERIAL config
Init device '/dev/ser1'
BCM 33XX SERIAL init - dev: 0.3
Set output buffer - buf: 0x807b3870 len: 4096
Set input buffer - buf: 0x807b4870 len: 4096
BCM 33XX SERIAL config

[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitStorageDrivers:  (BFC Target) Configuring/Loading Flash driver...
[00:00:00 01/01/1970] [tStartup] BcmSpiFlashDevice::DetectFlash:  (SPI Flash Device Factory) WARNING - Detected SPI flash with JEDEC ID =0xef4016
[00:00:00 01/01/1970] [tStartup] FlashDeviceDriver::SpiFlashPlaceRegions:  (Flash Driver C API) WARNING - Permanent NonVol would fit in the boot block of this flash device, but I found existing NonVol in the following block; using this location instead...
[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitStorageDrivers:  (BFC Target) Loading BootloaderStore driver...
[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitStorageDrivers:  (BFC Target) Loading ProgramStore driver...
ProgramStoreDeviceDriver::ProgramStoreDriverInit:  INFO - Initializing...
[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitStorageDrivers:  (BFC Target) Loading NonVol driver...
[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitStorageDrivers:  (BFC Target) Storage drivers initialized successfully.
[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitDeviceAbstractions:  (BFC Target) Creating singletons for ProgramStore/BootloaderStore/NonVol devices...
Detecting the next image number that we will store to by default...
Bootloader indicates we are running image 1
By default, we will dload to image number 2!

[00:00:00 01/01/1970] [tStartup] BcmBfcStdEmbeddedTarget::InitDeviceAbstractions:  (BFC Target) Device abstraction singletons created successfully.

SAHttpCacheVariables::GetSingletonInstance:  WARNING - the singleton instance is NULL, and someone is accessing it!
Setting up the SAHttpCacheVariables singleton pointer.
CmSnmpNonVolSettings::GetSingletonInstance:  WARNING - the singleton instance is NULL, and someone is accessing it!
BcmCmSANonVolSettings::GetSingletonInstance:  WARNING - the singleton instance is NULL, and someone is accessing it!

Reading Permanent settings from non-vol...
Checksum for permanent settings:  0x32e49c9d
Settings were read and verified.


Reading Dynamic settings from non-vol...
Checksum for dynamic settings:  0x6d11a767
[00:00:00 01/01/1970] [tStartup] Bc

 , ,

CYB3R
()

Секретный лагерь по подготовке фанатов Microsoft

Форум — Talks

Наткнулся на замечательную картинку. На ней представлены скриншоты из личного кабинета продавца-консультанта в крупной сети.
Это подозрительно напоминает нелегальные секты маркетологов (типа кофе Органо Голд и подобного).
Война с мелкомягкими за десктоп заранее проиграна.

 , ,

CYB3R
()

Обновил ядро, корень не монтируется

Форум — General

GRUB2, initramfs нет.

[    0.823767] VFS: Cannot open root device "PARTUUID=cf1ed5c5-02" or unknown-block(254,2): error -19
[    0.824225] Please append a correct "root=" boot option; here are the available partitions:
[    0.824827] fe00           53760 vda  driver: virtio_blk
[    0.825413]   fe01            4096 vda1 cf1ed5c5-01
[    0.825947]   fe02           49152 vda2 cf1ed5c5-02
[    0.826505] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(254,2)
[    0.826956] Kernel Offset: disabled
[    0.827306] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(254,2)
В шесть утра трудно понять, что я сделал неправильно. Может, какой-то параметр ядра забыл?

 , , , ,

CYB3R
()

OpenWRT build system

Форум — General

Как собирают OpenWRT? У них ведь какая-то своя сборочная система?
Я много раз собирал (качал исходники, запускал make, тот мне открывал menuconfig, а потом сам всё компилил ­­— хорошо!), но никогда не вникал в процесс.
Пакеты, насколько я знаю, там описываются мейкфайлами, потом сами выкачиваются, кросскомпилируются. Писал я один раз такой мейкфайл, ничего особо сложного.
Насколько сам процесс кастомизируемый? Можно как-то выкинуть из системы вообще всё и начать с нуля? Например, ну не нужен мне procd. Получится обойтись как-то без него? Или что не собирай, получится OpenWRT? А можно заюзать clang+musl вместо gcc+uClibc?
В идеале хочется кросс-компилять свою систему реально удобно реально под себя (читай Gentoo^W LFS) без особого геморроя. Билдрут не советовать.

 , , ,

CYB3R
()

CAD для GNU/Linux

Форум — Science & Engineering

Нужен простой CAD (желательно на GTK+). Цели: laser cutter и 3D printer. Для лазерной резки попробовал Inkscape: все координаты приходится вычислять относительно начала листа и относительно начала фигуры (так трудно было сделать нулевые координаты круга в центре этого круга?), чтобы нарисовать правильный пятиугольник сначала нужно пару листов бумаги исписать вычислениями координат его углов. Короче, очень сложно. Для 3D-печати хочу использовать Blender. Сойдёт?
Что посоветуете?

 , , , ,

CYB3R
()

Установлен ли в вашей системе Flash Player?

Голосования — Голосования

Ещё один опрос об установленном на ваших компьютерах ПО. Сейчас почти всё в вебе работает без установки проприетарных плагинов, однако многие пользователи по привычке до сих пор устанавливают себе Adobe Flash Player

  1. Да, установлен flash-plugin 621 (52%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. Нет, ничего для проигрывания флеш-роликов у меня не установлено 307 (26%)

    **************************************************************************************************************************************************************

  3. Да, установлен pepper-flash-plugin 252 (21%)

    *********************************************************************************************************************************

  4. Нет, но установлен свободный аналог (gnash, lightspark, etc) 20 (2%)

    **********

Всего голосов: 1200

 , , , ,

CYB3R
()

ARM Chromebook

Форум — Talks

Раз уж моё желание (относительно дешёвый, тонкий и лёгкий ноутбук с пассивным охлаждением и без HDD) сейчас почти несбыточное, решил посмотреть на армовые буки.
У кого ноуты на армах, делитесь годными моделями, рассказывайте о подводных камнях и проблемах с установкой любимого дистрибутива.

 , , ,

CYB3R
()

STM32 и прерывания

Форум — Development

Ковыряю сейчас STM32 с libopencm3. Попытался расширить пример usart_irq (наверное, нужно было ещё посмотреть на usart_irq_printf, но его я пока не открывал). Теперь у меня есть буфер для отправки и для приёма строк.
Кода не очень много, потому, думаю, можно выложить весь.

#include <string.h>
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/usart.h>
#include <libopencm3/cm3/nvic.h>

#define BS 16           // buffer size (number of strings)

char request[256];      // string to send to modem
char response[BS][256]; // last BS strings received from modem
int row, ch;            // number of string and last character received from modem
uint8_t last = 'A';     // last character received from modem
int step = 0;

static void clock_setup(void) {
    rcc_clock_setup_in_hse_8mhz_out_72mhz();

    /* Enable clocks for GPIO port A (for GPIO_USART1_TX) and USART1. */
    rcc_periph_clock_enable(RCC_GPIOA);
    rcc_periph_clock_enable(RCC_AFIO);
    rcc_periph_clock_enable(RCC_USART1);
}

static void usart_setup(void) {
    /* Enable the USART1 interrupt. */
    nvic_enable_irq(NVIC_USART1_IRQ);

    /* Setup GPIO pin GPIO_USART1_RE_TX on GPIO port A for transmit. */
    gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ,
              GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART1_TX);

    /* Setup GPIO pin GPIO_USART1_RE_RX on GPIO port A for receive. */
    gpio_set_mode(GPIOA, GPIO_MODE_INPUT,
              GPIO_CNF_INPUT_FLOAT, GPIO_USART1_RX);

    /* Setup UART parameters. */
    usart_set_baudrate(USART1, 115200);
    usart_set_databits(USART1, 8);
    usart_set_stopbits(USART1, USART_STOPBITS_1);
    usart_set_parity(USART1, USART_PARITY_NONE);
    usart_set_flow_control(USART1, USART_FLOWCONTROL_NONE);
    usart_set_mode(USART1, USART_MODE_TX_RX);

    /* Enable USART1 Receive interrupt. */
    USART_CR1(USART1) |= USART_CR1_RXNEIE;

    /* Finally enable the USART. */
    usart_enable(USART1);
}

static void gpio_setup(void) {
    gpio_set(GPIOA, GPIO1);

    /* Setup GPIO1 (in GPIO port A) for LED use. */
    gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ,
              GPIO_CNF_OUTPUT_PUSHPULL, GPIO1);
}

static void wait(void) {
    int i;
	for (i = 0; i < 800000; i++)	/* Wait a bit. */
		__asm__("nop");
}

static int row_num(int n) {
    // use this function to get correct row offset
    // row_num(0) - latest row, row_num(1) - second latest row, etc.
    int r = row - n;
    if (r < 0) {
        return r + BS;
    } else {
        return r;
    }
}

static void action_select(void) {
    if (strcmp(response[row], "OK") == 0) {
        gpio_toggle(GPIOA, GPIO1);
        wait();
        gpio_toggle(GPIOA, GPIO1);
        wait();
        gpio_toggle(GPIOA, GPIO1);
        wait();
        gpio_toggle(GPIOA, GPIO1);
    } else if (strcmp(response[row], "ERROR") == 0) {
        gpio_toggle(GPIOA, GPIO1);
        wait();
        gpio_toggle(GPIOA, GPIO1);
    } else if (strcmp(response[row], "PRINT") == 0) {
        int i;
        strcpy(request, "\r\n");
        for (i = 0; i < BS; i++) {
            char num[5] = { '[', i < 10 ? '0' + i : 'A' + i - 10, ']', ':', ' ' };
            strcat(request, num);
            strcat(request, response[row_num(i)]);
            strcat(request, "\r\n");
        }
    }
}

static void set_send(void) {
    /* Enable transmit interrupt so it sends back the data. */
    USART_CR1(USART1) |= USART_CR1_TXEIE;
}

static void unset_send(void) {
    /* Disable the TXE interrupt as we don't need it anymore. */
    USART_CR1(USART1) &= ~USART_CR1_TXEIE;
}

static void send(void) {
    if (request[0] != 0) {
        int i = 0;
        uint8_t s = '0';
        while (s = request[i++], s != 0) {
            usart_wait_send_ready(USART1);
            usart_send(USART1, s);
        }
        usart_wait_send_ready(USART1);
        usart_send(USART1, '\r');
        // new line here should be commented out in production
        usart_wait_send_ready(USART1);
        usart_send(USART1, '\n');
        request[0] = 0;
    } else {
        // echo last char back (should also be commented out in production)
        usart_wait_send_ready(USART1);
        usart_send(USART1, last);
        if (last == '\r') {
            usart_wait_send_ready(USART1);
            usart_send(USART1, '\n');
        }
    }

    unset_send();
}

static void receive(void) {
    /* Retrieve the data from the peripheral. */
    last = usart_recv(USART1);

    response[row][ch] = last;
    if (response[row][ch] == '\r') {
        response[row][ch] = '\0';
        action_select();
        if (ch > 1) row++;
        ch = 0;
        if (row == BS) row = 0; 
    } else if (response[row][ch] != '\n') {
        ch++;
    }

    set_send();
}

void usart1_isr(void) {

    /* Check if we were called because of RXNE. */
    if (((USART_CR1(USART1) & USART_CR1_RXNEIE) != 0) &&
        ((USART_SR(USART1) & USART_SR_RXNE) != 0)) {
        receive();
    }

    /* Check if we were called because of TXE. */
    if (((USART_CR1(USART1) & USART_CR1_TXEIE) != 0) &&
        ((USART_SR(USART1) & USART_SR_TXE) != 0)) {
        send();
    }
}

static void send_request(char *str) {
    strcpy(request, str);
    send();
}

int main(void) {
    clock_setup();
    gpio_setup();
    usart_setup();

    gpio_set(GPIOA, GPIO1);
    send_request("HELLO\r");

    /* Wait forever and do nothing. */
    while (1)
        __asm__("nop");

    return 0;
}
И всё работает:
HELLO

OK

ERROR



PRINT
[0]: PRINT
[1]: ERROR
[2]: OK
[3]: 
[4]: 
[5]: 
[6]: 
[7]: 
[8]: 
[9]: 
[A]: 
[B]: 
[C]: 
[D]: 
[E]: 
[F]: 


А как теперь сделать простой вопрос-ответ? Например, плата говорит «HELLO», я отвечаю «WORLD», плата отвечает «TRUE» и включает светодиод. Довольно просто.
Я подумал, что достаточно после инициализации в main добавить следующее:
    gpio_set(GPIOA, GPIO1);
    send_request("HELLO\r");

    while (strcmp(response[row_num(0)], "WORLD") != 0)
        __asm__("nop");

    gpio_clear(GPIOA, GPIO1);
    send_request("TRUE\r");
Но нет. Таким образом прерывания срабатывают, эхо на терминале я получаю нормально, но цикл никогда не завершается и функция вывода последних значений попортилась:
HELLO
WORLD
PRINT
[0]: 
     PRINT
[1]: 
     WORLD
[2]: 

[3]: 

[4]: 

Призываю в тред Eddy_Em, ncrmnt, KivApple, RiseOfDeath. И подскажите форум, где такие вопросы не будут оффтопиком.

 , , ,

CYB3R
()

PoWiFi

Форум — Science & Engineering

Использовал кто-нибудь? Буду признателен, если поделитесь схемой.

 , , , ,

CYB3R
()

Алгоритмы

Форум — Development

Посоветуйте список простых типовых алгоритмов (сортировка, поиск, сжатие, хеширование, шифрование, генерация лабиринтов/кроссвордов).

 , , , ,

CYB3R
()

Firefox Hello not logging in

Форум — Desktop

У меня одного эта фигня? Как лечить?

 ,

CYB3R
()

Объясните, где я налажал

Форум — Development

Есть у меня «умные» RGB-светодиоды — WS2812. Сейчас тыкаю STM32 с libopencm3.
Проблема в том, что светодиоды светят только белым (255, 255, 255). Полагаю, что все нули, которые я им посылаю, интерпретируются как единицы. Вероятно, у меня какие-то проблемы с таймингами.
Светодиоды запитаны от блока питания 5V, микроконтроллер от 3.3V, земля общая.
Код:

#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>

int t0h = 3; // 0.375us (0.35±0.15us datasheet)
int t1h = 6; // 0.750us (0.70±0.15us datasheet)
int t0l = 7; // 0.875us (0.80±0.15us datasheet)
int t1l = 5; // 0.625us (0.60±0.15us datasheet)

void clock_setup() {
    rcc_clock_setup_in_hse_8mhz_out_72mhz();

    /* Enable GPIOA clock. */
    rcc_periph_clock_enable(RCC_GPIOA);
}

void gpio_setup() {
    /* Set GPIO3 (in GPIO port A) to 'output push-pull'. */
    gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ,
              GPIO_CNF_OUTPUT_PUSHPULL, GPIO3);
}

void sleep(int cycles) {
    int i;  
    for (i = 0; i < cycles; i++)
        __asm__("nop");
}

void send_h() {
    gpio_set(GPIOA, GPIO3);
    sleep(t1h);
    gpio_clear(GPIOA, GPIO3);
    sleep(t1l);
}

void send_l() {
    gpio_set(GPIOA, GPIO3);
    sleep(t0h);
    gpio_clear(GPIOA, GPIO3);
    sleep(t0l);
}

void main() {
    clock_setup();
    gpio_setup();

    while (1) {
        int led, bit;
        for (led = 0; led < 5; led++) {
            // green
            for (bit = 0; bit < 8; bit++) {
                    send_l();
            }
            // red
            for (bit = 0; bit < 8; bit++) {
                    send_h();
            }
            // blue
            for (bit = 0; bit < 8; bit++) {
                    send_h();
            }
        }

        sleep(400); // tres
    }
}
cast ncrmnt, так как у него светодиоды из той же партии

 , , , ,

CYB3R
()

Клиент MSSQL (можно консольный)

Форум — Admin

Посоветуйте сабж. Не могу найти ничего вменяемого.
Дали мне какой-то connection string с логином и паролем. Порт 1433, я так понимаю, у них там MSSQL.

 , , ,

CYB3R
()

Какие тулкиты установлены у вас в системе?

Голосования — Голосования

Сейчас это особенно актуальный вопрос для всех тулкитофобов — GNOME в стандартной поставке всё ещё требует GTK+2, Firefox переходит на GTK+3, а GIMP как-то не спешит переходить, некоторые программы переносят с Qt4 на Qt5, но многие до сих пор остаются на Qt4.
Давайте узнаем статистику, какие версии каких популярных тулкитов установлены у пользователей LOR.

  1. gtk2, gtk3, qt4, qt5 664 (49%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. gtk2, gtk3, qt4 197 (15%)

    **********************************************************************************************

  3. Только gtk2 и gtk3 108 (8%)

    ****************************************************

  4. Только qt5 53 (4%)

    *************************

  5. gtk3, qt4, qt5 48 (4%)

    ***********************

  6. gtk2, gtk3, qt5 46 (3%)

    **********************

  7. gtk2 и qt4 36 (3%)

    *****************

  8. gtk3 и qt5 36 (3%)

    *****************

  9. Только gtk2 33 (2%)

    ***************

  10. Только gtk3 33 (2%)

    ***************

  11. Только qt4 и qt5 32 (2%)

    ***************

  12. gtk3 и qt4 26 (2%)

    ************

  13. gtk2, qt4, qt5 23 (2%)

    ***********

  14. Только qt4 13 (1%)

    ******

  15. gtk2 и qt5 7 (1%)

    ***

Всего голосов: 1355

 , ,

CYB3R
()

Вычисление местоположения модема

Форум — General

Как можно при помощи GSM/GPRS узнать, где физически находится устройство? Особая точность не нужна, достаточно только узнать, какой ближайший город.
Есть GPRS-модем, у него есть два IP-адреса: внешний и внутренний. Попробовал узнать местоположение при помощи geoip, используя внешний IP, показывает только страну.
Есть возможность какой-либо геолокации с таким раскладом? Может, есть какая-нибудь хитрая AT-команда для этого? Или USSD?
Или без GPS мне не обойтись?

 , , , ,

CYB3R
()

Firefox 42: full-screen-api поломали

Форум — Desktop

Раньше установка full-screen-api.approval-required в false убирала назойливое сообщение «is now fullscreen». В Firefox 42 это вдруг перестало работать (зато красивые переходы добавили).
На форумах советуют создать ключ full-screen-api.warning.enabled, но он ни на что не влияет.
Больше нет возможности убрать это сообщение? Придётся свой css для этого писать?

 , , , ,

CYB3R
()

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