Compile Firmware from source - XIYO/asuswrt-merlin.ng-kr GitHub Wiki

Asuswrt-merlin λΉŒλ“œ 방법

μƒνƒœ: ν˜„μž¬ μΆ”μ²œν•˜λŠ” λΉŒλ“œ μ‹œμŠ€ν…œμ€ Ubuntu 20.04 LTS이며, 이 λ¬Έμ„œλŠ” 그에 맞게 μ‘°μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λ¦¬λˆ…μŠ€ λ²„μ „μ—μ„œμ˜ λΉŒλ“œμ— λŒ€ν•œ λ¬Έμ„œλŠ” λ³΄μ‘΄λ˜μ–΄ μžˆμ§€λ§Œ, μ•„λ§ˆλ„ κ΅¬μ‹œλŒ€μ˜ 것이며 κ·Έλ ‡κ²Œ ν‘œμ‹œλ  κ²ƒμž…λ‹ˆλ‹€.

λΉŒλ“œμš© 가상 λ¨Έμ‹  μ„€μ •ν•˜κΈ°

μœˆλ„μš° 10 (2004 버전 이상)

μœˆλ„μš° 10 버전 2004 μ΄μƒμ—μ„œ λΉŒλ“œμš© 가상 머신을 μ„€μ •ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법은 Windows Subsystem for Linux (WSL2)을 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λΉŒλ“œ VM용 WSL을 κ΅¬μ„±ν•˜λŠ” 방법에 λŒ€ν•œ 지침은 WSL2 μ•„λž˜μ—μ„œ λΉŒλ“œ VM μ„€μ •ν•˜κΈ°λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λ¦¬λˆ…μŠ€, MacOS, 였래된 μœˆλ„μš°

λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œ, MacOS, 였래된 μœˆλ„μš° λ²„μ „μ—μ„œλŠ” Canonical의 Multipassλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉŒλ“œμš© 가상 머신을 μ„€μ •ν•˜λŠ” 것이 κ°€μž₯ μ‰½μŠ΅λ‹ˆλ‹€. Multipass μ•„λž˜μ—μ„œ λΉŒλ“œ VM μ„€μ •ν•˜κΈ°λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λΉŒλ“œ VMμœΌλ‘œμ„œμ˜ Docker μ»¨ν…Œμ΄λ„ˆ

더 μΆ”μƒν™”λœ λΉŒλ“œλ₯Ό μ„ ν˜Έν•˜κ³  λΉŒλ“œ VM 섀정을 λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ λ§‘κΈ°κ³  싢은 μ‚¬λžŒλ“€μ„ μœ„ν•΄, GNUTon은 λͺ¨λ“  도ꡬ가 이미 μ„€μ •λœ Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“€κ³  μœ μ§€ κ΄€λ¦¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, λ¦¬λˆ…μŠ€ ν™˜κ²½ μ„€μ •μ˜ λͺ¨λ“  단계λ₯Ό κ±΄λ„ˆλ›°κ³  λ°”λ‘œ 컴파일둜 λ„˜μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ Dockerμ—μ„œ λΉŒλ“œ VM μ„€μ •ν•˜κΈ°μ—μ„œ GNUTon의 μž‘μ—… 링크λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λ§₯ μ‚¬μš©μžλ₯Ό μœ„ν•œ 주의 사항: 컀널 μ†ŒμŠ€λŠ” λΉŒλ“œλ₯Ό μœ„ν•΄ λŒ€μ†Œλ¬Έμž ꡬ뢄 파일 μ‹œμŠ€ν…œμ΄ ν•„μš”ν•©λ‹ˆλ‹€! Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉŒλ“œμ— μ‚¬μš©ν•˜λŠ” 경우, μ‹œμŠ€ν…œ 파일 μ‹œμŠ€ν…œμ˜ λŒ€μ†Œλ¬Έμž ꡬ뢄(λŒ€λΆ€λΆ„ λŒ€μ†Œλ¬Έμž ꡬ뢄이 μ•ˆ 됨)을 μƒμ†ν•©λ‹ˆλ‹€. κ°€μž₯ μ‰¬μš΄ 해결책은 λ””μŠ€ν¬ 이미지 νŒŒμΌμ„ μƒμ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€(λ””μŠ€ν¬ μœ ν‹Έλ¦¬ν‹° μ‚¬μš©, μƒˆ 이미지 -> 빈 이미지, 포맷 μ˜΅μ…˜μ„ λŒ€μ†Œλ¬Έμž ꡬ뢄 ν˜•μ‹μœΌλ‘œ μ„€μ •ν•˜κ³  이미지에 μ•½ 10GB 정도λ₯Ό ν• λ‹Ή). 이미지λ₯Ό μƒμ„±ν•˜κ³  λ§ˆμš΄νŠΈν•˜μ„Έμš”(/Volumes μ•„λž˜μ— 마운트될 κ²ƒμž„), 그런 λ‹€μŒ git μ €μž₯μ†Œλ₯Ό κ·Έ 마운트된 λ³Όλ₯¨μ— λ³΅μ œν•˜κ³ , μ»¨ν…Œμ΄λ„ˆ λ‚΄ /build에 λŒ€μ†Œλ¬Έμž ꡬ뢄 λ ˆν¬μ§€ν† λ¦¬λ₯Ό λ°”μΈλ“œ λ§ˆμš΄νŠΈν•˜κΈ° μœ„ν•΄ ν•΄λ‹Ή μœ„μΉ˜μ—μ„œ 도컀 λΉŒλ“œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ λ¦¬λˆ…μŠ€ λ²„μ „μ—μ„œμ˜ λ„€μ΄ν‹°λΈŒ λΉŒλ“œ

Multipassλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉŒλ“œ VM을 μƒμ„±ν•˜λŠ” 것이 λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ 직접 λΉŒλ“œν•˜λŠ” 것보닀 훨씬 ꢌμž₯λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ λ„€μ΄ν‹°λΈŒλ‘œ λΉŒλ“œν•˜λŠ” 데 관심이 μžˆλŠ” μ‚¬λžŒλ“€μ€ μ•„λž˜ 단계λ₯Ό λ”°λ₯΄λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€(λ¦¬λˆ…μŠ€μ˜ νŠΉμ • 버전에 맞게 μ‘°μ •). 이 Wiki

의 λ‹€λ₯Έ κ³³μ—μ„œ 찾을 수 μžˆλŠ” κ΅¬μ‹œλŒ€μ˜ λ¬Έμ„œλ³΄λ‹€λŠ” 이 방법을 λ”°λ₯΄μ„Έμš”.

λ¦¬λˆ…μŠ€ ν™˜κ²½ μ„€μ •ν•˜κΈ°

λ‚˜λ¨Έμ§€λŠ” μ‹€μ œ λ¦¬λˆ…μŠ€ VMμ—μ„œ ν•  것과 λ™μΌν•©λ‹ˆλ‹€: 도ꡬ 체인의 볡사본을 μ–»κ³ , μ„€μ •ν•œ λ‹€μŒ, μ†ŒμŠ€ μ½”λ“œμ˜ 볡사본을 μ–»κ³ , λΉŒλ“œλ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.

λͺ¨λ“  μž‘μ—…μ„ μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€μ—μ„œ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ¨Όμ €, 도ꡬ 체인에 ν•„μš”ν•œ 32λΉ„νŠΈ 라이브러리λ₯Ό μ§€μ›ν•˜λ„λ‘ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒμ„ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€:

sudo dpkg --add-architecture i386

i386 μ•„ν‚€ν…μ²˜κ°€ λ‹¨κ³„μ μœΌλ‘œ νμ§€λ˜λ©΄μ„œ, 적어도 ARM μ‹œμŠ€ν…œμ—μ„œλŠ” λͺ‡ κ°€μ§€ μΆ”κ°€ 단계가 ν•„μš”ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€μ—μ„œ: https://askubuntu.com/questions/1211022/how-to-install-i386-amd64-packages-on-arm-or-any-other-arch-from-ubuntu-ports

# 'deb'λ₯Ό 'deb [arch=arm64]'둜 λŒ€μ²΄
sudo sed 's/^deb http/deb [arch=arm64] http/' -i '/etc/apt/sources.list'

x86 미러 μ„œλ²„κ°€ μžˆλŠ” /etc/apt/sources.list.d/i386.list와 같은 νŒŒμΌμ„ μΆ”κ°€ν•©λ‹ˆλ‹€:

sudo tee -a /etc/apt/sources.list.d/i386.list > /dev/null <<EOT
deb [arch=i386] http://security.ubuntu.com/ubuntu/ focal-security  main restricted universe multiverse
deb [arch=i386]  http://archive.ubuntu.com/ubuntu/ focal           main restricted universe multiverse
deb [arch=i386]  http://archive.ubuntu.com/ubuntu/ focal-updates   main restricted universe multiverse
deb [arch=i386]  http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
EOT

λ˜ν•œ, κΈ°λ³Έ μ…Έ(/bin/sh)을 dashμ—μ„œ bash둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” Broadcom의 HND 기반 λͺ¨λΈμ— μ‚¬μš©λ˜λŠ” μƒˆλ‘œμš΄ λΉŒλ“œ μ‹œμŠ€ν…œμ— μ˜ν•΄ ν•„μš”ν•©λ‹ˆλ‹€. λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜κ³ , 물어보면 Dashλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ μ„ νƒν•©λ‹ˆλ‹€:

sudo dpkg-reconfigure dash

이제 ν•„μš”ν•œ λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŽŒμ›¨μ–΄ μ½”λ“œμ— μƒˆλ‘œμš΄ ꡬ성 μš”μ†Œκ°€ 좔가됨에 따라 이 λͺ©λ‘μ€ μ‹œκ°„μ΄ 지남에 따라 변경될 수 μžˆμŠ΅λ‹ˆλ‹€.

sudo apt update
sudo apt-get install libtool-bin cmake libproxy-dev uuid-dev liblzo2-dev autoconf autoconf-archive automake bash bison \
bzip2 diffutils file flex m4 g++ gawk groff-base libncurses5-dev libtool libslang2 make patch perl pkg-config shtool \
subversion tar texinfo zlib1g zlib1g-dev git gettext libexpat1-dev libssl-dev cvs gperf unzip \
python libxml-parser-perl gcc-multilib gconf-editor libxml2-dev g++-multilib gitk libncurses5 mtd-utils \
libncurses5-dev libvorbis-dev git autopoint autogen automake-1.15 sed build-essential intltool libglib2.0-dev \
xutils-dev lib32z1-dev lib32stdc++6 xsltproc gtk-doc-tools libelf1:i386

이제 RMerlin의 μ—΄μ‹¬νžˆ μž‘μ—…ν•œ λ‚΄μš©μ„ λ‹€μš΄λ‘œλ“œν•  μ‹œκ°„μž…λ‹ˆλ‹€.

μ°Έκ³ : GitHubμ—μ„œ μ΅œμ‹  μ†ŒμŠ€ μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” 방법에 λŒ€ν•œ 맀우 μžμ„Έν•œ μ•ˆλ‚΄λŠ” 이 Wiki νŽ˜μ΄μ§€μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

cd $HOME
git clone https://github.com/RMerl/am-toolchains
git clone https://github.com/RMerl/asuswrt-merlin.ng

ν΄λ‘ ν•œ μ €μž₯μ†Œμ—μ„œ 직접 μ»΄νŒŒμΌν•˜μ§€ μ•Šκ³  λ³΅μ‚¬λ³Έμ—μ„œ μž‘μ—…ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ κΉ¨λ—ν•œ 볡사본과 λ‹€μ‹œ λ™κΈ°ν™”ν•¨μœΌλ‘œμ¨ μ‰½κ²Œ 정리할 수 μžˆμŠ΅λ‹ˆλ‹€.

mkdir amng-build
rsync -a --del asuswrt-merlin.ng/ amng-build

이제 도ꡬ 체인을 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λΈŒλ‘œλ“œμ»΄ HND ARM ν”Œλž«νΌ (RT-AC86U, GT-AC2900):

sudo ln -s ~/am-toolchains/brcm-arm-hnd /opt/toolchains
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY:/opt/toolchains/crosstools-arm-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/lib" >> ~/.profile
echo "export TOOLCHAIN_BASE=/opt/toolchains" >> ~/.profile
echo "PATH=\$PATH:/opt/toolchains/crosstools-arm-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/bin" >> ~/.profile
echo "PATH=\$PATH:/opt/toolchains/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/bin" >> ~/.profile

λΈŒλ‘œλ“œμ»΄ HND AX ARM ν”Œλž«νΌ (RT-AX56U, RT-AX58U, RT-AX86U, RT-AX88U, GT-AX11000, RT-AX68U):

sudo ln -s ~/am-toolchains/brcm-arm-hnd /opt/toolchains
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY:/opt/toolchains/crosstools-arm-gcc-5.5-linux-4.1-glibc-2.26-binutils-2.28.1/usr/lib" >> ~/.profile
echo "export TOOLCHAIN_BASE=/opt/toolchains" >> ~/.profile
echo "PATH=\$PATH:/opt/toolchains/crosstools-arm-gcc-5.5-linux-4.1-glibc-2.26-binutils-2.28.1/usr/bin" >> ~/.profile
echo "PATH=\$PATH:/opt/toolchains/crosstools-aarch64-gcc-5.5-linux-4.1-glibc-2.26-binutils-2.28.1/usr/bin" >> ~/.profile

λΈŒλ‘œλ“œμ»΄ SDK6/SDK7 ARM ν”Œλž«νΌ (RT-AC68U, RT-AC88U, RT-AC3100, RT-AC5300):

sudo ln -s ~/am-toolchains/brcm-arm-sdk/hndtools-arm-linux-2.6.36-uclibc-4.5.3 /opt/brcm-arm
ln -s ~/am-toolchains/brcm-arm-sdk  ~/amng-build/release/src-rt-6.x.4708/toolchains
echo "PATH=\$PATH:/opt/brcm-arm/bin" >> ~/.profile

amng-build 폴더 λ‚΄μ—μ„œ μ»΄νŒŒμΌμ„ μœ„ν•œ 섀정이 μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

RT-AC68U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-6.x.4708
make rt-ac68u

RT-AC88U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-7.14.114.x/src
make rt-ac88u

RT-AC3100 νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-7.14.114.x/src
make rt-ac3100

RT-AC5300 νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-7.14.114.x/src
make rt-ac5300

RT-AC86U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02hnd
make rt-ac86u

RT-AX56U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02axhnd.675x
make rt-ax56u

RT-AX58U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-

rt-5.02axhnd.675x
make rt-ax58u

RT-AX86U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02L.07p2axhnd
make rt-ax86u

RT-AX88U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02axhnd
make rt-ax88u

GT-AC2900 νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02hnd
make gt-ac2900

GT-AX11000 νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02axhnd
make gt-ax11000

RT-AX68U νŽŒμ›¨μ–΄

cd ~/amng-build/release/src-rt-5.02L.07p2axhnd
make rt-ax68u

참고자료

  1. Asuswrt-merlin λΉŒλ“œ 슀크립트
  2. Asuswrt-merlin 도ꡬ 체인

μœ μš©ν•œ 링크

  1. Asuswrt-merlin - μ‚¬μš©μž μ •μ˜ νŽŒμ›¨μ–΄ κ΄€λ¦¬μž