Linux2015. 7. 16. 12:52

임베디드 시스템으로 뭔가를 하시려는 분들은 요즘 라즈베리파이 시리즈나 오드로이드 시리즈의 리눅스를 많이 쓰시니까 보드를 키자마자 프로그램을 자동실행하게 하는 경우가 많을 것 같습니다.


저도 쿼드콥터 위에 오드로이드C1를 올려서 자동주행 알고리즘 연구를 하고있는데, 리눅스 고급유저가 아닌지라 많이 헤메게 되네요 ㅠㅠ


보통 자동실행은 /etc/rc.local 파일에 실행시킬 프로그램 경로를 써서 하게됩니다.


/root/hsPi/wing &


이런 식으로 써두는데 &는 백그라운드로 실행하라는 의미입니다. 백그라운드로 실행시키지 않으면 부팅 중간에 저 프로그램을 실행했다가 부팅과정을 마저 못끝내는 현상이 발생하더라구요 (저 프로그램은 loop구조라 끝나지 않는 프로그램..)


보통 이렇게 자동실행을 등록해서 사용해왔습니다. 그런데!


오드로이드C1에 올린 리눅스 우분투에서 위처럼 자동실행을 등록해놨는데 두 번 실행되는 문제가 발생했습니다.


아두이노와 Serial통신을 일정 주기마다 일정 크기만큼 주고받는데, 프로그램 두개가 한번에 보내니 아두이노에서 못받는 현상이 생기더라구요


부팅 과정을 짚어봐도 도저히 고칠수가 없길래 그냥 프로그램이 이미 실행중이면 실행하지 말라는 쉘 스크립트로 해결했습니다. ㅜ 뭔가 찜찜한 기분..


리눅스 중복실행 방지로 검색하니까 좋은 소스가 있어서 사용중입니다.


#load date
date=$(date +%y/%m/%d-%H:%M:%S)

#해당되는 프로세스 ID 읽어오기 (read process id with file name 'takeOriginImage.php').
pid=`ps -ef | grep "takeOriginImage.php" | grep -v 'grep' | awk '{print $2}'`

#프로세스ID가 있을 경우, 즉 실행 중일 경우, 메시지를 출력하고 종료.
#If the process ID - that means if it is running, a message and exit.
if [ -z $pid ]
then
/usr/local/php/bin/php /home/jdk/takeOriginImage.php > /home/jdk/_log/takeOriginImage.txt
else
echo $data "can not dual exec process!!!\r\n";
fi


도움 - http://breezymoon.blogspot.kr/2013/09/shell-script-to-avoid-duplicate-runs.html





'Linux' 카테고리의 다른 글

OpenCV 2.4.9 on Ubuntu 14.04  (0) 2015.06.15
Posted by 너를위한노래
Linux2015. 6. 15. 21:40

http://karytech.blogspot.kr/2014/05/opencv-249-on-ubuntu-1404.html

OpenCV 2.4.9 was released on April 2014. See more here.

This is another post in a series of walkthroughs that will hopefully make your life easier to configure, compile, install and test it out.

The dependencies are divided into categories. I have only tested it with GTK.

If you don't need the latest OpenCV then you can easily install version 2.4 using apt:
sudo apt-get install libopencv-dev
If you wanna use the latest version, then follow the steps above:

Install Dependencies


Essentials
These are libraries and tools required by OpenCV.
sudo apt-get install build-essential checkinstall cmake pkg-config yasm

Image I/O
Libraries for reading and writing various image types. If you do not install then the versions supplied by OpenCV will be used.
sudo apt-get install libtiff4-dev libjpeg-dev libjasper-dev


Video I/O
You need some or all of these packages to add video capturing/encoding/decoding capabilities to the highgui module.
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev

Python
Packages needed to build the Python wrappers.
sudo apt-get install python-dev python-numpy

Other third-party libraries
Install Intel TBB to enable parallel code in OpenCV.
sudo apt-get install libtbb-dev

GUI
The default back-end for highgui in Linux is GTK. You can optionally install QT instead of GTK and later enable it in the configuration (see next section) but I haven't tested it with QT on Ubuntu 14.04 yet. 
sudo apt-get install libqt4-dev libgtk2.0-dev

Download Compile & Install

Get a copy of the source code here, extract and create a build directory:
unzip opencv-2.4.9.zip
cd opencv-2.4.9/
mkdir build
cd build
Configure using CMake. You have a lot of options in this step. This is what I use:
cmake -D WITH_XINE=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_EXAMPLES=ON ..
If you add -D WITH_QT=ON, the highgui module will use QT instead of GTK. For more information on the options, look at the CMakeLists.txt file. When you are happy with the configuration you have, you can start compiling:
make
If compilation finishes without errors, you can install by saying:
sudo make install
Finally, make sure that your programs can link to the OpenCV library in run-time by adding the following line at the end of your /etc/ld.so.conf:
/usr/local/lib
And then configure dynamic linker run-time bindings:
sudo ldconfig

Testing

An easy way to test that the compilation went well is to use the OpenCV tests and samples. For example, go to opencv-2.4.9/build/bin and run:
./cpp-example-opencv_version
You should get the correct version.

If you run other tests notice that some failures come from missing image files. To correctly run these tests or samples you should move the corresponding image files from opencv-2.4.9/samples to OpenCV-2.4.9/build/bin.

For testing that you can compile your own programs and link against the installed OpenCV libraries I have packaged the face detection sample with all the necessary files and a simple Makefile. Download it here, extract and type:
make
This should compile and run with a test image, so you should see something like this:


'Linux' 카테고리의 다른 글

rc.local에 등록한 시작프로그램이 두번 실행되는 현상  (2) 2015.07.16
Posted by 너를위한노래