OpenWRT 프로젝트를 시작합니다

최근에 새로운 환경에서 개발을 시작하면서 예전에 주로 사용했던 개발 환경인 “OpenWRT”를 다시 경험을 하게 되었습니다. OpenWRT는 코드도사 사이트 내에서도 여러 페이지를 통해 소개를 해 드린 적이 있습니다. 

OpenWRT를 최근에 다시 사용하지 않았을 때에도 별도로 OpenWRT를 기반으로 개인 프로젝트를 진행하려고 하였지만, 이런 저런 시간의 부족과 핑계로 인해 진행을 하지 못하다가 다시 OpenWRT를 기반으로 회사에서 프로젝트를 시작하게 되면서 “이때다!!” 싶어서 OpenWRT 기반으로 개인 프로젝트를 다시 진행하려고 합니다. 

뭐 그리 특별하거나 대단한건 아닙니다.  인터넷 마켓에서 쉽게 구입할 수 있는 “라즈베리파이”에다가 OpenWRT를 빌드하여 올려서 “IoT” 단말이나  매니지먼트 단말을 구현해 보려고 합니다. 아직 구체적으로 어떤것을 하겠다~ 라는 것은 없습니다. 어떤 것을 해볼건지는 진행하면서 코드도사 사이트를 통해 공지할 계획입니다. 

일단은 시작이 중요할 듯 싶습니다. 예전부터 OpenWRT를 기반으로 개인 프로젝트를 시작하려고 했지만 이런 저런 바쁘다는 이유로 진행을 하지 못했는데, 시작을 해야지 좋은 아이디어가 나올 수 있을 듯 싶습니다. 뭔가 하다 보면 재밌는 작품이 나올지 모르지요^^

목표는 일단 IoT 장비나 단말을 만들어 볼 생각이지만 기본적으로는 코드도사를 방문해 주시는 분들에게 도움이 되고자 “리눅스” 와 “OpenWRT”, “임베디드”, “네트워크” 등의 대한 강의와 강좌를 하려고 합니다. 나름 지금까지 경험하고 쌓아왔던 지식을 공유드리는 것이 임베디드 리눅스 분야의 발전에 도움이 되지 않을까… 조심스레 생각해 봅니다. 

얼마전에 제가 재직중인 회사로 신입 프로그래머들이 들어왔는데, 제가 담당하던 분야로 교육을 잠시 한적이 있었습니다. 거기서 신입들에게 질문을 했습니다.

“요즘 임베디드 관련 분야로 신입들이 통 들어오지 않는데, 혹시 임베디드 분야가 어렵고 힘들어서 지원을 안하는 건가요?”

대답은 의외였습니다. 어렵고 힘들다기 보단 학교나 교육기관에서 임베디드 분야를 접할 기회가 없다는 것이었습니다. 요즘은 강좌가 죄다 웹, 앱, 서버 등지로 한정이 되어 있다고 하더군요. 그리고 학교에서도 교수님들이 임베디드 분야로 진출을 권유하지 않고 오히려 비추 한다고 했습니다.

대학 교수들은 아무래도 현재 산업 동향과 국내 상황을 대략 알고 있으니 그렇게 학생들에게 얘기하는 것은 어찌보면 당연한 듯 싶습니다. 이런 상황이니 학생들에게도 추천을 안하는 것은 당연한 것이겠죠. 좀 안타까웠습니다.

또한 임베디드 관련 개발을 하는 회사에서도 신입들을 뽑지 않다보니 신입들이 진출할 기회가 점점 줄어든 것도 사실인듯 싶습니다. 그래서 이번 프로젝트의 취지에는 학생들이나 임베디드 분야로 진출을 희망하시는 분들께 도움이 되고자 시작한 부분도 있습니다.

따라서 github에 라즈베리파이 기반으로 OpenWRT를 빌드하여 올릴 수 있게 소스코드를 올려놓을테니 필요하신 분들은 언제든 clone하여 사용하시면 됩니다. 관련하여 질문은 코드도사 사이트의 댓글란에 하시면 되겠습니다. 시간이 되는 대로 질문에 대한 답변은 해 드립니다.

Project 정보

이번에 시작될 프로젝트는 가칭 “CIoT” 프로젝트 입니다.(Codedosa IoT)

OpenWRT를 사용하였고, OpenWRT 버전은 18.06 입니다. 참고로 18.06 버전은 OpenWRT 팀에서는 공식적으로 지원이 종료되었지만, 최신 버전을 사용하기 보단 기존 버전을 사용하는게 낫겠다는 판단(딱히 이유는 없습니다.ㅋ)이 들어서 18.06 버전을 기반으로 시작하게 되었습니다. 

추가적은 정보는 아래를 참고해 주세요.

사용 하드웨어 : 라즈베리파이 3 B+

준비물 : 시리얼 통신용 UART to USB 어뎁터, USB 케이블, 점퍼선,  Micro SD 카드 4 GB 이상, LAN 케이블, Micro SD 카드 리더기

준비 소프트웨어 : 터미널 프로그램(테라텀), Win32 Disk Imager

일단 OpenWRT 를 올릴 단말의 하드웨어는 “라즈베리파이 3B+”로 정했습니다. 그 이유는 3B+가 가격이 저렴하면서 현재 국내 재고도 남아있고 성능이 꽤 괜찮은 하드웨어이기 때문입니다. 그리고 제가 가지고 있기도 하지요.

시리얼 통신은 꼭 필요한건 아니지만 아무래도 시리얼 통신으로 PC와 라즈베리파이끼리 통신하는게 유리합니다. 시리얼 통신은 시스템 부팅부터 동작을 확인할 수 있기 때문에 아무래도 편리합니다. 시중에는 UART to USB 어뎁터를 저렴하게 구입할 수 있으니, 어뎁터와 케이블만 있으면 됩니다. 그리고 라즈베리파이와 어뎁터간 연결할 수 있는 점퍼선도 있어야 합니다. 

SD카드는 라즈베리파이를 동작시키는데 반드시 필요하니 꼭 준비가 되어야 합니다. 용량이 많은 것은 필요없습니다. 4 GB 이상 되는것으로도 충분할 거 같습니다. 또한 빌드한 OpenWRT 이미지를 올리기 위해서는 Micro SD 카드 리더기가 필요할 수 있습니다. 노트북에는 Micro SD 소켓이 있는 노트북이 있으므로 만약 소켓을 갖추고 있다는 리더기가 필요하지 않습니다. 그리고 빌드한 OpenWRT 이미지를 복사하려면 “Win32 Disk Imager” 같은 이미지 라이터 프로그램이 필요합니다.

그 외에 시리얼 통신을 하기 위해서는 테라텀(Teraterm) 같은 시리얼 통신 프로그램을 설치하면 됩니다. 위에서 소개한 프로그램들은 전부 무료로 인터넷에서 다운로드 받을 수 있습니다. 

OpenWRT를 빌드하여 라즈베리파이 B+ 에 올리는 방법은 아래 글을 참고해 주세요.

CIoT Github 소개

CIoT 프로젝트를 진행하기 위해서는 OpenWRT가 필요합니다. 그런데 여길 찾아오시는 방문자들께서 제 프로젝트에 관심이 있으셔서 참고를 하실려고 할때 기준을 잡는게 어렵습니다. 따라서 기준을 잡기 위해 제가 직접 Github 에 OpenWRT 빌드 환경을 올려서 빌드가 될수 있게 하였습니다.

위 링크에 접속하면 코드도사 github 사이트로 접속이 됩니다. 그리고 “git clone” 을 통해 CIoT Project 소스 코드를 다운로드 받으실 수 있습니다. 

OpenWRT 버전은 18.06 이며 TOP 의 Makefile에서 18.06 branch 를 선택하여 다운로드 할 수 있게 작성하였습니다. 따라서 빌드를 할때는 TOP 디렉토리에 있는 Makefile을 이용하여 make를 하면 됩니다. 자세한 내용은 아래에 기술하겠습니다.

CIoT Source build 환경 및 build 방법

CIoT Source는 위에서 설명한 대로 OpenWRT 18.06 으로 이루어져 있습니다. OpenWRT의 git repogitory 를 사용하여 OpenWRT 소스를 다운로드 한 후에 라즈베리파이 3B+의 config 파일을 적용하여 build 를 진행합니다.

build 환경은 아래와 같습니다.

  • 우분투 16.04 이상

우분투 16.04 이상 설치하면 CIoT Source를 build하는데 큰 문제는 없을 것입니다. 여기에 추가적으로 설치해야 할 패키지들이 있으니 아래의 패키지를 사전에 설치하시기 바랍니다.

sudo apt-get install subversion g++ zlib1g-dev build-essential git python
sudo apt-get install libncurses5-dev gawk gettext unzip file libssl-dev wget

먼저 위의 CIoT github 링크에서 소스를 clone 하면 됩니다.(아래 예)

git clone https://github.com/devcodedosa/ciot.git

CIoT 소스를 clone 했으면 아래 make 명령어를 통해 OpenWRT를 빌드합니다. 리눅스 머신에 따라서 빌드 시간은 다르겠지만 처음 build를 하면 대략 1시간 내외 정도 소요됩니다.

make all

build과 완료되면 하위 디렉토리에 “openwrt” 와 “out” 이 생성됩니다. 실제 openwrt 의 build 된 firmware 패키지는 out 에 생성됩니다.

openwrt-brcm2708-bcm2710-rpi-3-ext4-sysupgrade.img.gz

위의 파일이 생성되었다면 정상적으로 컴파일이 된 것입니다.

라즈베리파이 3B+에 처음 OpenWRT를 올린다면 위의 “OpenWRT를 라즈베리파이 3B+에 올려보기” 글을 참고하셔서 하위 openwrt 디럭토리로 이동하여 SD Card에 다운로드를 하면 됩니다.

라즈베리파이 3B+에서 OpenWRT의 시리얼 통신은 아래 링크 글 참고하세요.

프로젝트를 시작하며….

일단 OpenWRT로 어떤 임베디드 장치를 개발할지 딱 떠오르지는 않습니다. 프로젝트라는게 일단은 어떤 목표가 있어야 하지만, 이번 코드도사에서 시작할 프로젝트인 “CIoT”는 IoT 기기를 OpenWRT로 차근차근 만들어보자는게 목표입니다. 다소 불분명하지만 IoT 기기에 필요한 여러가지 것들을 차근차근 넣어볼 생각입니다.

  • MQTT(mosquitto)
  • WEB UI(luci/lua, javascript)
  • WiFi
  • Network Function
  • IoT 센서 및 IoT 장치 연동
  • 네트워크 카메라
  • 기타 등등

일단 통신 프로토콜은 “MQTT”를 기반으로 사용하기로 했습니다. MQTT는 가벼운 패킷으로 정보를 전달하기에 최적인 프로토콜입니다. 메인 관리 장치인 “라즈베리파이 OpenWRT”와 “아두이노 + WiFi” 혹은 “아두이노 + 블루투스” 등의 장치와 연동하기에 무난합니다. 아직은 관련 기능이 들어가지 않고 github의 CIoT 소스는 빈 깡통 상태이지만 시간이 나는대로 관련 기능을 하나하나 추가해 볼 생각입니다.

또한 임베디드 장치에도 중요해진 “WEB UI”를 커스텀 작업을 통해 구현해볼 생각입니다. 물론 누가봐도 예쁜 UI를 구현하기에는 실력이 부족하지만 차근차근 하면서 배워가는 기회가 되었으면 하는 바램입니다.

어떤 데이터를 전송받아 기능을 수행할지는 여전히 고민거리지만 차근차근 진행하면서 진행사항을 코드도사 사이트를 통해 수시로 공지할 생각압니다. 관련하여 궁금한 점이 있다면 언제든 댓글로 문의주시면 됩니다.

CIoT 프로젝트는 IoT 기기 개발의 목적도 있지만 이 사이트를 방문해주시는 학생, 일반인들에게도 OpenWRT를 통해 임베디드 리눅스를 접하는데에 목적이 있습니다. 따라서 지속적으로 코드도사 사이트에서는 관련하여 강의/강좌를 진행할 예정이니 많은 방문 및 문의 주시면 감사하겠습니다.

그럼 Enjoy!

'코드도사(codedosa.com)'에는 쿠팡파트너스 등의 제휴링크가 포함되어 있으며 수수료를 제공받을 수 있습니다.