-
OpenWrt: Package ν¨ν€μ§ λΉλ :: Hello, world!SECURITY/OpenWrt 2021. 7. 22. 01:46
λͺ¨λ νλ‘κ·Έλλ°μ 첫 μμμ Hello, world! λ¬λ€.
κ·Έλ¬λ μ§κΈ ν¬μ€ν ν λ΄μ©λ OpenWrt μ helloworld λΌλ ν¨ν€μ§λ₯Ό λΉλνκ³ μ€μΉνλ λ΄μ©μ΄λ€.
μλ λ΄μ©μ OpenWrt helloworld 곡μ λ¬Έμλ₯Ό μ°Έκ³ νμμ΅λλ€.
https://openwrt.org/docs/guide-developer/helloworld/start
Part 1. helloworld ν¨ν€μ§ μμ±νκ³ λΉλνκΈ°
λ¨Όμ SDK κ° νμνλ€.
λμ κ²½μ°, OpenWrt SDK λ컀 컨ν μ΄λλ‘ ν΄λΉ νκ²½μ ꡬμΆνλ€.
νμ§λ§ μμ μ κΈ°κΈ°μ λ§λ μμ€ μ½λμμ SDK νμΌ λν μ 곡νκ³ μμΌλ, Linux μμ κ·Έκ±Έ λ€μ΄λ°κ³ μ§νν΄λ μκ΄μκ² λ€.
λ€λ§ staging_dir μ κ΅μ°¨ μ»΄νμΌλ§μ μν΄ νμνλ, νμΈνκΈ°!
λ¨Όμ μμ€ μ½λλ₯Ό μμ±ν΄μ£Όμ.
$ cd /home/build/openwrt/package/mypackages/examples/helloworld/ $ vi helloworld.c
vi μλν° (μμΌλ©΄ λ€λ₯Έ νλ‘κ·Έλ¨ μ¬μ©νκ±°λ, vim μ€μΉ κΆμ₯) λ₯Ό μ¬μ©νμ¬ helloworld.c λΌλ μ΄λ¦μ κ°λ¨ν μμ€ μ½λλ₯Ό μμ±νμ.
κ²½λ‘λ μ΄λλ μκ΄ μμΌλ, λμ€μ μ΄ κ²½λ‘λ₯Ό μμ€ μ½λ ν΄λλ‘ μ§μ ν΄μΌ νκΈ° λλ¬Έμ κΈ°μ΅ν΄μ£Όκ³ μμ΄μΌ νλ€.
(μ ν΄λκ° μ‘΄μ¬ν΄μΌ νλλ°, μ΄λ λ°μ λ΄μ© νλ€κ° κ²½λ‘λ₯Ό μμ±ν κ²μ΄κΈ° λλ¬Έμ μλ λ΄μ© π μ°Έκ³ )
#include <stdio.h> int main(){ printf("Hello, world!\n\n"); return 0; }
Hello, world λ₯Ό μΆλ ₯νλ κ°λ¨ν C μ½λ μ΄λ€.
μ΄ μμ΄λ₯Ό νλ² μ»΄νμΌν΄λ³΄μ. μ μμ±νλμ§ νμΈμ°¨!
$ gcc -o helloworld helloworld.c $ ./helloworld
μΆλ ₯μ΄ μ λλ©΄ μ±κ³΅ν κ²μ΄λ€.
μ΄μ 본격μ μΌλ‘ ν¨ν€μ§λ₯Ό λ§λ€μ΄λ³΄μ.
ν¨ν€μ§λ₯Ό λ§λ€ ν΄λλ₯Ό μμ±νλ€. (π)
$ mkdir -p /home/build/openwrt/package/mypackages/examples/helloworld $ cd /home/build/openwrt/package/mypackages/examples/helloworld
(μ΄ν΄λ₯Ό μν΄ κ³μ μ λκ²½λ‘λ‘ νκ³ λ μμ§λ§, λ무 κΈΈμ΄μ§λ―λ‘ μ·¨μ¬μ ν.. )
μ¬κΈ°μ Makefile μ λ§λ€ κ²μ΄λ€.
make λ κ°λ¨ν λ§ν΄μ μ¬λ¬ μμ μ ν νμΌλ‘ μμ±ν΄μ κ΄λ¦¬νλ κ²μΈλ°, λμ€μ κΈ°νκ° λλ©΄ λ€λ€λ³΄λλ‘ νκ² λ€.
μ¬κΈ°μλ OpenWrt 곡μ λ¬Έμ Helloworld μμ μ 곡ν΄μ£Όλ Makefile (https://openwrt.org/_export/code/docs/guide-developer/helloworld/chapter3?codeblock=2) μ μ¬μ©ν΄λ 무κ΄νλ€.
λ¨, μμ€ μ½λ ν΄λλ λ³κ²½ν΄μΌ νλ€. : SOURCE_DIR
κ°λ¨νκ² μ‘°κΈλ§ μ΄ν΄λ³΄κΈ° μν΄ ν΅μ¬μ΄λΌκ³ μκ°νλ 4κ°μ§ λΆλΆμ κ°μ Έμλ€.
# [1] PKG_NAME:=helloworld PKG_VERSION:=1.0 PKG_RELEASE:=1 # [2] SOURCE_DIR:=/home/build/openwrt/package/mypackages/examples/helloworld # [3] # Package definition; instructs on how and where our package will appear in the overall configuration menu ('make menuconfig') define Package/helloworld SECTION:=examples CATEGORY:=Examples TITLE:=Hello, World! endef # [4] # Package build instructions; invoke the target-specific compiler to first compile the source file, and then to link the file into the final executable define Build/Compile $(TARGET_CC) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/helloworld.o -c $(PKG_BUILD_DIR)/helloworld.c $(TARGET_CC) $(TARGET_LDFLAGS) -o $(PKG_BUILD_DIR)/$1 $(PKG_BUILD_DIR)/helloworld.o endef
- [1] ν¨ν€μ§ μ΄λ¦/λ²μ /λ¦΄λ¦¬μ¦ μ 보λ₯Ό μμ±νλ κ³³μ΄λ€. μΆν μμ±ν ν¨ν€μ§ νμΌλ μ΄ λ΄μ©μ κΈ°λ°μΌλ‘ μμ±λλ€.
- [2] μμ€ μ½λκ° μμΉνλ ν΄λμ κ²½λ‘μ΄λ€.
- [3] μ 체 configuration μμ μ°λ¦¬ ν¨ν€μ§λ₯Ό μ΄λμ μμΉν κ±°λλ κ²μ΄λ€
νμ΄ν μ 보μ λ°λΌμ 보μ¬μ§κ³ , μΉ΄ν κ³ λ¦¬λ make menuconfig λ₯Ό νλ©΄ λμ€λ μ°½μμμ μΉ΄ν κ³ λ¦¬λ€μ μλ―Ένλ€. μ΄λ λμ€μ make menuconfig λ₯Ό ν΄λ³΄λ©΄ κ°μ΄ λ°λ‘ μ¬ κ²μ΄λ€. (π©) - [4] compile μμ±μ μ μνλ λΆλΆμ΄λ€. μμμ gcc -o helloworld helloword.c λ₯Ό νλ κ²μ²λΌ, μ»΄νμΌλ¬λ₯Ό μ§μ νκ³ μ¬λ¬ μ΅μ μΌλ‘ μ΅μ’ μ€ν νμΌμ μ»΄νμΌ νλ κ³Όμ μ΄λ€. $() μ λΉΌκ³ λ³΄λ©΄ μ΄ν΄κ° λ λ μλ..
μ΄μ
OpenWrt build system μ feeds.conf λΌλ νμΌμ μ¬μ©ν΄μ firmware configuration stage μμ μ¬μ©ν μ μλλ‘ λ§λ€μ΄μ§ package feeds λ₯Ό κ΄λ¦¬νλ€.
μ΄ νμΌμ μ°λ¦¬μ ν¨ν€μ§λ₯Ό μ μ΄μ£Όλ©΄ λλλ°, openwrt λ£¨νΈ ν΄λμ μ΄λ―Έ μμ μλ, μμ μλ μλ€.
λμ κ²½μ° μ΄λ―Έ μ‘΄μ¬νλ feess.conf.default νμΌμ΄ μ‘΄μ¬νμ¬ κ·Έ νμΌμ ν¨ν€μ§ μ 보λ₯Ό μμ±νμλ€.
λ€μκ³Ό κ°μ΄ μμ±νμλ€.
$ src-link mypackages /home/build/openwrt/package/mypackages
μ΄κ±Έ μ μ₯ν΄μ£Όλ©΄ μ΄μ feeds λ₯Ό μ λ°μ΄νΈνκ³ μ€μΉν μκ°μ΄λ€.
λ€μμ μ λ ₯ν΄μ£Όλ©΄ λλ€.
λμΆ© "μ΄μ helloworld λΌλ ν¨ν€μ§λ₯Ό λΉλν λ μΈμν μ μλλ‘ λ±λ‘ν΄μ€¬κ΅¬λ" λΌκ³ μκ°νλ©΄ λλ€.
$ cd /home/build/openwrt $ ./scripts/feeds update mypackages $ ./scripts/feeds install -a -p mypackages
μ΄μ μ°λ¦¬μ ν¨ν€μ§κ° firmware configuration μ ν¬ν¨λλλ‘, λ€μ λͺ λ Ήμ΄λ₯Ό μΉκ³ μ€μ μ ν΄λ³΄μ.
$ make menuconfig
κ·ΈλΌ λ€μκ³Ό κ°μ μ°½μΌλ‘ μ νλλ€.
κ·Έ μ€ Examples ν΄λ¦ (π©)
μκΉ Makefile μ μμ±ν κ²μ²λΌ, Examples μΉ΄ν κ³ λ¦¬μ λ€μ΄κ°λ©΄ helloworld ν¨ν€μ§κ° λ³΄μΌ κ²μΌλ‘ μμλλ€.
μμ μ°λ¦¬κ° μμ±ν helloworld κ° λ³΄μΈλ€!
μ°μΈ‘ μ€λͺ λ Makefile μ μμ±ν λλ‘ ν¨ν€μ§κ° 보μ΄λ κ²μ νμΈν μ μλ€.
μ νλ μνμμ (νλμ νμ΄λΌμ΄λ) Y λ₯Ό λλ₯΄λ©΄ μ νλλ€.
μ΄λ μ΄ ν¨ν€μ§λ₯Ό firmware configuration μ ν¬ν¨νλ€λ κ²μ μλ―Ένλ€.
save λλ₯΄λ©΄ μλμ κ°μ΄ .config μ μ₯μ΄ λ¨κ³ , ok λλ₯΄κ³ exit νλ©΄ λλ€.
(λͺ¨λ μ‘°μμ ν€ν¨λλ‘, μ’-μ°-μν° λ₯Ό ν΄λ³΄λ©΄ κ°μ΄ μ‘ν κ²μ΄λ€.)
μ΄μ μ°λ¦¬μ ν¨ν€μ§λ₯Ό μ»΄νμΌν μ€λΉκ° λλ¬λ€!
(_μ§μ§_μ§μ§_μ΅μ’ )λ€μ λͺ λ Ήμ΄λ₯Ό μ€νν΄μ£Όμ.
$ make package/helloworld/compile
μ¬κΈ°μ λ€μκ³Ό κ°μ΄ μ±κ³΅νλ©΄ (= μ€ν¨νλ€κ³ λ¨μ§ μμΌλ©΄) ν¨ν€μ§ λΉλκ° μλ£λ κ²μ΄λ€!
λ¨, μ€λ₯κ° λκΈ°λ νλλ° κ·Έλ° κ²½μ°μ V=s -j1 μΌλ‘ μ΅μ μ μ£Όκ³ μ΄ν΄λ³΄μ.
λμ κ²½μ° Makefile μμ μμ€ μ½λ ν΄λλ₯Ό μλͺ» μ§μ νμλ€;;
(μνλ²³ νλλ‘ λ¬λΌμ§λ 0κ³Ό 1μ γ -γ κ³)ν΄λΉ κ²½μ°λ μλμ κ°μλ€.
μ΅μ μ μ£Όκ³ λ€μ μ€νν κ²°κ³Ό μ€λ₯λ₯Ό μμΈν μ μ μμλ€.
λΉλν ν¨ν€μ§ νμΌμ /bin μͺ½μΌλ‘ κ°λ©΄ μ°Ύμ μ μλ€.
ipk νμΌμ΄ 보μ΄λλ°, κ·Έκ² λ°λ‘ ν¨ν€μ§ νμΌμ΄λ€.
μ΄λ‘μ¨ helloworld ν¨ν€μ§ νμΌμ μμ±νκ³ λΉλκΉμ§ μλ£νλ€!
Part 2. OpenWrt μ helloworld ν¨ν€μ§ μ€μΉ
μ΄μ μ΄ νμΌμ OpenWrt ν μ€νΈ λ컀 컨ν μ΄λμ 보λ΄μ μ€μΉν΄λ³Ό κ²μ΄λ€.
(κ΄λ ¨ λ΄μ©μ
μμ μμΈν λ€λ£¨μλ€.)
λ€μκ³Ό κ°μ΄ 2κ°μ λ컀 컨ν μ΄λλ₯Ό μ€λΉνμ.
μΌμͺ½μ OpenWrt 컨ν μ΄λ (μ΄ν A) κ³ , μ€λ₯Έμͺ½μ μ¬ν μμ νλ OpenWrt SDK λ컀 컨ν μ΄λ (μ΄ν B) λ€.
(λ λ€ λμ»€κ° μλ λ€λ₯Έ νκ²½μΌλ‘ ꡬμΆνμ¬λ 무κ΄!)
B μμ λ€μκ³Ό κ°μ΄ μ λ ₯ν΄μ£Όμ.
$ scp helloworld_1.0-1_x86_64.ipk root@172.17.0.4:/
(ip μ£Όμμ νμΌλͺ μ μμ μ λ§κ² λ³κ²½!)
μ μ μ‘λ κ²μ μλμ κ°μ΄ νμΈν μ μλ€.
μ΄μ opkg λ‘ μ μ‘λ°μ helloworld ipk νμΌμ μ€μΉν΄μ£Όμ.
κ·Έλ¦¬κ³ helloworld λ₯Ό μ λ ₯νλ©΄ λ€μκ³Ό κ°μ΄ μ°λ¦¬κ° μμ±ν μ½λκ° μ€νλλ©° "Hello, world!" κ° μΆλ ₯λλ€.
# opkg install helloworld_1.0-1_x86_64.ipk # helloworld
μ΄λ κ² helloworld ν¨ν€μ§λ₯Ό μμ±νκ³ OpenWrt μ μ€μΉκΉμ§ λ§μ³€λ€.
* /home/build/openwrt/package/mypackages/examples/helloworld/
*~/openwrt/bin/packages/x86_64/base'SECURITY > OpenWrt' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
OpenWrt: DDos 곡격μ Snort λ‘ νμ§ (0) 2021.08.07 OpenWrt λ₯Ό docker λ‘ :: OpenWrt, SDK, Package, ipk, scp (0) 2021.07.16