Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
Lincon-8000, проблема с загрузкой собственного софта при старте (страница 1)

Версия для печати (настроить)
Страницы: 1 2

Новая тема | Написать ответ

Подписаться

Автор Тема:   Lincon-8000, проблема с загрузкой собственного софта при старте
Клаус
unregistered
написано 12 Декабря 2007 06:34  ПравкаОтветитьIP

Господа, никто не сталкивался с подобной проблемой?

Имеется машинка Lincon-8k, os armlinux, делаю все по науке (плюс то же самое для незнающих написали в мануале). Помещаю стартовый скрипт в /etc/init.d, устанавливаю маску 755, делаю линк на скрипт в /etc/rc2.d. В скрипте в поле start оставляю строку, которая будет писать лог о том, что скрипт запустился в такое-то время.

Дале проверяем скрипт руками. Все ок. Скрипт пишет лог в файл, запускает бинарничек, все здорово. Проверяем перезагрузкой. В результате получаем запись в лог (скрипт выполняется), и полное отсутствие бинарника в списке процессов. Причем у меня три разных линкона, на всех трех это оно самое. Т.е. явно дело в моих кривых руках. При этом на слакваре (уже х86, а не линкон) эта схема работает нормально.

Подскажите что делать?

з.ы. бинарник лежит на компакт флешке.

bessonov3
Member

Сообщений: 37
Регистрация: Май 2007

написано 12 Декабря 2007 12:05ИнфоПравкаОтветитьIP

Uvereny li vy, chto binarnik zapuskaetsya v fonovom rezime?

Клаус
unregistered
написано 12 Декабря 2007 17:51  ПравкаОтветитьIP

имеется ввиду пишу ли я в скрипте:
/root/bin_file &
или
/root/bin_file >> bin_file.log &

тогда да, уверен. скриптом файл запускается в фоновом режиме, работает как надо и выводится через список процессов например `ps ax | grep bin_file`

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

памагите люди добрые

Добавление от 12 Декабря 2007 18:02:

#!/bin/sh
#
# /etc/init.d/some_script
usage()
{
echo "Usage: {start|stop|restart}"
}

case $1 in

start)
cd /root
echo "Starting binary" >> start.log
/root/bin_file >> bin_file.log &
exit 0
;;

stop)
killall bin_file
exit 0
;;

restart)
$0 stop
$0 start
exit $?
;;

*)
usage
;;

esac

done

**EOF**

делаем:

$/etc/init.d/some_script start

бинарник запускается, эхо пишется

ребутаемся. пишется только лог (правильный линк на скрипт в нужном ранлевеле есть), в файл bin_file.log попадает пустая строка, самого бинарника не видать

bessonov3
Member

Сообщений: 38
Регистрация: Май 2007

написано 12 Декабря 2007 18:12ИнфоПравкаОтветитьIP

Проверьте /etc/inittab , запускает ли он rc2 ?

Попробуйт набрать init 2 , стратует ли бинарник?

Перед /root/bin_file >> bin_file.log & добавьте df -h

Клаус
unregistered
написано 13 Декабря 2007 15:51  ПравкаОтветитьIP

в /etc/inittab стоит runlevel 2

делаем

$init 3

скрипт не запускается (неудивительно). потом

$init 2

снова запускается скрипт, бинарник не появляется

говорю сразу, потому что это я уже делал

df -h добавлю как доберусь до линкона

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

bessonov3
Member

Сообщений: 40
Регистрация: Май 2007

написано 13 Декабря 2007 18:23ИнфоПравкаОтветитьIP

Stranno...

A dobavit v script?
start)
echo start1 binary >> err.log
/root/bin_file 2>>err.log
echo start2 binary >> err.log


Kakoe nazvaliye scripta? porobuyte sdelat nachalo nazvaniye v /etc/ini.d i (analogichno link v /etc/rc2.d) S99somescript

Nado zastavit ego napisat kakunibud osybku.

Клаус
unregistered
написано 14 Декабря 2007 03:50  ПравкаОтветитьIP

"start1 binary" и "start2 binary" - в кавычках писать?
или start1, binary и start2 - это что-то из синтаксиса шелла и писать нажно без кавычек?

ок, сделаю, завтра к вечеру напишу что получилось...

у меня такое подозрение что не успевает монтироваться cf карточка (программа, даже не находясь на ней все равно читает оттуда конфиг и пишет туда логи)... но даже если она, допустим, не прочитает конфиг, то в stdout все равно попадает сообщение об ошибке, которое должно попасть в лог через >>
:(

Добавление от 14 Декабря 2007 03:54:

>>Kakoe nazvaliye scripta? porobuyte sdelat nachalo nazvaniye v /etc/ini.d i (analogichno link v /etc/rc2.d) S99somescript


название вот такое
скрипт:
/etc/init.d/tp_startscript
линк:
/etc/rc2.d/S96tp_startscript

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


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

bessonov3
Member

Сообщений: 41
Регистрация: Май 2007

написано 14 Декабря 2007 12:32ИнфоПравкаОтветитьIP

Клаус
а может быть проблема с компиляцией?
Не думаю, если бинарник работает, то эта проблема отпадает.

или start1, binary и start2 - это что-то из синтаксиса шелла и писать нажно без кавычек?
Сори, конечно с кавычками

С моей точки зрения, сейчас вам важно определить на каком этапе валиться процесс, т.е. добавить:
start)
echo "start1 binary" >> /root/err.log
/root/bin_file 2>> /root/err.log
echo "start2 binary" >> /root/err.log

но даже если она, допустим, не прочитает конфиг, то в stdout все равно попадает сообщение об ошибке, которое должно попасть в лог через >>
Попадает? Т.е. она всё таки корректно запускается?

у меня такое подозрение что не успевает монтироваться cf карточка
После загрузки df -h выводит на экран примонтированную флешку?

Добавление от 14 Декабря 2007 12:39:

2Клаус
Смотрите внимательно, чтобы на внутренней флешке было свободное дисковое пространство на 2-3Мб. Если флешка забьётся, на этапе загрузки контроллер зависнет. Его можно самому перепрошить. Но это процесс долгий и очень не привычный. На официальном сайте доки для Линкона раньше не было.

Клаус
unregistered
написано 15 Декабря 2007 21:52  ПравкаОтветитьIP

Ничего она не пишет в лог В том то и дело... Попадает пустая строчка и всё.

У меня 3 линкона, на всех трех автозапуск не работает.

1> - это stdout?
2> - stderr?
>> - а это тогда што?

с df -h и 2> err.log будут только завтра результаты...

ещё есть проблема с crontab. Делаю crontab -e, добавляю задание. после перезагрузки кронтаб этого задания не содержит, т.к. /var монтируется как ramdisk. Это ещё пол беды, другая половина - задание не выполняется. Может добавление заданий для крона надо делать как-то иначе? Существующие там задания (раз в час, раз в месяц, раз в неделю и т.п.) не устраивают своей частотой - слишком редко.

bessonov3, вы с такими проблемами у линконов никогда не сталкивались?
За предупреждение о 2-3 Мб лимите свободного пространства спс. Процесс перепрошивки был описан в какой-то из версий документации для линкона, но он был применим только для контроллеров с интегрироваными слотами расширения (надо было замкнуть пару контактов 0 слота). У меня же линкон без слотов расширения, поэтому как в моем случае перепрошивать контроллер - неясно

bessonov2
Member

Сообщений: 160
Регистрация: Май 2006

написано 15 Декабря 2007 23:26ИнфоПравкаОтветитьIP

Клаус
1> - это stdout?
2> - stderr?

Да.

>> - а это тогда што?
> создать файл и писать в него
>> добавить в файл

вы с такими проблемами у линконов никогда не сталкивались?
Нет, не сталкивался. Честно говоря уже давно с ним не работал.

Ничего она не пишет в лог В том то и дело... Попадает пустая строчка и всё.
Тогда попробуйте добавить в скрипт:
echo "start1 binary" >> /root/err.log
df -h >> /root/err.log
test /root/bin_file 2>> /root/err.log
/root/bin_file 2>> /root/err.log
echo "start2 binary" >> /root/err.log

перед перезагрузкой создайте в командной строке файл: ">/root/err.log"
После перезагрузки файлик /root/err.log распечатайте в форум.

Клаус
unregistered
написано 16 Декабря 2007 17:05  ПравкаОтветитьIP

Спасибо. В чем дело теперь понятно. непонятно с какого перепугу только ему надо либгтк.......... программа консольная. Работает исключительно с блоками 87 серии + сеть + pthread библиотеки. никакой графики.

# cat err.log
Start1
Filesystem Size Used Available Use% Mounted on
/dev/mtdblock4 67.1M 67.1M 0 100% /
/dev/mtdblock3 4.0M 2.8M 1.2M 70% /etc
/dev/hda1 494.5M 182.7M 311.8M 37% /etc/user/mnt/hda
/mnt/hda/opt/bin_dir/bin_file.bin: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
Start2

Добавление от 16 Декабря 2007 17:15:

что характерно. такой библиотеки в /lib действительно нет. но при запуске через инит он её хочет, а при запуске в ручную - не хочет... или все по-другому?

MuadDib_guest
unregistered
написано 16 Декабря 2007 20:28  ПравкаОтветитьIP

Не работал с LinCon, однако попробую внести свою лепту

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

ColdFire
Member

Сообщений: 279
Откуда: Россия
Регистрация: Ноябрь 2004

написано 16 Декабря 2007 21:39ИнфоПравкаОтветитьIP

Лично я бы посоветовал использовать механизм демонов, т.е. отсоединяться от консоли при запуске вашей программы. Нечто подобное мы в свое время проходили - программа, прекрасно работающая сама по себе, отказывалась запускаться автостартом (/etc/init.d), причем в зависимости от конкретного линукса были вариации...

bessonov2
Member

Сообщений: 161
Регистрация: Май 2006

написано 16 Декабря 2007 22:42ИнфоПравкаОтветитьIP

Клаус
/mnt/hda/opt/bin_dir/bin_file.bin: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
Чтобы сказал по этому поводу автор бинарника?
Что будет, если сделать ls -lt /liblibgtk-x11* , результат в форум

Для решения проблемы попробуйте через rc2.d запускать не сам бинарник, а самописный скрипт из /root/my_script.sh, который и запустит ваш бинарник, примерно такого содержания:

#!/bin/sh
#

sleep 10
echo "my root script 1" 2>>err.log
/root/my_bin_file 2>> /root/err.log
echo "my root script 2" 2>>err.log

Во всех скриптах не забывать все ошибки при запуске чего либо, сваливать в err.log: 2>>err.log


что характерно. такой библиотеки в /lib действительно нет. но при запуске через инит он её хочет, а при запуске в ручную - не хочет... или все по-другому?
Попробуйте сделать в консоли ldd /root/bin_file , результат в форум
Вообще странно, ни чего подобного не встречал в жизни.

MuadDib_guest
Консольный режим Линукса тоже может быть реализован через графический режим видео. Это делается для поддержки различных кодировок и наборов символов. Можно принудительно указать ядру работать чисто в текстовом режиме, но как это сделать в случае с линконом не знаю.
Немножкко не так. В процессоре, которые стоит на Линконе текст и графика реализованы через frame buffer, т.е. чистого текстового режима нет. Есть текстовая консоль через графический frame buffer.

Клаус
/dev/mtdblock4 67.1M 67.1M 0 100% /
Надобы почистить корень на предмет мусора. Хорошо что, он у вас грузиться

/dev/hda1 494.5M 182.7M 311.8M 37% /etc/user/mnt/hda
Жестокое монтируюте флешку Уж лучше примонтировать её к /mnt/hda
/etc всё таки каталог содержания настроечных файлов, а /mnt изначально для монтирования дисков

Клаус
unregistered
написано 17 Декабря 2007 19:18  ПравкаОтветитьIP

bessonov2
Попробуйте сделать в консоли ldd /root/bin_file , результат в форум

у линкона утилиты ldd нет :) если скомпилить бинарник на х86 и натравить на него ldd результат следующий:

libpthread.so.0 => /lib/libpthread.so.0 (0x40030000)
libm.so.6 => /lib/libm.so.6 (0x40082000)
libc.so.6 => /lib/libc.so.6 (0x400a5000)
/lib/ld-linux.so.2 (0x40000000)

Вообще странно, ни чего подобного не встречал в жизни.

аналогично :)

по поводу монтирования. это не я так в fstab все прописал. заводские настройки

отдельный скрипт со слипом попробую сделать. к строке вызова скрипта тоже необходимо будет добавить "&"?
т.е. строка должна быть примерно такой:

"/bin/sh /root/startsrcript.sh &"?

ColdFire

имеется ввиду в самом начале процесса сделать fork(), в родительском процессе поставить exit(0), а в дочернем делать все что надо? а дескрипторы stdin, stderr и stdout - закрыть?

сейчас, насколько я понимаю, процесс идет таким образом, что бинарник запускается раньше, чем инициализируется графический фрейм-буфер, а на него завязаны каналы stdin, stderr и stdout. отсюда ошибка.
верно или я ошибаюсь?

MuadDib_guest

спасибо )

Добавление от 17 Декабря 2007 22:10:

скрипт со sleep 10 сделал - та же фигня.
изменил время сна на 60. успевает загрузиться все, включая иксы. делаю tail -f /root/err.log, жду пока появится что-нибудь.
через секунд 40 появляется та же ошибка

посмотрел как запускаются остальные службы, к примеру httpd. запускаются с помощью утилиты start-stop-daemon

попробовал сделать как там. снова эта же ошибка.
cейчас поищу ldd для армлинукса.


ниччонепонимаю (ц)

Клаус
unregistered
написано 17 Декабря 2007 23:38  ПравкаОтветитьIP

Вот что говорит arm-linux-readelf.exe

--------------------------------

Dynamic segment at offset 0x32b18 contains 39 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libgtk-x11-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libgdk-x11-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libatk-1.0.so.0]
0x00000001 (NEEDED) Shared library: [libXft.so.1]
0x00000001 (NEEDED) Shared library: [libfreetype.so.6]
0x00000001 (NEEDED) Shared library: [libXrender.so.1]
0x00000001 (NEEDED) Shared library: [libX11.so.6]
0x00000001 (NEEDED) Shared library: [libXext.so.6]
0x00000001 (NEEDED) Shared library: [libgdk_pixbuf-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libpangoxft-1.0.so.0]
0x00000001 (NEEDED) Shared library: [libpangox-1.0.so.0]
0x00000001 (NEEDED) Shared library: [libpango-1.0.so.0]
0x00000001 (NEEDED) Shared library: [libgobject-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libgmodule-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libgthread-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libglib-2.0.so.0]
0x00000001 (NEEDED) Shared library: [libiconv.so.2]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x2002f44
0x0000000d (FINI) 0x2031948
0x00000004 (HASH) 0x2000130
0x00000005 (STRTAB) 0x2001a58
0x00000006 (SYMTAB) 0x2000988
0x0000000a (STRSZ) 4244 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0
0x00000003 (PLTGOT) 0x203aa28
0x00000002 (PLTRELSZ) 448 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x2002d84
0x00000011 (REL) 0x2002d7c
0x00000012 (RELSZ) 8 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x2002d1c
0x6fffffff (VERNEEDNUM) 2
0x6ffffff0 (VERSYM) 0x2002b00
0x00000000 (NULL) 0

Version needs section '.gnu.version_r' contains 2 entries:
Addr: 0x0000000002002610 Offset: 0x002610 Link to section: 5 (.dynstr)
000000: Version: 1 File: libpthread.so.0 Cnt: 1
0x0010: Name: GLIBC_2.0 Flags: none Version: 3
0x0020: Version: 1 File: libc.so.6 Cnt: 2
0x0030: Name: GLIBC_2.1 Flags: none Version: 4
0x0040: Name: GLIBC_2.0 Flags: none Version: 2


-------------------------

там вообще много.

примерно аналогичный ответ и на helloworld.bin

bessonov2
а когда вы работали с линконами удавалось через инит запускать бинарники без каких бы то ни было проблем?

Клаус
unregistered
написано 18 Декабря 2007 00:18  ПравкаОтветитьIP

ЭВРИКА!

Господа, кажется я понял в чем дело... )))

В cygwin который поставляется вместе с линконом, есть lcc.bat, в котором по-умолчанию линкуются все какие можно библиотеки.
Если компилить руками без скрипта, то в итоге получается вот так:

Dynamic segment at offset 0x308f8 contains 22 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x2000a84
0x0000000d (FINI) 0x202f738
0x00000004 (HASH) 0x2000130
0x00000005 (STRTAB) 0x2000618
0x00000006 (SYMTAB) 0x20002a8
0x0000000a (STRSZ) 482 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0
0x00000003 (PLTGOT) 0x2038818
0x00000002 (PLTRELSZ) 416 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x20008e4
0x00000011 (REL) 0x20008dc
0x00000012 (RELSZ) 8 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x200087c
0x6fffffff (VERNEEDNUM) 2
0x6ffffff0 (VERSYM) 0x200080e
0x00000000 (NULL) 0


т.е. ничего лишнего, все ок.


Спасибо всем, кто на проблему откликнулся :) Без сторонней помощи и наставлений на путь истинный решал бы очень долго :)

bessonov3
Member

Сообщений: 43
Регистрация: Май 2007

написано 18 Декабря 2007 12:39ИнфоПравкаОтветитьIP

йКЮСЯ
vrode ne bylo takpy problemye.

Problema reshena? Mne setchen ne ponytno pochemu iz commandnoy stroki vse zapuskayetsyam a init zapustit ne mozet.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики
Страницы: 1 2

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика