LINUX.ORG.RU

Сообщения zloy_starper

 

Помогите разобрать Makefile

Форум — Development

Лет 10 уже не писал Makefile-ы, не могу понять, в чем собака порылась.

#!/usr/bin/make -f
CC := gcc

ifeq ($(CC),icc)
  CFLAGS += -qopenmp
endif

ifeq ($(CC),gcc)
  CFLAGS += -fopenmp
endif

CFLAGS += -I../include -lsrvc_cmd

TARGETS = $(patsubst %.c,%,$(wildcard *.c))

BINARY= $(patsubst %.c,%,$<)

install:
	@for bin in $(TARGETS); do (rm -if $$bin); done
	@for bin in $(TARGETS); do (make $$bin); done
	rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions

$(BINARY): $(BINARY)
	$(CC) $(CFLAGS) -o $@ $@.o

clean:
	@for bin in $(TARGETS); do (rm -if $$bin); done
	rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions

cleanall:
	@for bin in $(TARGETS); do (rm -if $$bin); done
	rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions

.PHONY: build clean clean all

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

gcc -fopenmp -I../include -lsrvc_cmd prog.c -o prog

 ,

zloy_starper
()

Нужно перепланировать ядерный поток из самого потока?

Форум — Development

Почитал разные статейки про ядерные потоки. Как создать, завершить поток - все объясняется на раз два. Вопрос про то, чем ядерный поток отличается от пользовательского, что-то как-то мало затрагивается. Т.е. вроде как такая же задача, а вроде и нет.

В общем создал модуль ядра, в котором запускается поток. Поток в цикле нечто считает. Меньше, чем через минуту, такой модуль крэшится с сообщением типа: rcu_sched self-detected stall on cpu #. Т.е. я таки правильно понимаю, что ядерный поток сам время от времени должен вызывать schedule?

 ,

zloy_starper
()

Проблемы в самописном модуле обработки сетевых пакетов в ядре.

Форум — Development

В исследовательских целях пишу модуль, реализующий сетевой обмен в контексте ядра. На одном хосте модуль формирует IP/UDP пакет и отправляет его чрез стевой интерфейс. На другом хосте такой же модуль ставит ловушку в цепочку PREROUTING и перехватывает пришедшие пакеты. Вроде отладил, как-то это худо бедно заработало. Но заработало при обмене пакетами малых размеров. Специально начал отладку с маленьких пакетов, так как порции данных, которые надо пересылать могут быть разных размеров. Стоило увеличить размер пакетов сетевого обмена, как начались чудеса. Если payload по udp до 208 включительно, то все ок. Ставлю 216 и более - не работает. Т.е. смотрю отправляемый sk_buf перед самой передачей. Ничего подозрительного не видно в обоих случаях. Смотрю wireshark-ом на принимающей стороне. Что маленький, что большой пакеты заполнены так, как и должны (т.е. между ними не наблюдаю принципиальной разницы, кроме соответствующих размеров). Однако ловушка на приемном конце не может нормально принять большой пакет. Причем видно, что ip_total_len у пойманного пакета такая же, как у отправленного (и захваченного wireshark-ом). А вот tail почему-то указывает, что прочитан только IP-заголовок + UDP-заголовок. Ну т.е., если отправлен пакет с payload 216, то получаю разницу между data и head в 76 байт и tail 106, в итоге между data и tail 28 байт, т.е. всего на IP+UDP заголовки. А дальше мусор. Понимаю, что где-то какой-то обидный ляп, а как его теперь ловить - уже ума не приложу.

 ,

zloy_starper
()

Готовый кусок скрипта, разбирающий переданные аргументы

Форум — Development

Киньте, плиз, фрагмент скрипта, заполняющий переменные из аргументов ком. строки по шаблонам типа: -ключ1 знач1 -ключ2 знач2 -ключ3 знач3 ...

Разумеется нужен вариант, когда пользователь может задать не все аргументы, или вообще не задавать никаких.

 

zloy_starper
()

Сетевые пакеты в несколько килобайт при mtu 1500, как такое может быть?

Форум — Admin

Запустил iperf3. На пути следования пакетов меду клиентом и сервером запустил Wireshark. И показал мне Wireshark кучу пакетов по 3, 4, 7, 8 и даже по 10 килобайт. При том, что mtu везде выставлено в 1500. Я отстал от жизни? Такое возможно? Или может Wireshark автоматом собирает фрагментированные IP-пакеты? Или, может, сетевухи научились их собирать? Поставил сетевую ловушку. Она показывает, что приходят большие пакеты.

 , ,

zloy_starper
()

Можно поток ядра привязать к определенному ядру/процессору?

Форум — Development

Если можно, то как?

 

zloy_starper
()

Сетевой модуль ловушка и конкурентный доступ к ресурсу.

Форум — Development

Пишу ядерный сетевой модуль-ловушку, работающий на уровне IP_PRE_ROUTING. Модуль должен анализировать некоторые принятые сетевые пакеты. При анализе используется некое аппаратное устройство. Оно одно в железке, на которой все это должно работать. В то же время у этой железки два процессорных ядра. И вот возник вопрос. А не может ли в какой-то момент случиться так, что практически одновременно для разных принятых пакетов на разных ядрах будет исполняться код модуля?

 

zloy_starper
()

Хочу уточнить смысл работы со scatter list и DMA

Форум — Development

Читаю LDD 3. Scatter list используются, когда нет возможности выделить один непрерывный буфер для обмена через DMA. Значит создаем и заполняем данными несколько буферов. Инициализируем массив структур типа scatterlist соответствующими параметрами созданных ранее буферов (пусть массив будет называться sg, для определенности). Теперь выполняем dma_map_sg(..., sg, ...). Теперь в элементах sg должны быть прописаны шинные адреса, с которыми может работать контроллер DMA. А возвращается нам актуальное число (N) элементов sg, так как dma_map_sg мог некоторые сшить/объединить. Но теперь в соответствии с LDD нужно опять последовательно для каждого из этих N элементов sg получать шинный адрес и длину (sg_dma_address и sg_dma_len) и отдавать их контроллеру DMA. Т.е. в итоге получается, что все равно приходится отрабатывать с каждым буфером последовательно и по отдельности? Ради чего тогда все это городилось? Ну может быть IOMMU некоторые буфера «сшил». И это вся польза? Или все-таки есть некоторые DMA контроллеры, которые могут работать напрямую со scatterlist? Или я что-то не понимаю?

 

zloy_starper
()

Mate, xfce и пр.: как увеличить ширину «рамки» у окон?

Форум — Desktop

Идиотизм новомдного дизайна, когда у окон «рамку» стали выводить практически в ноль уже достал. И в данном случае я имею в виду не видимое обрамление окна (хрен с ним - пусть его не будет), а область границы окна, за которую можно растягивать, или сжимать окно. Совсем уже охренели - по умолчанию там ширина области в один пиксель что-ли. Целишься туда как снайпер при сдаче норматива. С тачпадом это вообще не реально получается. Облазил все гуевые настройки что, в Mate, что в Xfce. Не нашел что-то ничего. Понятно, что в кам-нибудь rc-файле это можно поменять (хочется надеяться). Может, кто знает, подскажите, как параметр называется, чтобы не искать. Да и где кстати тоже. Может это вообще в каком-нибудь compiz-е менять нужно?

 ,

zloy_starper
()

Не работает PCIe устройство в компе с не Intel-ой архитектурой

Форум — Development

Устройство - PCIe NT Bridge. Соответственно какого-то особенного драйвера эта штука не требует, так как для инициализации нужно то прочитать BAR-ы, да записать туда правильные данные. В обычной ПЭВМ инициализация проходит успешно уже похоже на стадии отработки BIOS (загораются контрольные индикаторы). А тут хоть тресни - не работает. Т.е. lspci не выдает ничего подозрительного. Но правильного функционирования не наблюдается. Может кто-нибудь посоветует, куда начать смотреть?

 

zloy_starper
()

Polkit authentication agent: кто знает, как это работает?

Форум — Development

Что-то как-то не могу ущучить, как такой агент состряпать. Ну понятно, что сначала надо выполнить RegisterAuthenticationAgent (). Тут мы вроде как регистрируем сессию/процесс, который будет запрашивать некие действия, и путь к объекту агента аутентификации. Теперь, насколько я понял, когда процесс (id которого мы зарегистрировали) через dbus вызовет процедуру, для выполнения которой нужна проверка прав пользователя (пусть мы хотим смонтировать раздел на винте), polkit daemon должен опять таки через dbus вызвать метод моего зарегистрированного агента BeginAuthentication (). В этом методе я получаю id действия (подробности похоже можно глянуть через EnumerateActions) и прочую инфу о том, что от меня хотят. Дальше, вроде как, нужно вызвать на Polkit метод AuthenticationAgentResponse (). А тут я уже теряю нить происходящего. Где же передавать пароль? Как получить результат аутентификации?

 ,

zloy_starper
()

Можно ли из потока ядра узнать, когда его переключит планировщик?

Форум — Development

Я имею в виду, можно ли определить, что текущий квант времени потока близок к завершению и скоро должна произойти перепланировка? Как там отработает планировщик, понятное дело, предсказать невозможно.

 

zloy_starper
()

Чем можно объяснить, что на передачу сеть работает быстрее, чем на прием?

Форум — Development

Тестировал железку на предмет пропускной способности сетевых интерфейсов. Железка дохленькая (не Интел). Заметил, что, если запускать тест на отправку трафика с этой железки, то получается в полтора раза вше пропускная способность, нежели запускать тест на прием трафика этой железкой. Интересно стало, как это можно объяснить.

 

zloy_starper
()

Unknown symbol in module. Что делать?

Форум — Development

Написал модуль ядра, откомпилировал, попытался загрузить, получил сообщение: Unknown symbol in module

Посмотрел в лог, нашел на какой вызов ругается ядро. Да, есть такой вызов в модуле (и в исходнике и в скомпилированном бинарнике/объектнике). Просмотрел system map ядра, для указанного вызова есть точка входа. Даже не могу теперь представить, в какую теперь сторону смотреть. Предыдущая версия модуля без некоторого добавленного функционала загружалась и работала, и в числе системных вызовов использовала ту же функцию, на которой загрузчик модуля спотыкается в новой версии. Какая то мистика прямо!

 

zloy_starper
()

wait_for_complition и wait_event - когда использовать одно, или другое?

Форум — Development

Когда то давно писал относительно простенький драйвер char-устройства. В нем чтение блокировалось с помощью wait_event, если буфер был пуст, ну и, соответственно, пробуждалось с помощью wake_up из обработчика прерываний, когда данные поступали в буфер.

Теперь понадобилось сделать нечто похожее, но только читаемые/записываемые данные должны обрабатываться через Crypto API ядра. Глянул примерчики, как этим хозяйством пользоваться. Там, соответственно, вызывается crypto_ablkcipher_encrypt/decrypt, а затем wait_for_complition для ожидания завершения операции. crypto_ablkcipher_encrypt/decrypt стартует поток обработки, который по завершению делает калбэк, по которому надо вызвать complete.

И вроде бы в обеих случаях делается одно и то же. Но в чем тогда разница? И когда следует использовать механизм очередей, а когда complition?

 

zloy_starper
()

Присоветуйте, чем бы рисовать графики в режиме реального времени.

Форум — Development

Собственное задачка проста, как 5 копеек. Нужно отрисовать простенький график, на котором будут отображены частоты возникновения различных событий. Тут подошел бы и GNU Plot. Но надо через каждую дельта Т «освежать» график. С GNU Plot это будет выглядеть не очень хорошо. Какие еще есть альтернативы?

 ,

zloy_starper
()

Помогите разобраться с u-boot

Форум — Development

Предположим, что я хочу стартануть систему таким образом: bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}

Это означает, что по указанным адресам уже должны лежать соответственно ядро, рамфс и dtb. Если в железке есть флэшка, в которой прошиты по соответствующим смещениям эти три компонента так, что в общем адресном пространстве они отображаются по указанным трем адресам, то по большому счету такая команда запустит систему. Я правильно понимаю?

Теперь вопрос, а зачем еще нужна команда fdt применительно к bootm? Ведь fdt addr ничего никуда не грузит, а только сообщает адрес dtb. Т.е. если я указываю в bootm адрес dtb, то fdt тут уже лишняя?

Следующий вопрос, правильно ли я понимаю порядок загрузки с внешних источников. В этом случае нужно загрузить в память по соответствующим адресам уже в ОЗУ ядро, рамфс и dtb. А затем опять соответственно запускать bootm только теперь с правильными адресами в ОЗУ. Верно?

 

zloy_starper
()

Никак не могу понять, как с помощью file/libmagic определить тип Microsoft Word

Форум — Development

По сути это ведь XML, положенный в zip-архив. Именно так эта хрень и определяется. Т.е. как архив. Ну или, если попросить просматривать архив, то как XML. Но всякие файл-менеджеры в Gnome/Xfce и прочие определяют такие файлы именно как Microsoft Office документ. И в самом magic-файле данный тип есть.

 

zloy_starper
()

Почему у потока меняется ID?

Форум — Development

По мере выполнения потока в некоторый момент вдруг меняется его ID. Иными словами с некоторого момента времени pthread_self() начинает выдавать не тот ID потока, что был изначально. Причем новый ID по значению равен младшей части изначального. Что-то не пойму, как такое может быть. И даже не соображу пока, где искать ошибки.

 ,

zloy_starper
()

Можно ли определить условия компиляции отдельного модуля с помощью autoconf?

Форум — Development

Предположим, к примеру, в состав исходников входят модули mod1.c, mod2.c.

Можно ли как-то задать в скриптах возможность выбора режимов сборки, чтобы в одном режиме компилировался только mod1.c, а в другом и mod1.c и mod2.c?

 

zloy_starper
()

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