LINUX.ORG.RU

Сообщения k000858

 

systemd -> python3-loop

Форум — Development

Всем привет!

Имеется питоновый скрипт (в нем много чего но сузил до минимума что бы обозначить проблему)

#!/usr/bin/python3

import time

print("HelloWorld")

if __name__ == '__main__':
	print("-main-")
	while True:
		print("-loop-")
		time.sleep(5)

При запуске скрипта вручную, все хорошо - цикл крутится, мессаги сыпятся.

При запуске из systemd нет даже «HelloWorld». Стоит из скрипта убрать «while True:» как скрипт начинает нормально запускаться из systemd

В systemd скрипт запускается через

User=root
ExecStart=python3 <путь>/my.py

Это что то нитак с py (теоретически в нем может быть много всего вплоть до работы с железом и тд, не хотелось бы его менять) ? Или в systemd такого рода скрипт нужно по-другому запускать?

 ,

k000858
()

Сборка Uboot

Форум — Development

Всем привет!

Собираю Uboot для MIPS32R2 с помощью тулчейна, собранного в buildroot (2018.02.9). Образ загрузчика собирается, все ок. Проблема в следующем: размер образа загрузчика получается значительно больше чем получается у вендора, от кого и были получены исходники uboot для его железа.

Конфиг сборки uboot использую готовый, без каких либо правок, который был получен вместе с исходниками самого uboot от вендора.

Быть может я при сборке тулчейна что то не учел, в связи с чем он компилирует в последствии такой жирный бинарник? может какие то опции надо было выбрать специфичные?

 , , ,

k000858
()

Видимость функций

Форум — Development

OpenWrt: в ядре есть cfg80211, скомпилен как модуль ядра, так же есть драйвер который скомпилен как модуль ядра. Необходимо сделать так, что бы драйвер видел функции модуля cfg80211. Как сделать?

 ,

k000858
()

Трассировка выполнения функций ядра

Форум — Development

Всем привет!

Часто случается, что во время отладки дров или какого то программного модуля в ядре, возникает необходимость понять, какая функция за какой вызывается в том или ином исходничке. Для этих приходится тупо вставлять printk, компилить, смотреть на результат, затем снова printk и так до посинения, пока не завершишь интересующий тебя «reverse-engenering.»

Быть может есть в ядре, стандартные способы снятия такой трассировки? из опробованных strace (и подобных) научился только этой самой тулзой запускать какой то процесс (по сути бинарник в user-space) и только в этих условиях видеть цепочки вызовов. А для ядреных процессов такой не нашлось

 ,

k000858
()

Самый интересный проект

Форум — Talks

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

 , ,

k000858
()

Python: сборка модуля в Buildroot'е

Форум — Development

Собираю питоновский модуль в билдруте (то есть вместе с рутфс линукса), питон3. Сам модуль оформлен в виде пакэйджа (билдрут стайл) по примеру соседних пакэйдей (тоже питоновских модулей). Модуль pandas - строиться на модуле numpy. Numpy есть родной в билдруте (тоже оформлен в виде пакейджа билдрут стайл). Проблема заключается вот в чем: при сборке родительский модуль не видит уже скомпилированные подмодули - в частности Numpy.

Например:

в setup.py

setup(
 'setup_requires': ['numpy >= {numpy_ver}'.format(numpy_ver=min_numpy_ver)],
)
вызывает скачивание модуля (по видимому pip'ом) модуля Numpy (хотя он уже есть и собрался).

там же

numpy_incl = pkg_resources.resource_filename('numpy', 'core/include')
приводит к ошибке ModuleNotFoundError: No module named 'numpy'

Может есть какие то ньюансы при сборке на хосте а не запуске модуля на таргете?

 , ,

k000858
()

Организация GIT-репозитория

Форум — Development

Есть корпоративный репозиторий (Gitlab). Необходимо дать публичный доступ, но с оговоркой: видна должна быть только ветка master, т.е. вся внутренняя кухня (текущая разработка) видна быть не должно до попадания в мастер. Знаю, что в силами самого Git-а доступ (по сути видимость) веток не разграничить. Пока видится одно решение, на мой взгляд костыльное: создать форк основного репозитория, мастер форка синкается с мастером основного репозитоия, наружу дать доступ только до форка.

Может есть более изящный способ такое осуществить?

 ,

k000858
()

Проприетарный драйвер

Форум — Development

Есть дистрибутив, который необходимо выкладывать в открытый доступ, и который включает драйвер, скачанный из интернета (считай сворованный). Необходимо чтобы все компилировалось, но исходники проприетарного драйвера светить нельзя. Очевидный выход - завернуть исходники в блобы (предкомпилированный бинарник). Это нарушит лицензию? Что если автору проприетарного драйвера это не понравится, что он может от меня потребовать? Как обойти эти заморочки с лицензиями?

 , ,

k000858
()

OpenWrt: производительность PPPL2TP/PPtP

Форум — General

Есть роутер, на него собрана прошивка из последних исходников openWrt. В билд включена поддержка протоколов + xl2tp. В ПО включена софтварная.хардварная разгрузка потоков. При этом производительность l2tp < 300Mbits/s. Как так?

Судя по отладочное инфе, поток TCP (iperf3) разгружается т.к. он идет транзитом (FORWARD). UDP же (на основе которого реализуется PPP) под разгрузку не попадает т.к. пакеты INPUT/OUTPUT

https://www.kernel.org/doc/Documentation/networking/nf_flowtable.txt

Что может так тормозить? Как можно попробовать продиагностировать?

ЗЫ: на альтернативном ПО этот же роутер выдавливает раза в два больше скорости по l2tp

 ,

k000858
()

Ubuntu-16: .config из /home/user в /media/user/disk/ (VSCode, Sublime-Text, etc)

Форум — General

Ubunta установлена в VirtualBox на виртуальный диск (ограниченного размера, расположенный на SSD), в системе подключен второй виртуальный (Hard), на котором происходит компиляция и прочая работа с файлами (/media/user/disk/). В работе используется такой софт как Visual Studio Code, Sublime-Merge, и тд), который очень любит индексировать весь контент в рабочем пространстве и при этом складывает весь этот кэш в /home/user/.config (гигабайты), чем съедает ни мало ограниченного SSD. Хотелось бы перенести эти самые кэши на файлопомойку к остальным файлам (/media/user/disk/).

Как это можно сделать? Может в самих программах а может на уровне системы?

 , ,

k000858
()

Wireless драйвер: ioctl SIOCGIWNAME

Форум — Development

Имеется wifi чип, драйвер под openwrt (4.14.*). Драйвер исправно работает (wifi так же работает хорошо), однако не могу до драйвера не могу достучаться через ioctl - при попытке не происходит вызова .ndo_do_ioctl колбэка. Достучаться в основном пытаюсь с помощью команды SIOCGIWNAME (да и многими другими, которые в драйвере описаны), однако например 0x8947 команда колбэк все же вызывает.

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

 ,

k000858
()

Packet Processing Engine (PPE): NAT Offload

Форум — Development

Кто нибудь имел дело с программной поддержкой такой аппаратной фичи?

Сейчас маюсь с таким модулем SoC'а MT7621. Имеется в наличии фирменная библиотека Ralink, активирующая такую фичу, прикрутил ее к OpenWRT в связке с фирменным ethernet драйвером. Но хардварный нат так и не заработал.

Проблема в том, что нет понимания (хотя бы абстрактного) как это должно работать. Сейчас имею примерно такое представление: каждый полученный ethernet фрейм до попадания в драйвер (то есть в память CPU = OS) проходит через со-процессор PPE, который в дескрипторах фрейма прописывает определенные поля (каждого фрейма) и меняет адреса в IP заголовках (если пакет подлежит ре-трансляции).

Поправьте меня, если я неверно представляю себе механизм работы.

В моем случае, нет никаких признаков работы со-процессора, то есть нет записей в дескрипторах полученных фреймов. Может натолкнете в верном направлении, куда капать? Может кто то сталкивался с подобной задачей или имел дело с аппаратным натом Ralink.

PS: регистры PPE при иниализации прописываются корректно

 ,

k000858
()

Связка /dev/file с /proc/devices/file

Форум — Development

Ковыряю связку driver + tool не могу кое что понять.

Драйвер создает символьное устройство (создается соответствующий файл в /proc/devices), а тулза создает файл в /dev с таким же название и таким же номером через mknod. В последствии тулза взаимодействует (считывает/записывает параметры) с устройством через ioctl файла в /dev

Получается, файл в /dev как то связывается с устройством (тоже по сути файлом) в /proc/devices. Я ошибаюсь, если думаю, что ОС сама как то осуществляет эту связку? Как тогда это работает?

 ,

k000858
()

Расшифровка краха

Форум — Development

Отлаживаю драйвер ethernet, ядро-4.14.* (openwrt)

Крах происходит при повышении количества исходящего трафика.

Быть может кто то сможет по дампу направить, куда примерно капать?

[  121.145173] INFO: rcu_sched self-detected stall on CPU
[  121.155397] 	0-...: (1 GPs behind) idle=bd6/2/0 softirq=2552/2553 fqs=2991 
[  121.169232] 	 (t=6000 jiffies g=1283 c=1282 q=294)
[  121.178767] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.34 #0
[  121.190705] Stack : 00000000 00000000 00000000 00000000 80687ada 00000034 00000000 00000000
[  121.207332]         805026f4 80502287 804948bc 00000000 00000000 00000001 8fc09b70 2c45ddf5
[  121.223958]         00000000 00000000 80680000 00001c18 00000000 00003656 00000007 00000000
[  121.240584]         00000000 80500000 0002ba4f 00000000 00000000 00000000 80510000 804098a4
[  121.257210]         80507c60 805000ac 000000e0 80500000 00000003 8027ccb8 00000000 80680000
[  121.273838]         ...
[  121.278695] Call Trace:
[  121.283578] [<80010498>] show_stack+0x58/0x100
[  121.292426] [<803e53dc>] dump_stack+0x9c/0xe0
[  121.301085] [<8000d9d8>] arch_trigger_cpumask_backtrace+0x50/0x78
[  121.313207] [<800838c8>] rcu_dump_cpu_stacks+0xc4/0x13c
[  121.323593] [<80082d24>] rcu_check_callbacks+0x310/0x814
[  121.334161] [<80086294>] update_process_times+0x34/0x70
[  121.344566] [<80096d2c>] tick_handle_periodic+0x34/0xd0
[  121.354969] [<802fab78>] gic_compare_interrupt+0x48/0x58
[  121.365534] [<80076740>] handle_percpu_devid_irq+0xbc/0x1a8
[  121.376630] [<80070ab0>] generic_handle_irq+0x40/0x58
[  121.386692] [<8023a874>] gic_handle_local_int+0x84/0xd0
[  121.397078] [<8023aa34>] gic_irq_dispatch+0x10/0x20
[  121.406772] [<80070ab0>] generic_handle_irq+0x40/0x58
[  121.416827] [<80401e0c>] do_IRQ+0x1c/0x2c
[  121.424795] [<80239abc>] plat_irq_dispatch+0xfc/0x138
[  121.434836] [<8000b5a8>] except_vec_vi_end+0xb8/0xc4
[  121.444706] ------------[ cut here ]------------
[  121.453888] WARNING: CPU: 0 PID: 0 at kernel/smp.c:416 smp_call_function_many+0xc8/0x3bc
[  121.469970] Modules linked in: ppp_async ppp_generic iptable_nat iptable_mangle iptable_filter ipt_REJECT ipt_MASQUERADE ip_tables xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_FLOWOFFLOAD x_tables slhc nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv4 nf_log_common nf_flow_table_hw nf_flow_table nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack crc_ccitt leds_gpio gpio_button_hotplug
[  121.560848] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.34 #0
[  121.572782] Stack : 00000000 00000000 00000000 00000000 80687ada 00000034 00000000 00000000
[  121.589409]         805026f4 80502287 804948bc 00000000 00000000 00000001 8fc09ad8 2c45ddf5
[  121.606036]         00000000 00000000 80680000 00002500 00000000 00003671 00000007 00000000
[  121.622662]         00000000 80500000 00088ed0 00000000 00000000 00000000 80510000 8009e724
[  121.639291]         00000009 000001a0 8000d19c 00000000 00000003 8027ccb8 00000000 80680000
[  121.655919]         ...
[  121.660775] Call Trace:
[  121.665630] [<80010498>] show_stack+0x58/0x100
[  121.674463] [<803e53dc>] dump_stack+0x9c/0xe0
[  121.683125] [<8002e1d8>] __warn+0xe0/0x114
[  121.691265] [<8002e29c>] warn_slowpath_null+0x1c/0x30
[  121.701305] [<8009e724>] smp_call_function_many+0xc8/0x3bc
[  121.712210] [<8000d9f0>] arch_trigger_cpumask_backtrace+0x68/0x78
[  121.724326] [<800838c8>] rcu_dump_cpu_stacks+0xc4/0x13c
[  121.734711] [<80082d24>] rcu_check_callbacks+0x310/0x814
[  121.745271] [<80086294>] update_process_times+0x34/0x70
[  121.755661] [<80096d2c>] tick_handle_periodic+0x34/0xd0
[  121.766052] [<802fab78>] gic_compare_interrupt+0x48/0x58
[  121.776611] [<80076740>] handle_percpu_devid_irq+0xbc/0x1a8
[  121.787691] [<80070ab0>] generic_handle_irq+0x40/0x58
[  121.797736] [<8023a874>] gic_handle_local_int+0x84/0xd0
[  121.808123] [<8023aa34>] gic_irq_dispatch+0x10/0x20
[  121.817819] [<80070ab0>] generic_handle_irq+0x40/0x58
[  121.827862] [<80401e0c>] do_IRQ+0x1c/0x2c
[  121.835830] [<80239abc>] plat_irq_dispatch+0xfc/0x138
[  121.845871] [<8000b5a8>] except_vec_vi_end+0xb8/0xc4
[  121.855746] ---[ end trace 4819de8eb648354a ]---

 , ,

k000858
()

Получение irq_fwspec

Форум — Development

Имеется драйвер, в инициализацию которого передается struct net_device. В драйвере необходимо активировать прерывание (через request_irq). Для этого необходимо получить irq_fwspec, зная hwirq (Harware IRQ).

Знаю, что это можно сделать, вызвав irq_find_mapping, но функция требует передачи struct irq_domain*, которой в драйвере нет. Для ее создания требуется в свою очередь struct device_node.

В общем необходимо получить irq_fwspec, имея struct net_device.

Как можно такое осуществить?

Ядро 4.14.* В него интегрирую драйвер, который не использует Device Tree, через который обычно задается irq_fwspec через hwirq.

 , ,

k000858
()

Потери пакетов: netif_receive_skb = -1

Форум — Development

Адаптирую драйвер сетевого устройства под OpenWRT (kernel-4.14.*), выдранный из SDK с kernel 3.10.*

Драйвер в принципе уже минимально работает (принимает и отправляет пакеты) однако часть пакетов теряется. По-видимому причина в netif_receive_skb = -1.

В каких случаях может такое происходить? Какому флагу соответствует -1 (1 = NET_RX_DROP).

 ,

k000858
()

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