Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как запустить своё приложение по старту uClinux ...
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
andybeg
в линуксе это делается через прописывагие нужного приложения в rc.local, в сборке uClinux для моей платы нашёл файл rc, в нём тоже прописывается ряд приложений и действий по старту, но запуска приложения не происходит sad.gif
Цитата
#!/bin/sh
hostname MK
/bin/expand /etc/ramfs.img /dev/ram1
mount -t proc proc /proc
mount -t ext2 /dev/ram1 /var
mkdir /var/tmp
mkdir /var/log
mkdir /var/run
mkdir /var/lock
mkdir /var/empty
/bin/mknod /dev/ttyS0 c 4 64
/bin/mknod /dev/ttyS1 c 4 65
/bin/mknod /dev/ttyS2 c 4 66
/bin/mknod /dev/ttyS3 c 4 67
ifconfig lo 127.0.0.1
#ifconfig eth0 192.168.0.220 broadcast 192.168.0.255 netmask 255.255.255.0
#httpd &
cat /etc/motd
/bin/uart
Совсем старый Бабай
Первое, почему приложение находиться в коатлоге bin?
Второе, запуск идет от root или от пользователя?
andybeg
>>Первое, почему приложение находиться в коатлоге bin?
потому что после сборки uClinux исполняемый файл был засунут туда
>>Второе, запуск идет от root или от пользователя?
по аналоги с обычным линуксом могу предположить что то что запускается из файла rc, запускается от рута. в тоже время после загрузки uClinux в дебаговой консоли пишу uart и программа стартует ...
Совсем старый Бабай
Бредовые мысли конечно, но попробуйте переписатьв /home и запустить оттуда и второе что делает программа uart. Может просто косяк с настройками порта? Как определили что програма не запускаеться? По запущенным процессам? Можно в первых строках main вставить какой нибуть printf().
andybeg
Цитата(Совсем старый Бабай @ Sep 3 2010, 06:07) *
Как определили что програма не запускаеться? По запущенным процессам? Можно в первых строках main вставить какой нибуть printf().

определил что не запускается, потому что по старту программа гасит два светодиода, а этого не происходит, в тоже время запуск программы из дебаговой консоли проходит удачно smile.gif
romez777
Начните с примитивного приложения "hello world", если при старте на консоль печатает строку, значит что-то не так с вашим более усложненным приложением uart - может ли так быть, что какие-то аппаратные блоки еще "не готовы" в момент запуска init и выполнения /etc/rc ? А чуть позже, когда "пыль осела и все железо готово" запуск вручную работает.
Ivan_Kov
Цитата(andybeg @ Sep 2 2010, 09:40) *
в линуксе это делается через прописывагие нужного приложения в rc.local, в сборке uClinux для моей платы нашёл файл rc, в нём тоже прописывается ряд приложений и действий по старту, но запуска приложения не происходит sad.gif


У вас ядро 2.6.21?
Если да, то там похоже есть глюк (или нюанс который я не понял):

Добавлять самой последней стокой в /etc/rc свою программу не надо, она действительно не запускается. добавьте где-нибудь в середине, ближе к концу.

у меня это выглядит примерно так:
CODE

........
........
........
#insmod /lib/modules/2.6.21-uc0/kernel/drivers/usb/gadget/g_file_storage.ko file=/dev/mmca1

LANG=ru_RU
httpd &
/bin/myprog </dev/mtrm1 >/dev/mtrm1 2>/dev/mtrm1 &

# if user defined rc exists then execute it
if [ -f /mnt/mmc/userrc ]; then
/bin/sh /mnt/mmc/userrc
fi

andybeg
интересное наблюдение
ядро 2.6.24.2, сделал по рекомендации, но это ничего не изменило sad.gif
Цитата
#!/bin/sh
hostname MTK
/bin/expand /etc/ramfs.img /dev/ram1
mount -t proc proc /proc
mount -t ext2 /dev/ram1 /var
mkdir /var/tmp
mkdir /var/log
mkdir /var/run
mkdir /var/lock
mkdir /var/empty
/bin/uart

/bin/mknod /dev/ttyS0 c 4 64
/bin/mknod /dev/ttyS1 c 4 65
/bin/mknod /dev/ttyS2 c 4 66
/bin/mknod /dev/ttyS3 c 4 67

ifconfig lo 127.0.0.1
#ifconfig eth0 192.168.0.220 broadcast 192.168.0.255 netmask 255.255.255.0
#httpd &
cat /etc/motd
andybeg
переставил осьссусе32 на убунту64 , вроди бы ничего не менял, но после перекомпиляции и запуска получил кернелпаник, похожий на тт что в ветке рядом, посмотрел в установки uClinux и понял что там не взведён init, поставил его , но получил следующее
Код
RAMDISK: romfs filesystem found at block 0                                                                      
RAMDISK: Loading 213KiB [1 disk] into ram disk... done.                                                        
VFS: Mounted root (romfs filesystem) readonly.                                                                  
init: exec rc failed                                                                                            
init: Booting to single user mode                                                                              
init: exec of single user shell failed                                                                          
init: Missing PROCESS field in inittabinit: Missing PROCESS field in inittabinit: Missing PROCESS field in initt
init: -/bin/sh respawning too fast                                                                              
init: -/bin/sh exec failed                                                                                      
init: -/bin/sh respawning too fast                                                                              
init: -/bin/sh respawning too fast                                                                              
init: -/bin/sh exec failed                                                                                      
init: -/bin/sh respawning too fast                                                                              
init: -/bin/sh respawning too fast                                                                              
init: -/bin/sh einit: -/bin/sh respawning too fast

при rc
Код
#!/bin/sh
hostname MTK
/bin/expand /etc/ramfs.img /dev/ram1
mount -t proc proc /proc
mount -t ext2 /dev/ram1 /var
mkdir /var/tmp
mkdir /var/log
mkdir /var/run
mkdir /var/lock
mkdir /var/empty
/bin/mknod /dev/ttyS0 c 4 64
/bin/mknod /dev/ttyS1 c 4 65
/bin/mknod /dev/ttyS2 c 4 66
/bin/mknod /dev/ttyS3 c 4 67
ifconfig lo 127.0.0.1
#ifconfig eth0 192.168.0.220 broadcast 192.168.0.255 netmask 255.255.255.0 G2420HDBL
#httpd &
cat /etc/motd
uart
# that's it... success
exit 0
etoja
В rc.local напишите не /bin/uart

а точное имя файла с расширением, например /bin/uart. (точка в конце)

Файл должен иметь атрибут исполняемой программы.
andybeg
методом научного тыка(делал make menuconfig и подключал опции которые могли бы повлиять на пуск) удалось запустить, основной проблемой как понимаю было отсутствие в моей сборке Core Application-init
вапще было бы неплохо найти книжку где бы были описаны ВСЕ позиции настройки uClinux через make menuconfig,не обладаете такой информацией?

заработал старый конфиг который был изначально, тоесть стартовую строку программы правильно написал
andybeg
так как требовалось видеть дебаговую консоль, почти всё время пользовал плату с воткнутым дебаговым кабелем и вот отключив его полусил, что не стартует uClinux, гугленье пока что не принесло плодов
etoja
Цитата(andybeg @ Oct 27 2010, 13:46) *
с воткнутым дебаговым кабелем


Значит сигнал сброса и выбора бутлоадера на плате формируются неправильно,
а через консольный RS232 они приходят из компьютера по линиям DTR и RTS.
andybeg
у меня грузится uboot, выводится пингвин(на этом всё стопорится), значит всётаки не в этом дело?
andybeg
по схематике у нас на разъёме используются RXD TXD GND DSR CTS, соединил CTS и GND и всё заработало, электронщик сказал что надо на бут резюк поставить,чтобы он в воздухе не мотался smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.