LINUX.ORG.RU

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

Намутил свой сетевой протокол для дисков

Форум — Development

https://github.com/vtl/ethblk

На имеющемся железе пробрасывает NVMe примерно на его родной скорости, и делает это в два с лишним раза быстрее штатного линуксового nvme-over-tcp. Дальше упирается в мой слабый клиентский комп, но на большом железе производительность растёт до миллионов IOPS через один диск. 50 GbE успешно загружал на полную катушку, был, практически, line rate.

 ethblk, , ,

mv
()

[c]Как проверить, существует ли файл?

Форум — Development

Собственно, сабж.

 

netcat
()

Zfs - что за ***

Форум — Admin

Впервые столкнулся с zfs. Сервер стабильно умирает от la и помогает только перезагрузка системы. Куча процессов занимают почти по 100% CPU. Больше всего напрягает arc_prune. Он постоянно фигурирует при каждом зависании. Места свободного полно, так понимаю что это баг zfs, а не дегродация тома. Немного погуглив увидел что эта проблема аж с 2011 года, так до сих пор и не решена... Теперь вопрос - zfs в топку или что то возможно с ней сделать?

 ,

sky92
()

Установка FreeBSD на раздел реального диска из-под другой ОС

Форум — Talks

Небольшой HOWTO, как быстро установить FreeBSD из-под GNU/Linux без лишних действий. Записал по ходу установки, возможно, кому-нибудь пригодится.

Входные данные в моём случае:

  • Есть неиспользуемый раздел на диске, разбитом через MBR. (Большая часть места на накопителях занята LVM-ом с кучей томов.)
  • Весь раздел целиком буду монтировать в корень, не используя разбивку bsdlabel. Система ставится больше для экспериментов, чем для реальной работы, так что нет смысла заморачиваться с точной разметкой.
  • По той же причине в качестве файловой системы использую UFS, а не ZFS.
  • Хочется весь процесс провести из-под основной ОС, не тратя время на создание загрузочной флешки.
  • В роли первичного загрузчика буду использовать grub, поэтому BSD-специфичный boot loader нас не интересует.

На одном из дисков я заранее зарезервировал четыре 20-гигабайтных раздела под эксперименты с разными ОС. На один из таких разделов установлю FreeBSD:

[root@aquila ~]# fdisk -l /dev/sda
Диск /dev/sda: 698,7 GiB, 750156374016 байт, 1465149168 секторов
Disk model: Hitachi HTS54757
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: dos
Идентификатор диска: 0xa33b6c03

Устр-во    Загрузочный    начало      Конец    Секторы Размер Идентификатор Тип
/dev/sda1  *                2048    6146047    6144000     3G            83 Linux
/dev/sda2                6146048  105357311   99211264  47,3G             7 HPFS/NTFS/exFAT
/dev/sda3              105357312 1465147391 1359790080 648,4G             5 Расширенный
/dev/sda5              105359360  146319359   40960000  19,5G            83 Linux
/dev/sda6              146321408  187281407   40960000  19,5G            83 Linux
/dev/sda7              187283456  228243455   40960000  19,5G            83 Linux
/dev/sda8              228245504  269205503   40960000  19,5G            83 Linux
/dev/sda9              269207552 1465147391 1195939840 570,3G            8e Linux LVM

Скачиваем установочный образ:

$ axel -a 'https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz'
$ xz -d FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz

Установку будем проводить из-под qemu, работающему от имени пользователя. Чтобы сможно было подключить физический диск к qemu, нужно сменить владельца /dev/sda:

# ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 апр 15 14:20 /dev/sda
# chown vadim:disk /dev/sda
# ls -l /dev/sda
brw-rw---- 1 vadim disk 8, 0 апр 15 16:12 /dev/sda
Я знаю, что идеологически правильно было бы добавить пользователя в группу disk, но мне как-то пофиг. После перезагрузки система забудет, что права на /dev/sda были отданы пользователю, а из группы пользователя надо удалять вручную.

Запускаем виртуальную машину с установочным образом и нужным физическим диском:

$ qemu-system-x86_64 -m 2048 -hda /dev/sda -cdrom FreeBSD-12.0-RELEASE-amd64-disc1.iso -boot menu=on

Выбираем CDROM в качестве загрузочного устройства. Ждем появления Welcome Menu, выбираем <Shell>. Инсталлятор нам не понадобится.

Посмотрим, какие разделы увидела система:

# ls /dev/ad*

И более подробно:

# gpart list | less

Виртуальная машина имеет прямой доступ к реальному /dev/sda, так что нужно внимательно перепроверять все свои действия по поводу разделов диска.

Выяснили, как в гостевой ОС называется нужный раздел, создаем на нём файловую систему:

# newfs -U -L anjalifbsd /dev/ada0s5

  • Опция -U указывает задействовать механизм Soft Updates.
  • Опция -L задаёт имя тома ФС.

Монтируем созданную ФС:

# mkdir /tmp/new_root
# mount /dev/ada0s5 /tmp/new_root

Теперь нужно распаковать операционную систему на новый раздел:

# cd /tmp/new_root
# tar xvf /usr/freebsd-dist/base.txz
# tar xvf /usr/freebsd-dist/kernel.txz

Система занимает меньше гигабайта:

# df -h .
Filesystem      Size     Used    Avail  Capacity  Mounted on
/dev/ada0s5      19G     930M      16G      5%    /tmp/new_root

Правим fstab. Честно говоря, я не знаю деталей о процессе инициализации FreeBSD и не уверен, что это обязательно:

echo '/dev/ada0s5 / ufs rw 1 1' > etc/fstab
echo 'tmpfs /tmp tmpfs rw 0 0' >> etc/fstab

Выключаем виртуальную машину:

# poweroff

На реальной машине правим конфиг grub.

У меня grub установлен на отдельном разделе таким образом, что установка любого нового слишком умного дистрибутива, перезаписывающего конфиг grub-а, не повлияет на этот загрузчик. В загрузочном меню этого отдельного grub-а указано, как грузить установленные ОС, внутри которых может работать уже собственный загрузчик дающий выбрать версию ядра и т.п. Например:

menuentry "Artix Sonata" {
	configfile (lvm/aq-aq_artix)/boot/grub/grub.cfg
}

menuentry "Archlinux Aquila" {
	configfile (lvm/aq-aq_archlinux)/boot/grub/grub.cfg
}

menuentry "Voidlinux Epsilon" {
	multiboot (lvm/aq-aq_voidlinux)/boot/grub/i386-pc/core.img
}

Загрузчик FreeBSD я не задействовал, так что в моём случае достаточно добавить menuentry для прямой загрузки ядра FreeBSD:

menuentry "FreeBSD Anjali" {
	insmod part_msdos
	insmod ufs2
	set root=(hd0,5)
	kfreebsd /boot/kernel/kernel
	kfreebsd_loadenv /boot/device.hints
	set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s5
	set kFreeBSD.vfs.root.mountfrom.options=rw
	boot
}

На этом всё. Установка сводится к распаковке архива с системой и запуску ядра любым подходящим загрузчиком. Даже проще, чем установить Арч.

Первые шаги в системе:

  • Имя хоста задаётся через hostname(1).
  • Управление пользователями и группами осуществляется при помощи pw(8).
  • Про настройку локали см. login.conf(5). В конфиге уже прописан вариант для русской локали, так что достаточно указать login class пользователя равным russian.
  • wpa_supplicant настраивается стандартно через конфиг, плюс надо указать пару строчек в rc.conf.
  • Пакеты ставятся при помощи pkg(8).

 , ,

Deleted
()

Все извесные djb2 коллизии

Форум — Development

UPD: Дададада strcmp в общих случаях быстреее, не пишите мне про это, всё есть в треде, спаааасииибо ))

У кого есть список коллизий хеш алгоритма djb2? Выбрал его как замену strcmp() ибо не смотря на все оптимизации с SSE2 strcmp() проигрывает почти в 4 раза.

[DEBUG] (src/engine.c:timer_start:112) Timer 0 'strcompare' Start: 0.000000
[DEBUG] (src/engine.c:timer_stop:133)  Timer 0 'end' End: 0.189000
[DEBUG] (src/engine.c:timer_start:112) Timer 0 'strhash-compare' Start: 0.000000
[DEBUG] (src/engine.c:timer_stop:133)  Timer 0 'end' End: 0.053000

Ну и опционально, приведу код может кто ещё подскажет как ускорить

Сейчас поиск элемента в материале такой 1000000 интераций поиска 0.189000 секунд cpu MHz: 3501.001

material_item material_entry_item(material_entry* me, char* name) {

  for(int i = 0; i < me->num_items; i++){
    if(me->names[i][0] == name[0]){
    if (strcmp(me->names[i], name) == 0){
       return me->items[i];
    }}
  }

  material_item empty;
  memset(&empty, 0, sizeof(empty));
  return empty;
}

Оно же с хешем djb2 1000000 интераций поиска 0.053000 секунды cpu MHz: 3501.009

long
hash(char *str)/*djb2*/
{
    register long hash = 5381;
    register int c;

    while ((c = *str++))

    hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

    return hash;
}


material_item material_entry_item2(material_entry* me, char* name) {

  for(int i = 0; i < me->num_items; i++){
    if(me->names[i][0] == name[0]){
    if(hash(me->names[i]) == hash(name)){
       return me->items[i];
    }}
  }

  material_item empty;
  memset(&empty, 0, sizeof(empty));
  return empty;
}

Сам файл материала выглядит так он загружается в в стуктуру material_entry каждая строка вносится в union material_item именно поиск item мы и выполняем по имени

float  sadfsdf = 0
int  sadfsadf = 0
bool dfgdfgdf = 0
float asdfaksdfhaskdjf = 0 
bool  sdfasdjfioasdjf = 0
int  fsdfaefasdfasdfas = 0
float  sadfasdfaefsf = 0
float aasdfasdfsadf = 0
float asiodufhaoiuefhw = 0
bool  654654sadfasdf = 0
int  fq34tgsergwtysdfgg = 0
float asdfasdfsdfasfwe = 0
bool sdfggesrdf = 0
int asdfgrstghrth = 0
int atyehdfdfhdfgh = 0
float adtghrt6htrh = 0
int test_value = 333

Ну первое что приходит на ум это добавить в material_entry поле hash куда делать предрасчёт хеша так мы сократим время поиска ещё в ~двое. Ну может у кого иди какае ещё будет как сделать ещё быстрее (без openmp и прочего параллелизма) Но основной вопрос про коллизии djb2, хочется их знать и проверять на этапе загрузки материалов.

Оригинальный код тут https://github.com/orangeduck/Corange/blob/master/src/assets/material.c https://github.com/orangeduck/Corange/blob/master/include/assets/material.h

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

чекер коллизий (без проверок аллокации, так что ну вы поняли) акоммулирует в себе всё уникальное чекает входящее и сохраняет в себе для последующих сравнений

void hash_cheker(char * str)
{

    static char ** hash_cheker_storage  = NULL;
    static long hash_cheker_storage_num = 0;
    
    if(hash_cheker_storage == NULL)
    {
        hash_cheker_storage_num++;
        hash_cheker_storage = malloc(sizeof(char**) * hash_cheker_storage_num+1);
        hash_cheker_storage[hash_cheker_storage_num-1] = malloc(sizeof(char)* strlen(str));
        memset(hash_cheker_storage[hash_cheker_storage_num-1],'\0',strlen(str));
        strcat(hash_cheker_storage[hash_cheker_storage_num-1],str);
        debug("HASH CHECK OK: %s ",str);
        return;
    }

    bool new_elem = false;
    for (int i = 0; i < hash_cheker_storage_num; i++)
    {
        if(strcmp(hash_cheker_storage[i],str) == 0)
        {
           return;
        };
    };


    for (int i = 0; i < hash_cheker_storage_num; i++)
    {
        if(hash(hash_cheker_storage[i]) == hash(str))
        {
            error("Сollision Hash between '%s' (%ld) and '%s' (%ld) choose another name for '%s'",
            hash_cheker_storage[i],hash(hash_cheker_storage[i]),
            str,hash(str),
            str);
            return;
        };
    };

    hash_cheker_storage_num++;
    hash_cheker_storage = realloc(hash_cheker_storage,sizeof(char**) * hash_cheker_storage_num+1);
    hash_cheker_storage[hash_cheker_storage_num-1] = malloc(sizeof(char)* strlen(str));
    memset(hash_cheker_storage[hash_cheker_storage_num-1],'\0',strlen(str));
    strcat(hash_cheker_storage[hash_cheker_storage_num-1],str);
   
    debug("HASH CHECK OK: %s ",str);
    for (int i = 0; i < hash_cheker_storage_num; ++i)
    {
        debug("HASH: %-10s = [%ld]",hash_cheker_storage[i],hash(hash_cheker_storage[i]));
    }
}

А вот вся суть


[DEBUG] (main.c:hash_cheker:78) HASH CHECK OK: asdfgrstghrth 
[DEBUG] (main.c:hash_cheker:81) HASH: sadfsdf    = [229482278995104]
[DEBUG] (main.c:hash_cheker:81) HASH: sadfsadf   = [7572915206835201]
[DEBUG] (main.c:hash_cheker:81) HASH: dfgdfgdf   = [7572282502104081]
[DEBUG] (main.c:hash_cheker:81) HASH: asdfaksdfhaskdjf = [1788434361038682215]
[DEBUG] (main.c:hash_cheker:81) HASH: sdfasdjfioasdjf = [-531356999790002134]
[DEBUG] (main.c:hash_cheker:81) HASH: fsdfaefasdfasdfas = [2674916009048082468]
[DEBUG] (main.c:hash_cheker:81) HASH: sadfasdfaefsf = [3622462406116730534]
[DEBUG] (main.c:hash_cheker:81) HASH: aasdfasdfsadf = [-7929917643305991168]
[DEBUG] (main.c:hash_cheker:81) HASH: asiodufhaoiuefhw = [-2980351034500385520]
[DEBUG] (main.c:hash_cheker:81) HASH: 654654sadfasdf = [6604793431210835103]
[DEBUG] (main.c:hash_cheker:81) HASH: fq34tgsergwtysdfgg = [7202372098568309662]
[DEBUG] (main.c:hash_cheker:81) HASH: asdfasdfsdfasfwe = [1799994182520512308]
[DEBUG] (main.c:hash_cheker:81) HASH: sdfggesrdf = [8246908965533417028]
[DEBUG] (main.c:hash_cheker:81) HASH: asdfgrstghrth = [-7043038456319946496]
[DEBUG] (main.c:hash_cheker:78) HASH CHECK OK: atyehdfdfhdfgh 

Сам материал же выглядит так

material_item material_entry_item2(material_entry* me, char* name) {

  register long hash_name = hash(name);
  for(register int i = 0; i < me->num_items; i++){
    if(me->hash[i] == hash_name){ //me->hash[i] предрасчитан заранее на этапе инициализации material_entry
       return me->items[i];
    }
  }

  material_item empty;
  memset(&empty, 0, sizeof(empty));
  return empty;
}

UDP: Правда я лоханулся ибо доступ к аллоцируемой памяти дольше и для предрасчёта надо брать статичный массив, а в нём уже ссылаться на позицию item. Ай да и ладно, пока что химичу, основной вопрос с колизиями решён, тему закрою. Но в целом, если использовать #pragma omp parallel for для поиска по strcmp() то эта комбина рвёт как тузик грелку поиск по хешу.

 , , ,

Deleted
()

Российскую операционную систему Эльбрус теперь можно скачать на любой компьютер

Форум — Talks

Российская операционная система «Эльбрус», предназначенная для устройств на базе отечественных одноимённых процессоров, теперь бесплатно доступна для любого компьютера (удовлетворяющего невысоким системным требованиям). Ранее эту платформу нельзя было официально скачать любому желающему.

Каждая из версий операционной системы «Эльбрус» основана на определённом модифицированном ядре Linux. На данный момент любой желающий может бесплатно скачать версию платформы для процессоров с архитектурой х86 (которая работает и на базе 64-разрядных чипсетов) — для этого необходимо на официальном сайте компании-разработчика в лице «МЦСТ» выбрать один из двух последних дистрибутивов. В ближайшем будущем в свободном доступе появится операционная система «Эльбрус» версии 4.0, основанная на ядре Linux с индексом 4.9.

С официального сайта можно бесплатно скачать не только дистрибутив открытой версии «Эльбруса», но и список необходимых пакетов, а также документацию по установке — она доступна на русском языке.

К сожалению, МЦСТ не позволяет любому загрузить другие версии платформы, за исключением PDK «Эльбрус» с функциями для разработчиков — правда, данная модификация операционной системы вряд ли пригодится обычным пользователям, поскольку она работает только на отечественных процессорах «Эльбрус» (которых нет в свободной продаже).

У российской операционной системы (по крайней мере, её версий открытого типа) следующие минимальные системные требования: как минимум 1 ГБ оперативной памяти и 40 ГБ свободного места на диске, совместимый с VGA видеоинтерфейс, наличие DVD-привода для установки платформы.

http://mcst.ru/programmnoe-obespechenie-elbrus

 , ,

sqq
()

Включить https Luci

Форум — General

Хочу прикрутить https к люське. Поставил luci-ssl, но браузеры ругаются на незащищенное соединение. Как решить эту проблему с браузерами?

 ,

zimipaj
()

Криптокапец

Форум — Talks

Комитет Госдумы по информационной политике предложил использовать отечественные средства шифрования при передаче информации в российском сегменте интернета. Такие поправки планируют внести в законопроект об изоляции рунета...

https://meduza.io/news/2019/04/02/deputaty-predlozhili-shifrovat-trafik-v-ros...

Update: Пока это новость требует подтверждения, но IMHO отслеживать подобное необходимо.

Update 2: ЖЖ того самого разработчика отечественных систем шифрования Дмитрия Белявского.

 

Evgueni
()

zfs backup на remote шифрованый диск

Форум — Admin

Привет. Задача такая: есть zpool , который я будут синхронизировать ssh send/receive на внешний сервер.

Внешний сервер должен иметь шифрованные диски. Но при этом эти диски не должны быть замаунчены все время. Они должны монтироваться только на время синхронизации.

Ну и еще на систему можно поставить inotify и мониторить любые изменения в /. Так что если кто-то поставил систему раком и ставит руткиты, чтобы отснифить ключ маунта, который передается при send/receive , то я успеваю автоматически остановить/отменить следующую синхронизацию и примуанчивание дисков.

Есть какие-то готовые решения/мысли?

Или может я херню вообще написал и есть best practice по этому поводу?

 , , , ,

constin
()

автоматическая расстановка id3tag

Форум — Talks

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

Не скажу откуда, завелось у меня немного музычки в mp3 320kbps (все адепты lossless идут в /dev/ass). Только беда в том что имена там в виде кучи hex-символов и тегов нет.

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

Линус тут при том, что прогу эта должна из линукса работать.

Сам пока ничего полезного не нашел.

PS. Picard рулит!

Ну и мой грабер, живите теперь с ним, бу-га-га!!!

copy_music.sh:

#!/bin/bash
DEF=`ls -1 ~/.mozilla/firefox/ | grep default | awk -F . '{ print $1 }'`
while true; do
        find ~/.cache/mozilla/firefox/${DEF}.default/cache2/entries -size +1000k | xargs -n 1 file | grep '320 kbps' | awk '{ print $1  }' | rev | cut -c 2- | rev | xargs -r cp -v -n
-t ~/music/yandex.music/$1;
        sleep 10;
done;

add_mp3.sh:

#!/bin/bash
find . -maxdepth 1  -type f | grep -v -E '.mp3|.sh' | xargs -r -n 1 | sed -r  'p;s/(.*)/\1.mp3/' | xargs -n 2 mv

 ,

yax123
()

Таки ReactOS 0.4.11 можно установить на любой PC с USB-флешки

Форум — Talks

Таки ReactOS 0.4.11 можно установить на любой PC с USB-флешки


Несложная видео-инструкция

Кратко о происходящем на видео:
1.На USB флешку копируют установочный и live образы ReactOS.
2.Делается загрузочная запись и загрузчик конфигурируют на загрузку по RAM-методу.
3.Стартуют с флешки, запускают установочный образ и проходят первый этап установки на целевой компьютер.
4. Стартуют с флешки, live образы ReactOS и корректируют boot.ini на целевом компьютере.
5. Грузятся с диска целевого компьютера и завершают установку ReactOS

UPD Текстовый вариант инструкции подоспел.

 , ,

Jedi-to-be
()

Linux Kernel Runtime Guard v0.6

Новости — Безопасность
Группа Безопасность

Linux Kernel Runtime Guard (LKRG) ― это экспериментальный модуль ядра, обеспечивающий контроль целостности и обнаружение работы эксплоитов, направленных на пространство ядра.

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

>>> Подробности

 , , , ,

Deleted
()

Релиз встраиваемой системы реального времени Embox v0.3.25

Новости — Open Source
Группа Open Source

17 февраля 2019 года вышел очередной релиз встраиваемой системы реального времени Embox v0.3.25.

Разработчики добавили возможность работы с несколькими сторонними приложениями с открытым кодом:

  • Портирован quake3.
  • Продемонстрирована работа SIP-телефона на STM32F7diccovery на основе проекта PJSIP.
  • Обновлена используемая версия графической библиотеки Mesa3d.
  • Обновлена используемая версия ssh-сервера на основе проекта dropbear.

Кроме того было внесено большое количество изменений:

  • Добавлен интерфейс для работы с устройствами по шине I2C.
  • Добавлен интерфейс для работы с устройствами по шине SPI.
  • Добавлен интерфейс для работы GPIO.
  • Переработана подсистема символьных устройств.
  • Переработана подсистема devfs.

>>> Подробности

 , , ,

abondarev
()

Контроллеры заряда с обратной связью

Форум — Talks

ЛОР, а существуют контроллеры заряда Li-ion-батарей (да и можно не только их) со связью с компьютером, чтобы забирать статистику в Linux'e о том, насколько заряжена сейчас батарея, ее напряжение и так далее? Что-то по типу ноутбучных контроллеров в батареях, только более широкого использования и с более привычными интерфейсами.

 

YAR
()

Undefined behavior в MUSL

Форум — Talks

Привет, мои любители пердолинга с C и C++. Я вчера наткнулся на забавный пассаж в MUSL:

$ cat src/misc/syscall.c 
#define _BSD_SOURCE
#include <unistd.h>
#include "syscall.h"
#include <stdarg.h>

#undef syscall

long syscall(long n, ...)
{
	va_list ap;
	syscall_arg_t a,b,c,d,e,f;
	va_start(ap, n);
	a=va_arg(ap, syscall_arg_t);
	b=va_arg(ap, syscall_arg_t);
	c=va_arg(ap, syscall_arg_t);
	d=va_arg(ap, syscall_arg_t);
	e=va_arg(ap, syscall_arg_t);
	f=va_arg(ap, syscall_arg_t);
	va_end(ap);
	return __syscall_ret(__syscall(n,a,b,c,d,e,f));
}

Как вы наверное понимаете, вызовы syscall() сильно различаются по количеству аргументов. Все стандарты C, что я видел, говорят, что вызывать va_arg, если аргумента нет — злостное UB. Поскольку мне лень ковыряться в кишках компиляторов, я решил аппелировать к массовому сознанию LOR — а что GCC и clang вообще делают в таких случаях?

 , ,

kirk_johnson
()

Усилитель 4G на дачу.

Форум — Talks

Друзья, разъясните. Дачный посёлок в 5 км от города, в котором есть БС всех операторов с 4G). Вокруг дач густой лес. На втором этаже дома мобила как-то ловит связь и неспешный интернет. На первом ж..па. Порекомендовали приемник-усилитель 3G/4G. Вроде как на трубу пришпандорил, по витой паре в роутер и все довольны, вроде как. Бюджет 10-12 килорублей. Очень много девайсов. Много противоречивой инфы. В общем, кто реально юзает в похожих условиях, посоветуйте.

 , ,

Deleted
()

Драйвер для CP2102

Форум — General

Ситуация следующая. Есть устройство где в качестве преобразователя интерфейса используется чип Silicon Labs CP2102 в принципе я часто его в своих проектах использую, обычно все хорошо. Но вот не задача, попалась партия китайских чипов которая отличается idVendor и idProduct. И вот они упорно отказываются работать.

Устройство подключается но наотрез отказывается распознаваться как USB - UART конвретр. Операционная система Ubuntu 18.04

Результат dmesg

[ 1848.098360] usb 3-1: new full-speed USB device number 18 using xhci_hcd
[ 1848.247818] usb 3-1: New USB device found, idVendor=0b00, idProduct=3070
[ 1848.247824] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1848.247828] usb 3-1: Product: Ingenico 3070
[ 1848.247832] usb 3-1: Manufacturer: Silicon Labs
[ 1848.247836] usb 3-1: SerialNumber: 0001

результат lsusb

Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0b05:17cb ASUSTek Computer, Inc. Broadcom BCM20702A0 Bluetooth
Bus 003 Device 004: ID 046d:c52e Logitech, Inc. MK260 Wireless Combo Receiver
Bus 003 Device 019: ID 0b00:3070 INGENICO 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Для примера вот результат dmesg другого устройства с чипом CP2102 из другой партии. Все на том же компе

[ 1771.978223] usb 3-1: new full-speed USB device number 17 using xhci_hcd
[ 1772.127894] usb 3-1: New USB device found, idVendor=10c4, idProduct=ea60
[ 1772.127900] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1772.127904] usb 3-1: Product: CP2102 USB to UART Bridge Controller
[ 1772.127908] usb 3-1: Manufacturer: Silicon Labs
[ 1772.127912] usb 3-1: SerialNumber: 0001
[ 1772.129087] cp210x 3-1:1.0: cp210x converter detected
[ 1772.131005] usb 3-1: cp210x converter now attached to ttyUSB0

В моем понимание основное различие в idVendor и idProduct. Как сделать так что бы операционка idVendor=0b00 и idProduct=3070 воспринимала как cp210x converter и использовала для него cp210x?

 

dvalov
()

Цветной текст в консоли на Си

Форум — Development

Привет, ЛОР! Такая вот задача: начал осваивать Си, дошёл до того, что надо осваивать цветной текст.

Хочу написать программу, которая бы делала простейшие геометрические примитивы разных цветов (красный, жёлтый, зелёный), но пока не нашёл информации, что нужно писать в исходном коде для определения цвета. Как и графических примитивов. Мож есть у кого материал по этой теме?

Заранее благодарен!

Nominalus_Externatus
()

Компания Western Digital выпустила открытую реализацию процессора с RISC-V ISA

Новости — Hardware and Drivers
Группа Hardware and Drivers

В рамках стратегии перехода на открытую ISA, компания Western Digital опубликовала исходный код реализации 32-бит процессора SweRV с RISC-V ISA, предназначенного для использования в системах хранения данных. Процессор поддерживает ECC-память и предназначен для работы на частоте до 1ГГц (при изготовлении по техпроцессу 28нм); программный имитатор процессора был опубликован ранее.

>>> Подробности

 ,

tailgunner
()

Мультиметр

Форум — Talks

Короче стал мой старенький mastech опять показывать погоду на Марсе.
Быстрее всего крона помирает, но мне лень даже его раскручивать, пора уже что-нибудь нормальное прикупить. Кроны менять надоело, хочу на обычных батарейках.

Требований у меня немного: более-менее приемлемая точность и пищалка в режиме проверки диодов.

Посмотрел всё по сути, от «народных» HoldPeak, «оптимальных» Brymen до фирменных Fluke. И везде [..] пищалка разнесена с проверкой диодов. Какой дегенерат это вообще придумал?

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

 ,

Kasch
()