Jump to content

    
Sign in to follow this  
andybeg

как запустить своё приложение по старту uClinux ...

Recommended Posts

в линуксе это делается через прописывагие нужного приложения в rc.local, в сборке uClinux для моей платы нашёл файл rc, в нём тоже прописывается ряд приложений и действий по старту, но запуска приложения не происходит :(

#!/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

Edited by andybeg

Share this post


Link to post
Share on other sites

>>Первое, почему приложение находиться в коатлоге bin?

потому что после сборки uClinux исполняемый файл был засунут туда

>>Второе, запуск идет от root или от пользователя?

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

Edited by andybeg

Share this post


Link to post
Share on other sites

Бредовые мысли конечно, но попробуйте переписатьв /home и запустить оттуда и второе что делает программа uart. Может просто косяк с настройками порта? Как определили что програма не запускаеться? По запущенным процессам? Можно в первых строках main вставить какой нибуть printf().

Share this post


Link to post
Share on other sites
Как определили что програма не запускаеться? По запущенным процессам? Можно в первых строках main вставить какой нибуть printf().

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

Share this post


Link to post
Share on other sites

Начните с примитивного приложения "hello world", если при старте на консоль печатает строку, значит что-то не так с вашим более усложненным приложением uart - может ли так быть, что какие-то аппаратные блоки еще "не готовы" в момент запуска init и выполнения /etc/rc ? А чуть позже, когда "пыль осела и все железо готово" запуск вручную работает.

Share this post


Link to post
Share on other sites
в линуксе это делается через прописывагие нужного приложения в rc.local, в сборке uClinux для моей платы нашёл файл rc, в нём тоже прописывается ряд приложений и действий по старту, но запуска приложения не происходит :(

 

У вас ядро 2.6.21?

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

 

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

 

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

........
........
........
#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

Share this post


Link to post
Share on other sites

интересное наблюдение

ядро 2.6.24.2, сделал по рекомендации, но это ничего не изменило :(

#!/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

Edited by andybeg

Share this post


Link to post
Share on other sites

переставил осьссусе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

Share this post


Link to post
Share on other sites

В rc.local напишите не /bin/uart

 

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

 

Файл должен иметь атрибут исполняемой программы.

Share this post


Link to post
Share on other sites

методом научного тыка(делал make menuconfig и подключал опции которые могли бы повлиять на пуск) удалось запустить, основной проблемой как понимаю было отсутствие в моей сборке Core Application-init

вапще было бы неплохо найти книжку где бы были описаны ВСЕ позиции настройки uClinux через make menuconfig,не обладаете такой информацией?

 

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

Edited by andybeg

Share this post


Link to post
Share on other sites

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

Edited by andybeg

Share this post


Link to post
Share on other sites
с воткнутым дебаговым кабелем

 

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

а через консольный RS232 они приходят из компьютера по линиям DTR и RTS.

Share this post


Link to post
Share on other sites

по схематике у нас на разъёме используются RXD TXD GND DSR CTS, соединил CTS и GND и всё заработало, электронщик сказал что надо на бут резюк поставить,чтобы он в воздухе не мотался :)

Edited by andybeg

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this