====== 임베디드 시스템을 이용한 웹상에서의 가전제품 제어하기3 ====== ====== 준비운동하기 ====== 이번 문서에서는 target board 에다가 web server를 설치하고, 그 위에서 돌아갈 cgi program을 돌리는 것까지를 목표로 한다. 또한 여기서는 boa 대신 goahead를 사용하기로 하고, cgi는 순수 C로만 구현한 것으로 사용한다. 이유는 다음에 설명하기로 하겠다. ====== 임베디드 웹서버 개요 ====== ☞ 임베디드 시스템분야에서는 크게 2가지의 웹서버가 사용되고 있다. 그중에 하나는 boa 이고, 다른 하나는 goahead 이다. 각각 특징이 있겠지만, 필자가 생각하기에는 이렇다. 아직까지는 이런 웹서버에서 아쉽게도 asp나 php 같은 웹 스크립트 언어를 제공하지 않는다. 현재로써는 cgi로 구현해야 한다. ===== 1. boa ===== 장점 : 용량이 작고, 속도가 빠르다. 세부적인 설정이 가능하다. (conf 파일이 따로 있다.) 단점 : 지원하는 파일 포맷이 다양하지 못하다.(CGI) ===== 2. goahead ===== 장점 : 다양한 파일 포맷을 지원한다. (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("\n"); printf("\n"); printf("\n"); //cgi 프로그램상에서 위와 같은 식으로 표현한다는 것도 알아두기 바란다. //위의 내용은 자동으로 stand_on.htm으로 이동하라는 의미이다. -------------------------------------------------------------------- 각각의 파일들을 제 경로에 올리고, 웹상에서 테스트 해보자!! 어떤가? 잘 되는가? 이번 프로젝트는 어찌보면 너무 단순해서 허무함(?)을 느낄지도 모르지만, 임베디드 시스템의 전반적인 감은 충분히 잡을 수 있을 거라고 생각한다. 마지막으로 부족한 문서를 읽어준 여러분께 고마움을 표한다. 기타 질문 사항은 게시판에 올려주기 바란다. ☞ 마지막으로 cgi 가 실행이 안된다면, 퍼미션을 조정을 해보자!! ---- {{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(todays|about|guestbook)$/ nsort rsort}} ----