준비운동하기

이번 문서에서는 target board 에다가 web server를 설치하고, 그 위에서 돌아갈 cgi program을 돌리는 것까지를 목표로 한다.
또한 여기서는 boa 대신 goahead를 사용하기로 하고, cgi는 순수 C로만 구현한 것으로 사용한다. 이유는 다음에 설명하기로 하겠다.

임베디드 웹서버 개요

☞ 임베디드 시스템분야에서는 크게 2가지의 웹서버가 사용되고 있다. 그중에 하나는 boa 이고, 다른 하나는 goahead 이다. 각각 특징이 있겠지만, 필자가 생각하기에는 이렇다.
아직까지는 이런 웹서버에서 아쉽게도 asp나 php 같은 웹 스크립트 언어를 제공하지 않는다. 현재로써는 cgi로 구현해야 한다.

장점 : 용량이 작고, 속도가 빠르다. 세부적인 설정이 가능하다. (conf 파일이 따로 있다.)
단점 : 지원하는 파일 포맷이 다양하지 못하다.(CGI)

장점 : 다양한 파일 포맷을 지원한다. (CGI, ASP, JAVA…etc)
☞ linux에서 asp를 돌린다는 얘기는 못들어 본 것 같다. 그런데 일반 MS의 ASP와 goahead에서 제공하는 asp는 문법 자체가 틀린 것 같다.
단점 : 용량이 크고, 세부적인 설정이 불가능하다. (컴파일 할 때 지정해주어야 한다.)

필자는 처음에 boa를 가지고 cgi를 돌리려고 했다. 그런데, boa에서는 반드시 C로만 구현된 cgi 밖에는 동작하지 않았다. 필자가 잘 몰라서였기 때문이겠지만, 암튼 그랬다.
결국 goahead를 사용해서 구현하기로 했다.
다음의 사이트에서 다운받으면 된다. http://12.129.4.11/webserver/webserver.htm

goahead web server 설치하기

압축을 풀고, 디렉토리안을 들여다 보면, 각각 OS별로 디렉토리가 있음을 알 수 있다. 우리는 LINUX로 포팅할 것이므로 당연히…ㅎㅎㅎ

#tar xzvf webs217.tar.gz
#cd web217/ws030930/
#cd LINUX

보면 Makefile이 있을 것이다. 이것을 조금 수정해 주어야 한다.

-------------------------------Makefile------------------------------
ARCH = libwebs.a 
NAME = webs 
 
CC = arm-linux-gcc 
AR = arm-linux-ar 
# end 
. 
. 
. 
# modified by ynkim 
.c.o: 
arm-linux-gcc -c -o $@ $(DEBUG) $(CFLAGS) $(IFLAGS) $< 
--------------------------------------------------------------------

그리고

#make

컴파일한다. 제대로 컴파일 되었다면 디렉토리에 ‘webs' 라는 파일이 생겼을 것이다. 이것이 바로 web server 실행파일이다. 그런데 뭔가 좀 허전하다. htdocs 디렉토리도 없고 설정파일도 없다.
필자도 처음에 이것 때문에 조금 당황했었다.

♤ htdocs 디렉토리 : LINUX 디렉토리 한 단계 상위에 가보면 web 이라는 디렉토리가 보일 것이다. 이곳이 바로 그곳이다. 참고로 우리가 나중에 올릴 cgi 프로그램은 cgi-bin 디렉토리 아래에 넣으면 된다.

♤ 설정파일 : 바로 Makefile 과 main.c 이다.

goahead 는 boa에 비해 덩치가 크기 때문에 필요한 파일들만 모아서 board에 올려야 한다. 필자는 LINUX를 제외한 다른 OS 디렉토리는 모두 지우고, 또한 모든 .c(소스파일)들은 삭제했다. 그랬더니 거의 3M 정도 나왔다.

☞ 3M 정도의 웹 서버를 ftp를 이용해서 board에 올리고 위에서 컴파일한 webs 라는 실행파일을 실행시키면 웹서버가 동작해야 한다. ps로 확인하자!
만일 아무런 에러없이 동작하지 않는다면, target board의 /etc/hosts 파일을 확인해보자!
현재 board에 할당된 IP와 호스트네임이 /etc/hosts 파일과 일치하는지 알아보자.
만일 일치하지 않다면, 같게 고친 후 이를 적용시키자!
올바로 동작한다면, 외부에서 board로 접속해보자. goahead 기본 페이지가 뜰 것이다. 뭔가 뿌듯함이 느껴지지 않는가?? ㅎㅎㅎ

CGI 프로그램 구현

솔직히 goahead 에서는 여러 가지 파일 포맷을 지원하지만, 필자는 C로 짠 CGI 프로그램을 선택했다. (asp나 javascript는 잘 모르기 때문이다.
파일은 문서와 함께 올렸으니 참고하기 바란다.
cgi 프로그램에서 중요한 몇몇 부분만 살펴보자!!
boa_off.c 와 boa_on.c 파일은 LED를 켜고 끄는 역할을 하는 파일들이다.

#gcc -o cgi_on.cgi boa_on.c
#gcc -o cgi_off.cgi boa_off.c
 
------------------------boa_on.c (라인 번호 : 278)-----------------------
시스템("/usr/led/lamp on");
 
//이전 문서에서 우리가 만든 lamp라는 스크립트 파일을 on 옵션을 주어서 실행시키라는 
//내용이다.
--------------------------------------------------------------------
------------------------boa_off.c (라인 번호 : 295)----------------------
printf("<meta http-equiv=refresh content=0;URL=/stand_on.htm>\n");
printf("</body>\n");
printf("</html>\n");
 
//cgi 프로그램상에서 위와 같은 식으로 표현한다는 것도 알아두기 바란다.
//위의 내용은 자동으로 stand_on.htm으로 이동하라는 의미이다.
-------------------------------------------------------------------- 

각각의 파일들을 제 경로에 올리고, 웹상에서 테스트 해보자!!
어떤가? 잘 되는가?
이번 프로젝트는 어찌보면 너무 단순해서 허무함(?)을 느낄지도 모르지만, 임베디드 시스템의 전반적인 감은 충분히 잡을 수 있을 거라고 생각한다.

마지막으로 부족한 문서를 읽어준 여러분께 고마움을 표한다.
기타 질문 사항은 게시판에 올려주기 바란다.

☞ 마지막으로 cgi 가 실행이 안된다면, 퍼미션을 조정을 해보자!!

  • computer/embedded/임베디드_시스템을_이용한_웹상에서의_가전제품_제어하기3.txt
  • Last modified: 3 years ago
  • by likewind