LINUX.ORG.RU

Сообщения pasifus

 

Шифрование дисков/разделов/файловой системы

Есть поделка которая завернута в докер и бежит у клиента на PC-linux (без монитора и клавиатуры). Клиент все настраивает через веб страницу. (то есть физический доступ к пс ему не нужен).

Задача: защитить поделку от реверс инжиниринг. (то есть просто шифрование с паролем при запуски линукса не подходит)

Что можете посоветовать? если что сильно не пинать :)

 , , , ,

pasifus
()

Хочу возможность firmware на своем девайсе

Имеется miniPC (маленькая коробачка) с интелевским процем. Таких miniPc много и раскиданы по клиентам (вторкнута в сетку и электрон сеть. без экрана. как встроенный девайс). На коробке бежит ubuntu server и docker. В docker бежит наша аппликация которая общается с сервером постоянно. До сих пор вроде как все устраивало, но появилась задача расширить функционал.

Что хочется:

Возможность обновить систему на новую/старую версию. (аналогия firmware на разных роутерах и других девайса)

Посоветуйте пути решения этой задачи. Уверен есть уже готовых решение, но подходящего не нашлось.

Нужно:

1. Простота использование для пользователя. (подходит как в роутера. загрузил версию и через веб интерфейс обновил)

2. Надежность. Если что то пошло не так. Надо возможность вернутся на заводские настройки. (данные хранятся на диски. понимаю что технический он может посыпаться, но мы не рассматриваем этот вариант на данный момент)

 , ,

pasifus
()

Аппаратное вычисление и gstreamer

Народ кто возится с аппаратным вычислением на embedded напарьте на истинный путь. Имеется камера. Там linux и есть к нему SDK. У них есто API и библиотеки для всякой всячины. Я там посмотрел маленько и обнаружил что они пользуются gstreamer. В общем стало понятно, что они пользуются аппаратным ускорением для h265/mjpeg encode и stream конечно(ну там наверно еще разной всячиной). Я задумался об использовании возможность аппаратного ускорения в собственных целях, но как понятно они ни где не документируют как и что. Задача в общем сделать jpeg encoder пользуясь встроенным аппаратным ускорением. Следовательно встает вопрос если это возможно и если да, то так определить что за возможности есть. Вообще хотелось бы покопаться что да как, но мало познаний в том как обычно прикручивают его к linux (было дело работал с TI SDK), да и с самим gstreamer только начел работать.

Так что принимаются любые поучения.

 

pasifus
()

ffmpeg library оптимизация декодирование H.264 для встраемых систем

Привет сообществу

Встала задача производить декодирование H.264 на mips32 1004K (700MHz). Скачал ffmpeg и прокомпилировал компилятором mips32 (флаги акселераторов выключил). Накидал простинький код для проверки максимальной скорости декодирование видео из файла (HD 720p). После прогона слегка удивился. Всего ~4 fps. На домашней виртуалки было ~200 fps (i686 100MHz)

Вот сижу теперь чешу репу. Кто-то может объяснить где ступил. А может у кого то были подобные задачи и есть какие-то интересные решения.

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

Вот код что запускал:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>

#include <sys/time.h>
#include <time.h>

#include "libavcodec/avcodec.h"
#include "libavutil/mathematics.h"

#define INBUF_SIZE 80000


static long get_time_diff(struct timeval time_now) {
   struct timeval time_now2;
   gettimeofday(&time_now2,0);
   return time_now2.tv_sec*1.e6 - time_now.tv_sec*1.e6 + time_now2.tv_usec - time_now.tv_usec;
}

int main(int argc, char **argv)
{
    AVCodec *codec;
    AVCodecContext *c= NULL;
    AVCodecParserContext *parser = NULL;
    int frame, got_picture, len2, len;
    const char *filename;
    FILE *f;
    AVFrame *picture;
    char *arghwtf = malloc(INBUF_SIZE);
    uint64_t in_len;
    int pts, dts;
    struct timeval t,t2;
    float inv_fps = 1e6/23.98;
    AVPacket avpkt;

    // register all the codecs
    avcodec_register_all();

    // log level
    av_log_set_level(AV_LOG_PANIC|AV_LOG_FATAL|AV_LOG_ERROR|AV_LOG_WARNING);

    filename = argv[1];

    av_init_packet(&avpkt);

    printf("Decoding file %s...\n", filename);

    // find the H.264 video decoder
    codec = avcodec_find_decoder(CODEC_ID_H264);
    if (!codec)
    {
        fprintf(stderr, "codec not found\n");
        exit(1);
    }

    c = avcodec_alloc_context3(codec);
    picture = avcodec_alloc_frame();

    // skiploopfilter=all
    c->skip_loop_filter = 48;

    AVDictionary* dictionary = NULL;
    if (avcodec_open2(c, codec, &dictionary) < 0)
    {
        fprintf(stderr, "could not open codec\n");
        exit(1);
    }

    // the codec gives us the frame size, in samples
    parser = av_parser_init(c->codec_id);
    parser->flags |= PARSER_FLAG_ONCE;

    f = fopen(filename, "rb");
    if (!f)
    {
        fprintf(stderr, "could not open %s\n", filename);
        exit(1);
    }

    frame = 0;
    gettimeofday(&t, 0);
    if(fread(arghwtf, 1, INBUF_SIZE, f) == 0)
    {
        exit(1);
    }

    in_len = 80000;
    gettimeofday(&t2, 0);
    while (in_len > 0 && !feof(f))
    {
        len = av_parser_parse2(parser, c, &avpkt.data, &avpkt.size, arghwtf, in_len, pts, dts, AV_NOPTS_VALUE);

        len2 = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
        if (len2 < 0) {
            fprintf(stderr, "Error while decoding frame %d\n", frame);
            exit(1);
        }

        if (got_picture)
        {
            fprintf(stderr, "\rDisplaying %c %dx%d :frame %3d (%02d:%03d)...", av_get_picture_type_char(picture->pict_type), c->width, c->height, frame, (int)(get_time_diff(t)/1000000), (int)((get_time_diff(t)/1000)%1000));
            fflush(stderr);

            frame++;
        }

        memcpy(arghwtf, arghwtf + len, 80000-len);
        fread(arghwtf + 80000 - len, 1, len, f);
    }

    fclose(f);
    avcodec_close(c);
    av_free(c);
    av_free(picture);
    printf("\n");
    printf("Avarage fps: %d\n", (int)(((double)frame)/(double)(get_time_diff(t)/1000)*1000));

    return 0;
}

 , ,

pasifus
()

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