LINUX.ORG.RU

Сообщения Dead

 

Поддержка многоцветных светодиодов в ядре

Форум — Development

Есть светодиод с двумя цветами (зеленый, красный). Светодиод подключен к двум gpio.
Если горят оба цвета, то имеем третий цвет - оранжевый.
Задача: нужно моргать оранжевым цветом.
Использую led-gpio драйвер с heardbeat триггером.
Чтоб решить задачку, приходится настраивать два отдельных led'a и включать моргание на обоих одновременно.
Насколько я понял, драйвер настраивает по отдельному таймеру для каждого светодиода.
В результате иногда получается рассинхрон в моргании. Т.е. зеленый горит, красный не горит и наоборот.
Покопался в ядре и в гугле что-то не нашел поддержки такой фичи. Неужели одному мне нужно? :)
Очень не хотелось бы этот функционал переносить в userspace.

 ,

Dead
()

Непонятные прыжки по коду (memory corruption)

Форум — Development

Добрый день,

Есть некий код, написанный на С++. В виде псевдокода схематично он выглядит так:

void func1()
{
   some_func2();
   fprintf(stderr, "some_func2()\n");
   some_func3();
   fprintf(stderr, "some_func3()\n");
}

Код, можно сказать, линейный. Иногда по логам вижу, что some_func2() вызывается, а вот до some_func3() уже не доходит. При этом func1 каким-то магическим образом завершается. Segmentation Fault не происходит.

Поначалу думал, что fprintf почему-то не виден, но оказалось код до вызова some_func3 действительно не доходит.

Причем это все происходит спорадически. 1 раз на 100 вызовов срабатывает, поэтому дебагером поймайть не могу.

Важное замечание, целевая платформа ARM.

Если б это было на x86, я бы предположил, что some_func2 где-то потерла стек и в результате вызвался ret на другую инструкцию. Но тогда были бы переодические SIGSEGV. На всякий случай в some_func2() завел массив на стеке, проинициализировал его определенными данными. На выходе из some_func2() сравниваю эти значения, все ок. Значит стек не трется. Но возможно на ARM адрес возврата из функции вообще не в стеке лежит?

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

По поведению, где-то memory corruption. Но где и как найти? Буду рад любым дельным советам.

Dead
()

Ищу удаленную работу в embedded

Форум — Job

Всем привет!

Ищу удаленную работу в области встраиваемых систем.

Сфера деятельности:
- разработка драйверов
- разработка standalone firmware
- разработка сетевых приложений С/C++
- разработка мультимедия приложений (энкодинг/декодинг аудио/видео, стриминг, и т.п.)
- QT
- и т.д и т.п.

Опыт разработки - 11 лет.
Архитектуры: ARM, MIPS, Blackfin, x86.

Е-mail:
davydov.vladimir @ gmail . com

Dead
()

Настройка нулевого VLAN'a

Форум — Admin

Добрый день всем, нужна консультация гуру-админа. Столкнулся с задачей создания VLAN тега с нулевым VID.

Согласно спецификации 802.1Q такое значение тега допускается. В таком случае имеет значение только поле приоритета (PCP).

Поставил вот такой вот эксперимент. Есть два ПК с линуксом на борту. Сетевые интерфейсы этих ПК соедены между собой напрямую без использования доп. оборудования (Ethernet Switch).

На ПК1 создаем нулевой VLAN.

vconfig add eth0 0

Пробуем пинговать ПК1, пинг идет. Смотрим пакеты через tcpdump. Он показывает, что VLAN тег вообще отсутствует в пакете. В принципе это не противоречит документации, т.к. по умолчанию приоритет равен 0.

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

vconfig set_egress_map eth0.0 0 7

Опять запускаем пинг и видим, что ARP запросы на ПК2 уже идут с VLAN тегом, в котором VLAN ID равен нулю, приоритет равен 7.

ПК2 отвечает на эти запросы пакетами, у которых отсутствует VLAN тег!!!

В результате получается, что пакеты приходят не на интерфейс eth0.0, а на интерфейс eth0, который как бы и не отправлял ARP запросов. В итоге пинг не работает.

Хотелось бы понять, это баг или фича? И как это можно обойти?

Спасибо.

Dead
()

Легален ли такой обход GPL?

Форум — Development

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

Функции выносятся в отдельный C файл, который после первой компиляции - дизассемблируется под целевую платформу. Дизасемблерный код слегка корректируется, чтобы он потом мог быть собран.

В итоге выкладывается под GPL именно этот ассемблерный код, а не C код.

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

Легален ли такой обход GPL?

P.S. столкнулся с таким способом изучая правки ядра от одной «жопошной» конторы.

Dead
()

Как вичислить смещение до элемента структуры

Форум — Development

Добрый день.

Есть ли способ вычислить смещение до элемента структуры на этапе компиляции?

т.е. имеем объявление структуры типа:

struct A {
  int x;
  int y;
};

Можно вычислить смещение до y примерно таким способом:

struct A a;
unsigned int y_offset = (void *)&a.y - (void *)&a;

Но данное вычисление будет работать на этапе выполнения программы.

Как сделать тоже самое, но на этапе компиляции? Ведь компилятор знает это значение.

Dead
()

[Qt] Локализация/перевод кнопок

Форум — Development

Привет всем.
Подскажите пожалуйста, как заставить QMessageBox переводить текст на русский для стандартных кнопок таких «Save», «Discard», «Cancel» и т.п.
Тоже самое для QDialogButtonBox.
В принципе в QDialogButtonBox это может быть реализовано через setText(tr("...")) для нужных кнопок. А вот для какого-нибудь QMessageBox::information() это не пройдет.

Может быть есть более стандартный путь?

 

Dead
()

Запуск mplayer'a из webkit

Форум — Development

Приветствую всех,

Ищу наиболее простое решение для следующей задачи. Браузер (webkit) отображает страницу с сылками на avi файлы. Необходимо при клике по ссылке вызывать mplayer с определенными параметрами.

Буду рад любым советам, т.к. в этом вопросе не очень копенгаген.

Dead
()

Вопросы по OpenEmbedded

Форум — Development

Приветствую всех.

Вопросы к имеющим опыт обращения с openembedded.
1. Можно ли добавить новый recipe, который будет использовать готовое дерево исходников? Т.е. не вытягивать по svn, git, http, ftp, tar.gz. А брать из уже существующей директории некоторого проекта. Как?
2. После первой успешной сборки некоторого recipe повторный запуск bitbake не приведет к новой сборке, а ограничится лишь обработкой уже собранных файлов. Как бы это отключить для некоторых пакетов? Т.е. чтобы bitbake каждый раз вытягивал и собирал пакет заново.


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

Dead
()

KDE4, Шрифты, Terminus?

Форум — Desktop

Привет всем,
Установил свежую OpenSUSE 11.2 и столкнулся с тем, что шрифт terminus в KDE4 выглядит ну совершенно не как terminus.
Самое забавное, что в программе просмотре шрифтов (kfontview, xfontsel) шрифт выглядит нормально, а в диалоге выбора шрифта он уже не тот.
Это хорошо видно на скриншоте:
http://s3.sendpic.ru/i/10328/i/ur.png
Таже проблема в qtconfig. В KDE3 этой проблемы нету.
Видеокарта ноутбучная - NVidia GT240M.
В чем может быть проблема? Никто не сталкивался?

Dead
()

Race conditions в shell

Форум — Development

Приветствую всех!

Подскажите, как обычно решаются проблемы с гонками в shell?
У меня один и тот же скрипт стартует два раза через небольшой интервал времени, в итоге иногда вылезают проблемы в критической секции.
Пока единственная идея - написать функции lock и unlock, которые будут работать через файлы типа /var/lock/blablabla.

Dead
()

как защитить данные в OpenVZ

Форум — Admin

Приветствую всех!

Вот такая вот задачка имеется.

Исходные данные: Куплен виртуальный сервер (виртуализация через OpenVZ). На этом сервере необходимо разместить репозиторий SVN. Задача: необходимо, защитить содержимое репозитория от владельцев физического сервера.

Подскажите в какую сторону копать? Какие технологии?

Dead
()

UART: аппаратное управление потоком

Форум — Development

Приветствую всех!

Интересует аппаратное управление потоком при помощи CTS/RTS сигналов из userspace.
Необходимо запретить передачу на порт при помощи RTS пина. У кого-нибудь это получалось?

пробую таким макаром:
int serial, new_serial;
if ( ioctl(data_fd, TIOCMGET, &serial) ) {
fprintf(stderr, "ioctl TIOCMGET failed : %s\n", strerror(errno));
return -1;
}
if (serial & TIOCM_CTS)
puts("TIOCM_CTS is not set");
else
puts("TIOCM_CTS is set");
if (serial & TIOCM_RTS)
puts("TIOCM_RTS is not set");
else
puts("TIOCM_RTS is set");


new_serial = serial | TIOCM_CTS | TIOCM_RTS;
if ( ioctl(data_fd, TIOCMSET, &new_serial) ) {
fprintf(stderr, "ioctl TIOCMSET failed : %s\n", strerror(errno));
return -1;
}


if ( ioctl(data_fd, TIOCMGET, &serial) ) {
fprintf(stderr, "ioctl TIOCMGET failed : %s\n", strerror(errno));
return -1;
}
if (serial & TIOCM_CTS)
puts("TIOCM_CTS is not set");
else
puts("TIOCM_CTS is set");
if (serial & TIOCM_RTS)
puts("TIOCM_RTS is not set");
else
puts("TIOCM_RTS is set");

В итоге ни CTS ни RTS не изменяются.
Может кто-нибудь что-то подскажет?

===============
извиняюсь за форматирование, ни один из типов форматирования, предложенных лором не показывает код нормально.

Dead
()

[embedded] Управление дисковым кэшем

Форум — Development

Приветствую всех.
Возможно тема не очень подходит для development, но мне этот раздел как-то ближе.
Задача следующая. Есть некая embedded система, основной задачей которой является сохранение видео данных с камеры на флэш-накопителе.
Упрощенный тракт видео информации следующий:
Video source ---> V4L Driver ---> Application ---> Flash (FAT).

Video source производит 25 кадров в секунду - data rate примерно 512KB/sec.
V4L Driver сохраняет кадры в 20 внутренних буферах, т.е. может буферизироваться без малого 1 секунда видео.
Application висит в poll() на файловом дескрипторе видео устройства (/dev/video) и ждет видео данные. При появлении данных, сохраняет кадры на флэш-накопитель.
Flash - отформатирован в FAT32. Максимальная скорость записи 1.7 MB/sec (DMA). В принципе, этой скорости вполне достаточно чтобы успевать сохранять видео поток на флэш.

Проблема в том, что ядро кэширует данные при записи и может не сбрасывать кэш на носитель несколько секунд. После чего пытается сбросить сразу несколько мегабайт, приложение блокируется на пару секунд и получается frame drop.
Как бы этого избежать? Или хотябы минимизировать?

Полностью отключать дисковый кэш не хотелось бы. Хотелось бы чтобы сбрасывание происходило при накоплении в кэше не более 1MB данных. Как бы произвести тюнинг дисковой подсистемы в плане этого? Какие параметры смотреть?

Можно, конечно, в паралельном треде вызывать переодически sync(), но как-то некошерно выглядит.

Может быть предложите другие варианты решения подобной проблемы?

Спасибо.

 

Dead
()

Traffic shaping

Форум — Admin

Приветствую всех.

Хочу на своем ноуте настроить QoS таким образом, чтобы трафик битторента имел самый низкий приоритет.
Ноут имеет один сетевой интерфейс(100MBit/sec), который используется как для подключения к локальной сети так и к интернету. Подключение к интернету осуществляется через ADSL модем, который выступает шлюзом.
Нашел простые решения как это можно сделать, если подключения к интернету и к локальной сети осуществляются через отдельные сетевые интерфейсы, но добавить в ноут еще одну аппаратную сетевуху не могу.
Подсоветуйте как можно решить данную задачу? Поидее как-то можно создать виртуальный сетевой интерфейс и весь инетовский трафик пропускать через него? Подскажите куда копать?

Спасибо.


Dead
()

Параметры сетевого интерфейса.

Форум — Development

Приветствую, всех.

Как можно получить параметры сетевого интерфейса, такие как: 
 - скорость (10\100\1000Mbit).
 - дуплекс или нет.

Предполагается, что известно только имя интерфейса, например, eth0.

Спасибо.
 

>>>

Dead
()

KDE 3.5.8

Форум — Talks

Узнал, начав качать обновления для OpenSUSE 10.2.

>>>

Dead
()

Smart - количество одновременных загрузок

Форум — General

Приветствую всех. Подскажите как указать смарту количество одновременных загрузок. По умолчанию их кажется 5. Что-то не смог найти через гугл.

Спасибо.

Dead
()

write and fsync

Форум — Development

Приветствую всех.

Допусти есть вызов

write(fd, buf, sizeof(buf));

он проходит успешно и возвращает sizeof(buf)

затем идет некий код, который приводит к Segmentation fault.

Есть ли гарантия, что ядро сбросит на диск этот самый buf или же  в таком случае нужно после write вызывать fsync(fd)?

Спасибо.




Dead
()

различия в поведении new и malloc

Форум — Development

Приветствую.
Интересует такой вопрос.
Как известно в linux по умолчанию malloc вернувший не NULL не гарантирует то, что память действительно выделилась.
Гарантирует ли это оператор new в С++?


Dead
()

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