OpenWRT를 라즈베리파이 3 B+에 올려보기
코드도사에서는 오픈소스 라우터 개발환경인 OpenWRT에 대하여 소개해 드린적이 있습니다. 소개와 함께 OpenWRT를 올릴 타켓 디바이스를 라즈베리파이3로 설정하여 컴파일까지 진행을 해봤는데요, 이번 포스트에서는 실제 OpenWRT를 라즈베리파이 3 B+에 올리는 방법에 대하여 설명해보고자 합니다.
제가 한창 OpenWRT로 라우터를 개발할때만 하더라도 라즈베리파이는 시중에 출시되지 않았었고, 출시된 이후에도 OpenWRT 지원여부를 알지 못했지만 라즈베리파이 1이 출시되고 나서 얼마 지나지 않은 후에 OpenWRT에서도 라즈베리파이를 지원한다는 소식을 들었습니다. 그만큼 라즈베리파이는 임베디드 시스템 중에서도 범용성을 갖췄다고 볼 수 있습니다.
이번 시간에는 컴파일 이후에 라즈베리파이에 어떻게 컴파일 된 OpenWRT 펌웨어를 올리는 지, 그리고 OpenWRT를 올린 후에 기본 설정을 어떻게 하는지에 대하여 알아보겠습니다.
사전 준비
라즈베리파이 3 B+와 여분의 Micro SD Card, Micro SD Card 리더기 등을 준비합니다. 또한 OpenWRT 펌웨어의 부팅 여부를 확인하기 위해 USB to Serial 어뎁터를 준비하면 좋습니다. 만약 OpenWRT를 라즈베리파이 3 B+용으로 컴파일 하지 않았다면, 아래 링크를 참조하여 OpenWRT를 직접 컴파일 해서 펌웨어 파일을 생성하기 바랍니다.
라즈베리파이의 시리얼 통신 관련해선 아래 링크의 글을 참고하세요.
OpenWRT 펌웨어를 라즈베리파이에 올리기 위해 한가지 더 준비할께 있습니다. SD Card로 펌웨어를 Write하려면 Win32 Disk Imager 가 필요합니다. 아래 링크에서 다운로드 받아서 Windows 상에서 설치하기 바랍니다.
Win32 Disk Imager 까지 설치했다면 사전 준비는 된것입니다.
OpenWRT 펌웨어를 SD Card로 복사하기
OpenWRT를 git으로 clone하여 컴파일 하면 {ROOT}/bin/targets/brcm2708/bcm2710/ 에 build된 OpenWRT 펌웨어가 있습니다. 이들 중에 “openwrt-brcm2708-bcm2710-rpi-3-squashfs-sysupgrade.img.gz” 파일을 Windows로 복사합니다.
이 파일은 OpenWRT의 bootloader, Kernel, RootFS이 한 파일로 압축이 되어 있다고 보면 되겠습니다. 이 파일을 SD Card로 복사하려면 먼저 압축을 해제합니다. 압축을 해제하면 .img 파일이 생성이 되는데 대략 사이즈가 160 MB 정도 됩니다.
이 압축해제한 img 파일을 Win32 Disk Imager를 이용해서 복사해주면 됩니다. 먼저 Micro SD Card를 SD 카드 리더기에 삽입 후 USB 포트에 연결합니다. 그런 다음 Win32 Disk Imager를 실행합니다.
Device가 SD Card로 되어 있는지 확인 후 Image File을 선택해 줍니다. Browse 버튼을 눌러서 좀 전에 압축을 해제한 OpenWRT img 파일을 선택해 줍니다. 이 과정이 완료되었으면 하단의 Write 버튼을 클릭합니다. 그러면 OpenWRT 펌웨어가 Micro SD 카드로 복사가 진행됩니다.
2~3분여 시간이 지나면 위의 화면과 같이 OpenWRT 펌웨어를 Micro SD 카드로 복사하는 과정이 완료되게 됩니다. 이후에 Win32 Disk Imager를 종료하고 SD Card 리더기를 제거한 후에 라즈베리파이의 Micro SD 카드 슬롯에 끼웁니다.
라즈베리파이의 Micro SD 카드 슬롯 생각나시죠? 케이스를 장착했으면 하단부에 슬롯이 있습니다. 저는 개인적으로 라즈비안도 같이 사용하고 있기 때문에 OpenWRT 펌웨어용으로 별도의 Micro SD 카드를 준비하였습니다. 라즈베리파이를 사용하시다 보면 이렇게 별도의 Micro SD Card를 준비해 놓는게 좋습니다.
OpenWRT 펌웨어를 복사한 Micro SD 카드를 끼웠다면 이제 실제 OpenWRT로 부팅이 되는지 확인을 해보겠습니다.
OpenWRT가 부팅되는지 확인
자 그럼 이제 OpenWRT가 잘 부팅 되는지 확인을 해볼 차레입니다. OpenWRT는 초기에 부팅 여부를 확인하기 위해서는 시리얼 통신으로 확인해 보면 됩니다. 라즈비안에서는 HDMI로 초기 부팅시에 그래픽 화면이 제공되었지만 OpenWRT는 임베디드 리눅스 OS 이기 때문에 HDMI를 지원하지 않습니다. 따라서 라즈베리파이에 UART 핀을 연결하는게 필요합니다.
준비한 USB to Serial 어뎁터에 GPIO 6,8,10 번에 각각 GND, Tx, Rx에 핀을 연결합니다. 그리고 나서 터미널 프로그램을 실행시킵니다. 저는 TeraTerm을 실행하였습니다.
시리얼 속도는 115200으로 설정해주면 됩니다. 그럼 부팅이 되는지 확인해 볼까요?
와우! 라즈베리파이에서도 OpenWRT가 정상적으로 부팅이 되는것을 확인하였습니다. 실제로도 잘 동작하고 부팅을 잘 하네요. 이제 라즈베리파이도 OpenWRT 개발 플렛폼으로 이용할 수 있을꺼 같습니다.
root 패스워드 설정 및 SSH 설정
OpenWRT가 잘 올라가는 것을 확인하였는데요, 그러면 실제로 SSH로 라즈베리파이로 접근하려면 어떻게 해야 할까요? 먼저 가장 기본적인 root 패스워드를 설정해야 합니다. “passwd root”라는 명령어로 root 패스워드를 설정해 줍니다.
root 패스워드 설정하는 것은 간단합니다. 위의 화면과 같이 설정만 하면 됩니다. 이후에는 root 패스워드는 새로 설정한 패스워드가 적용됩니다.
이제 SSH의 패스워드도 설정이 완료되었네요. 이후에는 SSH로 접속할때 root계정에 설정한 패스워드로 접속하면 됩니다. 그럼 이제 네트워크를 활성화 시켜 볼까요?
먼저 라즈베리파이의 공식 OS인 라즈비안은 네트워크 인터페이스로 이더넷과 WiFi가 지원이 되었는데요. OpenWRT 또한 이더넷과 WiFi가 지원이 될것으로 생각했지만… 확인해 보니 이더넷은 정상이지만 WiFi는 드라이버 load중 오류가 발생하는 걸로 확인이 됩니다. 일단 사용할 수 있는 이더넷 포트에 케이블을 연결하여 네트워크를 활성화 시킬 수 밖에 없을꺼 같습니다.
위의 사진처럼 이더넷 포트에 케이블을 연결하고 다른 쪽은 IP 공유기의 포트에 연결하면 됩니다.일단 한쪽만 연결하고 다른 쪽은 케이블을 연결하지 않은 상태도 두기 바랍니다. 그런 다음 OpenWRT의 네트워크 설정을 바꿔줘야 하는데요, uci 를 사용하여 바꿔줍니다. 디폴트로는 이더넷 인터페이스의 설정이 Static으로 되있는데, 이걸 DHCP로 바꿔주면 시스템이 부팅될때마다 자동으로 OpenWRT가 IP를 받아오고 네트워크를 활성화 시킵니다.
시리얼 터미널에서 아래와 같이 입력합니다.
uci set network.lan.proto=dhcp uci commit /etc/init.d/network restart
설정이 완료되었으면 OpenWRT가 이더넷 케이블이 연결되면 자동으로 IP를 받아와서 네트워크를 활성화 하게 됩니다. 이 상태에서 다른 한쪽의 이더넷 케이블을 연결합니다.
이더넷 케이블을 연결하면 연결되었다는 메시지가 뜹니다. 이 상태에서 ifconfig을 입력하면 br-lan에 dhcp로 IP가 할당된 것을 확인할 수 있습니다. 그럼 192.168.0.27로 SSH를 접속해 볼까요?
짝짝짝! 드디어 라즈베리파이에 OpenWRT를 올리는것과 기본적으로 SSH가 접속되는 것을 완료하였습니다. 일단 이더넷으로 네트워크를 활성화 시켰지만 추후에 WiFi를 활성화 하여 네트워크 연결을 하는 부분은 별도로 포스팅을 하도록 하겠습니다.