logo

English

임베디드 Linux 시스템 부팅 시 프로그램 자동 실행

by digipine posted Nov 03, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

자동 수행 시킬 위치는 이미 정해져 있기 때문에 몇 군데 받에 없습니다.
그 위치는 다음과 같습니다.

1) /sbin/init 프로그램을 대치하는 방법 
2) /etc/inittab을 이용하는 방법
3) /etc/rc.d/rc.local을 이용하는 방법
4) /etc/rc.d/rc.sysinit를 이용하는 방법
5) /etc/rc.d/init.d 디렉토리에 두고 이용하는 방법 

이 방법중 본인이 주로 사용하는 방법은 /etc/rc.d/rc.local을 이용하는 
것입니다.

각 위치에 따른 장단점을 알아봅시다.

1 /sbin/init 프로그램을 대치하는 방법 

별로 추천하고 싶지 않는 방법입니다.
왜냐하면 응용 프로그램의 디버깅 단계에서 
정상적인 리눅스 콘솔을 볼수 없기 때문에 개발하기 까다롭습니다.
즉 쉘을 구경할 수도 없고 기타 등등의 상황이 발생합니다. 

그러나 

시스템에 주어진 메모리도 작고 플래쉬 메모리가 작은 경우라면
한번쯤 검토할만 합니다.

시스템이 동작하기위해서 하나의 실행파일로 모든 것이 끝난다면 
실행파일에 참조하는 라이브러리를 모두 스텍틱 처리해서
단 하나의 실행파일을 실행하는 것으로 모든 것이 끝나기 때문입니다.

pork를 이용해서 다른 프로그램을 수행할수도 있습니다.

라이브러리가 실행 파일에 포함되기 때문에 LGPL의 적용
대상이 되지 않기 때문에 소스를 공개할 의무를 가지는 
단점이 있다는 것 역시 기억하여야 합니다. 

물론 라이브러리를 응용 프로그램에 포함시키지 않는 방법이 
있지만 그렇다면 그 큰 라이브러리가 모두 시스템에 올라가야 
하므로 얻어지는 것이 별로 없겠죠?


2 /etc/inittab을 이용하는 방법

init 프로그램은 리눅스가 동작하면서 가장 먼저 수행되어
시스템에 필요한 처리를 하는 프로그램을 동작 시키고 
대기하는 프로그램입니다.

이 방식을 사용하여 얻어지는 이점은 사용법이 간단하다는 것입니다.
그리고 프로그램이 죽으면 다시 자동으로 실행시켜 줍니다. 

프로그램을 추가 하는 방법은 다음과 같습니다.

/etc/inittab의 끝 부분에 다음과 같이 사용하면 됩니다.

===[/etc/inittab]================================================
:
APP0:12345:respawn:/test/bin/testprogram debugging
===[/etc/inittab]================================================

inittab의 사용법에 대한것은 

info inittab

으로 알아보기 바랍니다. 아마 아주 자세하게 설명하고 있읍니다.
배포판에 따라서 한글로 아주 자세하게 나옵니다. 

위 예는 런레벨 12345일때 /test/bin/testprogram을 실행합니다. 
만약에 이 프로그램이 어떤 원인이 있어서 죽었다면 다시 실행시켜 줍니다.
마지막에 있는 debugging은 프로그램 아규먼트로 전달되는 것입니다. 
이 부분은 필요없으면 안쓰면 그만입니다. 단지 전달되는 예를 보여 준것이다.

만약에 한번만 실행될 필요가 있다면 respawn 대신에 once를 사용합니다. 
런 레벨을 무시하고 부팅시에만 실행될 필요가 있다면 boot를 씁니다.

respawn , once, boot는 프로그램의 종료를 기다리지 않고 다음을 진행합니다. 

하지만 경우에 따라서는 프로그램이 실행되고 끝난후에 다음을 진행할 필요가 있습니다.
이때는 

respawn 대신에 wait를 boot 대신에 bootwait를 사용합니다. 

이렇게 좋은 방법이 있음에도 불구하고 본인은 이 방법을 잘 사용하지 않습니다.

왜?

respawn을 사용했는데 프로그램이 죽는 상황이 프로그램 시작 초기에 발생하면 부팅 초기에 
(특히 개발단계에서) 죽어라 죽은 프로그램을 다시 실행하기 위해서 init
프로그램은 애씁니다.(보기에 안쓰러울 정도 입니다. ㅜㅜ). 
이 경우라면 부팅시간이 무척 길어져서 콘솔 화면 보기 정말 더럽게 어렵습니다.
(당해봐야 압니다.)

아니면 wait 를 이용했을경우에는 아예 부팅 스크립트들이 진행되지 않기 때문에
콘솔 보기는 애초에 포기해야 합니다. ( 이런 상황에 닥지면 정말 귀찮죠.. )

보통 임베디드 응용 프로그램은 하나만 수행하지 않습니다. 프로그래머의 취향에 따라
다르지만 본인이 경우는 그렇습니다. 여러 프로그램을 실행할때는 보통 시작 순서가 
있을 수 있습니다. 또 프로그램이 죽더라도 다시 실행을 바로 수행하지 않을 필요가 있습니다.
그리고 특정 디렉토리로 이동해서 프로그램이 시작되어야 하는 경우도 많습니다.
이런 경우에 inittab으로는 대처가 되지 않습니다. 

그..래..서 

이런 저런 제약 조건 때문에 본인은 그 막강한 기능에 비해서 잘 사용하지 않습니다.

3 /etc/rc.d/rc.local을 이용하는 방법

요기가 필자가 주로 사용하는 방법입니다. 
ESP-NS는 inittab에 이 스크립트를 처리하도록 하는 부분이 포함되어 있으므로 
반드시 수행해 줍니다 

프로그램을 부팅시에 동작하게 하도록 하기 위해서 이 파일 끝부분을 애용합니다.

간단한 스크립트 문법도 적용되고 환경 설정 내용도 사용할수 있기 때문에 
무척 편리합니다. 

아주 간단한 예를 보여 드리겠읍니다. 

===[/etc/rc.d/rc.local]================================================
:

# 프로그램을 시작한다. 
echo "DVR Program Start"

cd /app/bin
./network_module &
./parameter_module &
./recoding_module &
./play_module &
sleep 1
./main_module &
===[/etc/rc.d/rc.local]================================================

보시다 시피 그냥 쉘에서 키보드로 입력하는 내용을 그대로 써 넣어 주면 된다. 

쉽죠?

이 부분을 사용하는 것은 스크립트 명령 문법을 많이 알고 있을수록 유리합니다. 

4 /etc/rc.d/rc.sysinit를 이용하는 방법


이 파일을 이용하는 것은 /etc/rc.d/rc.local을 사용하것과 유사하기 때문에 
더 이상의 설명을 하지 않겠읍니다. 

그..러..나..

이 부분은 시스템 초기 설정과 관련된 사항이 많고 가장 처음 실행하는 
부분입니다. 

그..래..서..

가급적 사용하지 않는 것이 좋습니다. 

5 /etc/rc.d/init.d 디렉토리에 두고 이용하는 방법 

이것은 보통 PC 의 리눅스에서 셋업처럼 동작하는 부분입니다. 

수행되어야 하는 프로그램을 위한 스크립트를 /etc/rc.d/init.d
에 넣고 

각 런레벨에서 수행하는 디렉토리에서 링크를 시키는 방법입니다.

예를 들어 

/etc/rc.d/init.d 에 test_sample 이라는 스크립트가 있다면 

런레벨 3에서 수행하도록 하려면 

cd /etc/rc.d/rc3.d/
ln -s ../init.d/syslog S10test_sample

하면 됩니다. 링크 파일을 만들때 주의 할점은 
가장 첫번째 문자가 'S' 이면 시작을 'K'면 시스템을 셧다운 할때 
동작한다는 의미이고 

그다음 두문자의 숫자는 실행 순서를 의미 합니다. 

?

List of Articles
No. Subject Author Date Views
29 모바일 전용 CPU ARM이 노트북과 AI로 진화 한다 file digipine 2017.11.03 3
» 임베디드 Linux 시스템 부팅 시 프로그램 자동 실행 digipine 2017.11.03 2
27 Wandboard Yocto XBMC 올리기 digipine 2017.11.03 2
26 Wandboard Yocto XBMC 올리기 digipine 2017.11.03 2
25 안드로이드 의 써드파티 어플의 SD RW 권한 부여 digipine 2017.11.03 2
24 스니핑 개념, 공격기법, 방어법, 참고할만한 오픈소스 라이브러리 및 툴 digipine 2017.11.03 2
23 GA-P55A-UD3R rev 2.0 / GT 240 OSX 스노우 레파드 해킨가이드 digipine 2017.11.03 2
22 HIGH QUALITY MOBILE EXPERIENCE (HQME) digipine 2017.11.03 2
21 해킨토시 설치법 GA-P55A-UD3R rev 2.0 / intel Core i5 760 / NVIDIA GeForce GT 240 digipine 2017.11.03 2
20 CISCO Router 설정 팁 - QOS 1 digipine 2017.11.03 2
19 UC 환경을 위한 종합 네트워크 FMC digipine 2017.11.03 3
18 네트웍 용어중 bps, cps, BPS, pps 의 차이점 digipine 2017.11.03 1
17 L4 장비의 핵심 로드 밸런싱(Load Balancing) digipine 2017.11.03 1
16 DaVinci 에 대한 소개글 digipine 2017.11.03 1
15 RFID와 USN 에 대해서 digipine 2017.11.03 2
14 SECS 프로토콜 개요 digipine 2017.11.03 1
13 반도체 전공정 후공정 설명 digipine 2017.11.02 25
12 반도체 장비/공정 기술 용어집 digipine 2017.11.02 4
11 차세대 비휘발성 메모리 기술동향 file digipine 2017.11.02 1
10 서보모터의 기초와 제어 file digipine 2017.11.02 1
Board Pagination Prev 1 2 Next
/ 2