OS/OpenWRT, LEDE

OpenWrt/LEDE, 전체 기본 Image 만들기

TechNote.kr 2016. 7. 14. 18:04
728x90

OpenWrt를 처음 접한다면 OpenWrt를 소개하는 아래글을 먼저 읽어보는 것을 권장한다.


OpenWrt, 리눅스를 공유기 속으로.


OpenWrt에 대해 이해하였고, 자신의 공유기에 OpenWrt를 적용하기로 결정을 했다면 자신이 빌드하고 적용하고자 모델이 OpenWrt에서 지원하는지 확인이 필요하다.

OpenWrt 지원 여부 확인하기


OpenWrt에 대해 이해하였고, 보유한 공유기에 대해 빌드하기로 결정하였다면 아래 절차를 참고하면 된다. 


 OpenWrt를 빌드하고자 한다는 것은 무엇인가 코드를 수정하거나 새로운 기능을 추가한다는 의미가 될 것이다. 그러기 위해서는 기준이 되는 바이너리를 먼저 만드는 과정이 필요하다. 기본 동작을 하는 바이너리가 확보되어야 그것을 바탕으로 수정 사항을 확인해 볼 수 있기 때문이다. 


참고로 이 글에서는 다음과 같은 조건의 바이너리를 생성해 보고자 한다.


-. HW : TP-Link TL-WDR4300

-. OpenWrt 15.05 (or LEDE 17.01.4)

-. luci (web interface) 포함

-. Build 환경 : Ubuntu 14.04, 16.04


1. 우선 빌드에 필요한 package를 다운로드 받는다. (root 권한)

# apt-get install build-essential subversion libncurses5-dev zlib1g-dev mercurial gawk unzip gcc-multilib flex git git-core gettext libssl-dev python file wget rsync man-db g++


2. 빌드에 필요한 Source Code 를 다운로드 받는다. (일반 계정 권한)


OpenWrt 의 경우는 root 권한으로 코드를 sync 하고 빌드하여도 바이너리가 생성되지만 LEDE의 경우는 바이너리 생성을 위해 일반 계정으로 빌드하여야 한다.


관련 글

[LEDE에서 root로 빌드 불가능] 


별다른 이유가 있지 않다면 root 로 작업하는 것은 바람직하지 않으므로 OpenWrt 에서 root로 빌드가 되더라도 일반 계정으로 빌드하는 것이 적절해보인다.  


[OpenWrt 15.05]

$ git clone git://git.openwrt.org/15.05/openwrt.git


[LEDE 17.01.4]

$ git clone https://git.lede-project.org/source.git lede




3. 원하는 commit 으로 checkout 한다. 


항상 최신 코드가 좋은 것은 아니다. 안정성이 확인된 commit 혹은 revision 번호를 확인해 해당 코드로 sync한다. 


최신 코드에서 작업하기 원한다면 이 과정은 그냥 넘어가면 된다.


관련글

[현재 commit 확인하기]

[원하는 commit으로 checkout 하기]


4. feed를 갱신한다. 


git을 통해 Source code를 받은 만큼 최신을 받았겠지만, 소위 말하는 feed (package 의 개념) 가 최신인지 여부를 확인하고, 포함되지 않은 feed 를 받기 위해 아래 명령을 실행한다. 


만약 해당 명령어 수행하지 않으면 Luci 와 같은 package를 설정에서 찾을 수 없다. 


[OpenWrt]

# cd openwrt

# ./scripts/feeds update -a

# ./scripts/feeds install -a


[LEDE]

# cd lede

# ./scripts/feeds update -a

# ./scripts/feeds install -a







5. 자신의 공유기에 맞는 설정을 한다.


$ make menuconfig

make menuconfig를 하게 되면 아래와 같이 설정 메뉴가 나타나는데 여기서 설정해 주어야 하는 부분은 3부분이다. 


-. Target System : 보유한 공유기의 Chipset 종류를 설정한다.

-. Target Profile : 보유한 공유기의 모델을 설정한다.

-. LuCI : Web Interface 지원을 위해 LuCI 사용을 설정한다.



-. Target System 의 설정

보유한 공유기가 어떤 chipset을 사용하는지는 확인하기가 사실 쉽지 않다. 따라서 OpenWrt.org에서 제공하는 정보를 이용하면 좀 더 쉽게 확인할 수 있다. TP-Link TL-WDR4300의 경우 아래 링크에서 확인이 가능하다.


https://wiki.openwrt.org/toh/tp-link/tl-wdr4300

https://lede-project.org/toh/hwdata/tp-link/tp-link_tl-wdr4300



위와 같이 Atheros AR9344 이므로 Target System에서 Atheros AR7xxx/AR9xxx를 선택한다. 

위와 같은 방식으로 보유한 공유기의 Chipset을 확인하고 설정하면 된다.


-. Target Profile 의 설정

 Build하고자 하는 모델을 설정하는 곳이다. 나의 경우는 TP-LINK TL_WDR4300 이므로 TP-LINK TL-WDR3500/3600/4300/4310/MW4350R 을 선택하였다.


-. LuCI

 기본으로 enable되어 있어야 할 것 같은데 disable되어 있다. LuCI가 enable되어 있지 않으면 Browser를 통해 공유기 설정이 불가능하다. 좀 더 원활한 설정을 위해서 enable 해주자


[ Target System, Target Profile 의 설정 ]



[ LuCI의 설정 ]



6. 빌드 하기 전 아래 명령어로 다시 한번 확인한다.


$ make defconfig

$ make prereq

make defconfig의 경우 생성된 설정파일(.config)가 없을 경우 default configuration을 생성해 주는데 make menuconfig에서 이미 설정파일을 만들었기 때문에 사실해 줄 필요는 없다. (이미 설정파일이 있을 경우 make defconfig를 하여도 아무런 변경이 없다.)


make prereq의 경우는 좀 생소해서 makefile을 보았는데 실질적인 build 전에 build 시 꼭 필요한 Architecture 관련 부분이 누락되었는지 확인하는 코드로 보인다. 빌드전에 한번 실행해 주자




7. 이제 실제 빌드를 진행해보자.


# make


or


# make V=s


or


# make -j 2


 기본적으로 make만 진행하여도 빌드가 진행된다. 하지만 빌드 실패시 혹은 정상이더라도 더 자세한 로그를 보고 싶다면 "V=s" 옵션을 추가해 주면 된다. 좀 더 빠른 빌드를 하고 싶다면 자신의 CPU 갯수에 맞는 숫자를 "-j 2" 와 같이 옵션으로 넣어주면 된다.




8. 결과물을 확인해보자


[OpenWrt]

# cd bin/ar71xx


[LEDE]

# cd bin/targets/ar71xx/generic


결과물은 bin 디렉토리 밑에 있다. ar71xx chipset 으로 빌드하여 ar71xx 디렉토리가 생성되었고, 실제 output은 해당 디렉토리 아래에 있다.


실제 사용할 바이너리는 아래와 같다.


[OpenWrt]

openwrt-ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin


[LEDE]

lede-ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin




위와 같이 진행하면 실제 구동되는 OpenWrt/LEDE 바이너리를 빌드할 수 있다. 



reference


https://wiki.openwrt.org/doc/howto/build

https://lede-project.org/docs/guide-developer/quickstart-build-images




728x90