LINUX.ORG.RU

Сообщения velikS

 

Можно ли с select() отслеживать, что в файле появились новые данные?

Форум — Development

Всем привет,

Что-то торможу я в понедельник с простым вопросом. Проблемка примерно следующая: udev при подключении/отключении какого-либо устройства добавляет в /tmp/device файл строку, например, «+ mmc» или "- mmc". Хочу в моей программе получать инфу, в момент, когда новая запись добавляется в файл. И хотел сделать это с select(). Написал примитивную программку (см ниже). Так вот прикол в том, что select() всегда возвращается и read() читает 0 данных из файла. Что я делаю не так? Может select() не годится для слеженуя за нормальными файлами? select() мне был бы интересен, поскольку есть еще в программе netlink-соцкет, который я зацепил на select(), хотелось бы еще и эту часть связать с select()

Всем заранее спасибо

int m_fd = open( «/tmp/device», O_CREAT | O_RDONLY | O_SYNC );

while(1)
{
fd_set rfds;
char buffer[10000];
int rd;

FD_ZERO( &rfds );
FD_SET( m_fd, &rfds );

pselect( m_fd+ 1, &rfds, NULL, NULL, NULL, NULL );

if( FD_ISSET(m_fd, &rfds) )
{
rd=read( m_fd, buffer, sizeof(buffer) );
}
usleep(5000000);
}

velikS
()

сообщение от udev о подключении устройства на USB

Форум — General

Всем привет,

Знает ли кто есть ли в udev какой механизм, чтоб оповещать приложение о подключении устройства? В моём случае, есть аппликуха, которой необходимо знать, что в данный момент подключился/отключился USB->LAN или USB-Serial converter или SD карточка. Единственное, что приходит в голову: писать файл в tmpfs и в моём приложении этот файл отслеживать, но, как мне кажется, в udev должен быть какой-то стандартный механизм

Всем спасибо за идеи,
velik

velikS
()

определить в embedded устройстве подключение/отключение по USB

Форум — General

Всем привет.

Есть примерно следующая проблемка, интересно мнение зала на рещения: собирается одна плата с USB хостом и слотом для SD карточки. Нужно - в программе получить сигнал, что то или иное устройство подключили/отключили и соответственно среагировать: примонтировать, переписать и т.д. Ща школьники крикнут:«udev!». Но udev слишком большой и не подходит. В busybox есть mdev. Но mdev только создает nodes в /dev.
Захотел сделать примерно следующее: в /etc/mdev.conf вписать правило, которое в известный мне файл записывает что-то известное при подключении и отключении устройства. К примеру, когда устройство подключается, появляется:

+ mmcblk0

а когда отключается, то соответственно:

- mmcblk0

Моя программа могла бы по select() присматривать за файлом.

Но фишка в том, что правило mdev, вызывается только для первой строки:


mmc.* root:1 0660 @(echo «+ $MDEV» >> /home/test)
mmc.* root:1 0660 $(echo "- $MDEV" >> /home/test)


Т.е. когда подключу устройство, то вижу в файле «+ mmcblk0», когда отключу, то ничего нового не появляется. Если поменять в правиле строки местами, то появляется строка при отключении устройства, но не при подключении.

Kто-то уже разбирался с mdev? В чем могут быть грабли?
Еще интересуют альтернативные пути. Как еще можно решить проблемку без mdev? В голову приходить только слушать uevents от Кернела по его Netlink сокету


Всем спасибо

velikS
()

Какие драйверы надо активировать, чтоб получить поддержку этого устройства?

Форум — General

Всем привет!

Собираю тут embedded плату на АРМ процессоре. Есть в приборе USB Host. По нему без проблем подключаю USB Memory Stick. А что надо активировать в kernel, чтоб заработал этот

http://www.delock.de/produkte/gruppen/USB%20Adapter/Delock_USB_20_Gigabit_LAN...


У меня 2.6.37

спасибо

velikS
()

Отваливается Qt приложние по «Segmentation fault»

Форум — Development

Всем привет!

Имею примерно следующее: Система с АРМ-процессором и 64МБайт RAM на борту. Работает 2.6.37, Qt4.7.1 и rootfs собраны с Buildroot2010.11. Когда запускаю приложение собранное с Qt, получаю «Segmentation fault». Причем даже для случая, когда в main() этой программы стоит:

printf(«Test»);
return 0;

Запустил своё приложение с strace. Он выдал в конце примерно следующее:

stat(«/lib/ld-uClibc.so.0», {st_mode=S_IFREG|0755, st_size=21200, ...}) = 0
mprotect(0x40133000, 12288, PROT_READ) = 0
mprotect(0x40024000, 4096, PROT_READ) = 0
mprotect(0x40187000, 4096, PROT_READ) = 0
mprotect(0x4019f000, 4096, PROT_READ) = 0
mprotect(0x401b0000, 4096, PROT_READ) = 0
mprotect(0x40079000, 4096, PROT_READ) = 0
mprotect(0x4008b000, 4096, PROT_READ) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 opost isig icanon echo ...}) = 0
getpid() = 353
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=16778261}) = 0
setrlimit(RLIMIT_STACK, {rlim_cur=2040*1024, rlim_max=16778261}) = 0
rt_sigaction(SIGRTMIN, {0x401970fc, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x40197014, [RTMIN], 0x4000000 /* SA_??? */}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {0x40196480, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
brk(0) = 0x12000
brk(0x13000) = 0x13000
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++


Т.е. как я понимаю, проблема в этом?:
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=16778261}) = 0
setrlimit(RLIMIT_STACK, {rlim_cur=2040*1024, rlim_max=16778261}) = 0

Был запрошен лимит стэка у системы, она сказала - лимит 8МБ, запросилось установить стэк на 2МБ, ядро прислало сообщение:«Привет, ты нам не товарищ». Т.е. проблема в ядре???? Как и где можно на такое повлиять?

заранее Спасибо

velikS
()

Совершенно дурацкий вопрос: переменные окружения...

Форум — General

Совершенно дурацкий вопрос: переменные окружения...

Есть embedded система с 2.6.37 и BusyBox1.16 на борту. Летом был написан примитивный скрипт, который запускается из etc/init.d:

#!/bin/sh


export PATH=\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/usr/local/bin:\

export TSLIB_CONSOLEDEVICE=none
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CALIBFILE=/home/user/ts.calibr
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_PLUGINDIR=/usr/lib/ts
export QWS_MOUSE_PROTO=«tslib:/dev/input/event1»
echo 100 > /sys/class/backlight/backlight/brightness


Когда «вручную» запускаю одну из программ, которой нужны эти переменные, то программа отваливается с сообщением, что переменная не определена. Причем, что интересно, когда запускаю эту же программу из этого скрипта, то она запускается и не жалуется.

Когда из шела набираю «echo $TSLIB_FBDEVICE», то ничего не печатается - я так понимаю, что переменная пустая. Блин, туплю я! Подскажите, как определить в sh глобальную переменную, которую будут видеть все программы

Спасибо

velikS
()

как сохранить битмап с палитрой?

Форум — General

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

velikS
()

rootFS через nfs. Не могу залогиниться как root

Форум — General

Всем привет,

Собираю тут одно embedded устройство с Линуксом на борту. Столкнулся с примерно следующей проблемой: собрал rootFS с Buildroot в каталоге /home/Developer/rootfs/rootfs. Делаю jffs2 имидж с этого каталога, записываю во флэш память устройства - всё работает на Ура. Но не кайф каждый раз программировать прибор. Поэтому настроил U-boot на загрузку ядра по TFTP и на загрузку rootFS по NFS c такими параметрами:


#define CONFIG_BOOTARGS \
«console=ttyS0,115200 root=/dev/nfs » \
«nfsroot=192.168.1.2:/home/Developer/rootfs/rootfs » \
«ip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off » \

Ядро грузится, вроде подключается rootFS, но могу залогиниться только как user, когда пробую рутом, то выдаёт:


IP-Config: Complete:
device=eth0, addr=192.168.1.3, mask=255.255.255.0, gw=192.168.1.1,
host=192.168.1.3, domain=, nis-domain=(none),
bootserver=192.168.1.2, rootserver=192.168.1.2, rootpath=
VFS: Mounted root (nfs filesystem) on device 0:12.
Freeing init memory: 172K
eth0: link up (100/Full)
Initializing random number generator... done.
Starting vsftpd: OK

Welcome to P3
P3 login: root
Login incorrect


В чём проблема? Может кто сталкивался с чем-то подобным?

Спасибо,
velik

velikS
()

Как защитить линукс-систему от считывания?

Форум — General

Всех с Новым ГОДОМ!!!

Несмотря на головную боль от вчерашнего спиртного, болит голова ещё и от тхнических проблем. Проблема примерно в следующем: собирается одно embеdded устройство с ARM процессором на борту. Линукс и root FS будут записаны на чипе NAND флэш памяти.

Интересно, есть ли надёжные программные способы защитить устройство от злобных китайцев, если для считывания программ уже достаточно выпаять флэшку, считать её и записать в другую?

Всем спасибо
Velik

velikS
()

Создать патч с бинарным файлом?

Форум — Development

Всем привет.

Изменил я, к примеру, исходник u-boot и добавил в него один битмап файл. Вопрос: можно (и если да, то как) ли создать патч? Похоже с diff можно создавать только патчи текстовых файлов. Как быть с бинарником?

Всем спасибо,
Velik

velikS
()

проблема при компиляции модуля ядра

Форум — Development

Всем привет!

Проблему немного трудно описать, но я попробую :)
Имеется Ubuntu 10.04, в котором необходимо необходимо изменить 1 строку в usbserial.c. Нашел, как народ вроде как решил эту проблему:

http://www.at91.com/forum/viewtopic.php/f,26/t,19128/st,0/sk,t/sd,a/sid,ac205...

Пробую следовать описанию и сталкиваюсь с тем, что когда выполняю

make M=drivers/usb/serial/

получаю:


/usr/src/modulehack/linux-headers-2.6.32-21-generic/arch/x86/Makefile:81: stack protector enabled but no compiler support
CC [M] drivers/usb/serial/usb-serial.o
cc1: error: unrecognized command line option "-mregparm=3"
Assembler messages:
Error: unknown architecture `i586'
Error: unrecognized option -march=i586
drivers/usb/serial/usb-serial.c:1: error: bad value (i586) for -march= switch
make[1]: *** [drivers/usb/serial/usb-serial.o] Fehler 1
make: *** [_module_drivers/usb/serial] Fehler 2


Кто-то сталкивался с чем-то подобным? Как можно решить?


Спасибо за советы
Velik

velikS
()

Стандартная проблема с mount/umount «device or recourse is busy»

Форум — General

Всем привет!

Есть одна проблемка, думаю, для неё должно быть стандартное решение. Сразу упомяну - речь идёт о встроенной системе, где максимум, что есть - busybox. Так вот задачка в двух словах: есть устройство с SD-слотом, когда карточка вставлена, надо её примонтировать и сказать другой программе, что карта есть и можно на неё писать, ну и когда карту вытащили, надо соответственно её отмонтировать и сказать другой программе, что карты собсна нету.
Контролирую, что карта вставлена, по появлению /sys/block/mmcblk0. Когда директория, появляется монтирую с:
mount( /dev/mmcblk0p1, /mnt/SD, «vfat», MS_SYNCHRONOUS, NULL);

Когда системная директория пропадает, то отмонтирую с:
umount2( /mnt/SD, MNT_FORCE );

Всё работает хорошо, пока карта не вытаскивается во время записи другой программой. В этом случае карту невозможно отмонтировать. Максимум, что нашёл в гугле это то, что в таком случае надо «убить» программу с открытым доступом к карте, а после этого отмонтировать. Неужели нет другого решения?

Спасибо
velik

velikS
()

Примитивный вопрос: как найти в sh строку в стороке?

Форум — Development

Всем привет!

Немного запарился гуглить отрвет на простой вопрос. Думаю, будет быстрее тут найти ответ. Проблемка следующая: есть некоторый диск, который надо монтировать. Но этот диск при первом запуске прибора может быть не отформатирован. Поэтому хочу написать скрипт, который пробует примонтировать диск, результат mount пишет в переменную-строку. Потом ищет в строке слово «failed», если находит, то форматирует диск и монтирует заново. Вопрос примитивный: как найти слово failed в строка на sh?

Всем спасибо, velik

velikS
()

С++. Callback функция

Форум — Development

Всем привет,

Хочу реализовать примерно следующее: класс Parser, который содержит объект Socket. Socket запускает thread и при приёме данных вызывает метод в Parser и передаёт ему принятые данные.
Вопрос примерно следующий: можно ли это как-то реализовать в C++, не объявляя эту Callback функцию в Parser как static?

Всем спасибо
Velik

velikS
()

Даталоггер с ограниченным количеством строк

Форум — Development

Всем привет!

Нужно что-то вроде syslogd, которое слушает UDP порт и записывает сообщения в лог-файл. Когда файл набирает, напримет, 1000 строк, первая строка из файла удаляется. Есть ли что-то такое готовое? syslog+cron не подходят, так как приложение будет работать во встроенной (embedded) системе c ограниченными ресурсами.

Всем спасибо,
velik

velikS
()

Как настроить avahi на 2 интерфейса?

Форум — Admin

Всем привет!


Есть небольшая проблемка, которая админам, точно, покажется смешной. Но сами мы не местные ;-) Есть устройство с интерфейсами usb0 и eth0. На оба хочу натравить avahi-autoipd. Ставлю avahi-autoipd на eth0, получаю адрес, пингую его с другого компа - всё работает. Ставлю avahi-autoipd на usb0, получаю адрес, пингую его с другого компа - всё опять работает. Но когда включаю 2 avahi на оба интерфейса, то, хотя оба и получают адреса, не могу пропинговать ни eth0 ни usb0. В чем может быть проблема и как настроить? В routing таблице стоят, естессно, 2 одинаковых пути с 169.254.0.0 и маской 255.255.0.0

Всем спасибо.
Velik

velikS
()

Как отловить «eth0: link up» и «eth0: link down»

Форум — Admin

Всем привет!

Что-т туплю я сегодня. Кто знает способ, как можно поймать два этих «сообщения» ядра. Меня интересует совершенно примитивная вещь: воткнут Ethernet кабель - есть интерфейс eth0, выткнут - нет его. Интерфейс можно «включить» с ifconfig etho up, а вот как сделать так, чтоб он «включался» с кабелем?

Спасибо за ответы

velikS
()

Подружить DHCP клиент и avahi

Форум — Admin

Всем привет,

Есть задачка примерно следующего плана: имеем прибор с LAN интерфейсом. Как один из вариантов применения этот прибор может быть подключён к какому либо роутеру. В этом случае прибор должен определять свой IP адрес по DHCP. В другом варианте применения этот прибор может быть подключён прямо к компу или к такому же прибору. В этом случае никакого DHCP сервера в системе нет и IP адрес должен определяться автоматически через Zeroconfig-avahi.

Как можно решить эту задачку? Есть ли стандартные решения?

Всем спасибо,
velik

velikS
()

IP через USB. Как узнать названия устройств?

Форум — Admin

Всем привет!

Хочу связать компьютер с одной платой (на плате есть USB host и USB device) по IP протоколу. Скомпилировал ядро для платы с поддержкой g_ether. Запускаю, конфигурирую с «ifconfig usb0». Появляется интерфейс usb0. Но вот не знаю, это USB host или USB device определился как usb0? И как опеделить какой из USBшников на компе связан с ip протоколом, если он тут тоже сконфигурировался, как usb0, а в компе 4 USB host-a?


Спасибо за ответы или за посылку к полезному источнику информации ;-)
velik

velikS
()

Как реализовать модуль, который бы выполнялся

Форум — Development

с частотой, скажем, 100Hz? Без всяких RTAI и RT патчей...

Спасибо за идеи

velikS
()

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