OpenWrt build system About - Leo-Mun/UROP_SDN GitHub Wiki

OpenWrt's build system – About

OpenWrt λΉŒλ“œ μ‹œμŠ€ν…œμ€ μ‚¬μš©μžκ°€ μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ„μœ„ν•œ 크둜슀 컴파일 툴 체인과 루트 파일 μ‹œμŠ€ν…œμ„ μ‰½κ²Œ 생성 ν•  수 μžˆλ„λ‘ν•˜λŠ” Makefile 및 패치 μ„ΈνŠΈμž…λ‹ˆλ‹€. 크둜슀 컴파일 νˆ΄μ²΄μΈμ€ μž‘μ€ C ν‘œμ€€ 라이브러리 인 musl을 μ‚¬μš©ν•©λ‹ˆλ‹€.

컴파일 νˆ΄μ²΄μΈμ€ μ‹œμŠ€ν…œ 용 μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 도ꡬ μ„ΈνŠΈμž…λ‹ˆλ‹€. ꡬ성은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

컴파일러 (우리의 경우 gcc / deb : gcc) μ–΄μ…ˆλΈ”λŸ¬μ™€ 링컀와 같은 λ°”μ΄λ„ˆλ¦¬ utils (우리의 경우 binutils / deb : binutils) C ν‘œμ€€ 라이브러리 (예 : GNU Libc, musl-libc, uClibc λ˜λŠ” dietlibc). 컴파일 νˆ΄μ²΄μΈμ€ PCλ₯Ό μ‚¬μš©ν•˜μ—¬ x86 ν”„λ‘œμ„Έμ„œμ—μ„œ μ‹€ν–‰λ˜λ©° x86 ν”„λ‘œμ„Έμ„œμš© μ½”λ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ, 컴파일 νˆ΄μ²΄μΈμ€ GNU libcλ₯Ό C ν‘œμ€€ 라이브러리둜 μ‚¬μš©ν•©λ‹ˆλ‹€. "호슀트 컴파일 도ꡬ 체인"이라고 ν•˜λ©° 이λ₯Ό 싀행쀑인 μ‹œμŠ€ν…œμ„ "호슀트 μ‹œμŠ€ν…œ"이라고 ν•©λ‹ˆλ‹€. 컴파일 νˆ΄μ²΄μΈμ€ 배포본에 μ˜ν•΄ 제곡되며 OpenWrt λΉŒλ“œ μ‹œμŠ€ν…œκ³Ό 아무 관련이 μ—†μŠ΅λ‹ˆλ‹€.

μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ€ λ‹€λ₯Έ ν”„λ‘œμ„Έμ„œλ₯Ό μ‚¬μš©ν•˜λ©° 호슀트 μ‹œμŠ€ν…œμ—μ„œ μ‹€ν–‰λ˜μ§€λ§Œ λŒ€μƒ μ‹œμŠ€ν…œ (및 λŒ€μƒ ν”„λ‘œμ„Έμ„œμ˜ λͺ…λ Ή μ§‘ν•© μ•„ν‚€ν…μ²˜ (ISA))에 λŒ€ν•œ μ½”λ“œλ₯Ό μƒμ„±ν•˜λŠ” 컴파일 툴체인이 ν•„μš”ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 호슀트 μ‹œμŠ€ν…œμ΄ x86을 μ‚¬μš©ν•˜κ³  λŒ€μƒ μ‹œμŠ€ν…œμ΄ MIPS32λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 호슀트의 일반 컴파일 도ꡬ 체인은 x86μ—μ„œ μ‹€ν–‰λ˜κ³  x86 용 μ½”λ“œλ₯Ό μƒμ„±ν•˜λ©° ꡐ차 컴파일 도ꡬ 체인은 x86μ—μ„œ μ‹€ν–‰λ˜κ³  MIPS32 용 μ½”λ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

μžμ‹ μ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μˆ˜λ™μœΌλ‘œ κ΅¬μ„±ν•˜κ³  μ»΄νŒŒμΌν•˜λŠ” 것이 κ°€λŠ₯ν•˜μ§€λ§Œ OpenWrt의 λΉŒλ“œ μ‹œμŠ€ν…œμ€μ΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜μ—¬ λŒ€λΆ€λΆ„μ˜ μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ˜ λͺ…λ Ήμ–΄ μ„ΈνŠΈ μ•„ν‚€ν…μ²˜μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

OpenWrt의 λΉŒλ“œ μ‹œμŠ€ν…œμ€ 개발자용으둜 μ„€κ³„λ˜μ—ˆμ§€λ§Œ κ²½ν—˜μ΄ λΆ€μ‘±ν•œ μ‚¬μš©μžλŠ” 이λ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ‹ μ˜ λ§žμΆ€ν˜• νŽŒμ›¨μ–΄λ₯Ό μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€!

OpenWrt Makefile은 기쑴의 Makefile of Linux make λ„κ΅¬μ™€λŠ” λ‹€λ₯Έ 자체 ꡬ문을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. OpenWrt Makefile은 νŒ¨ν‚€μ§€μ˜ 메타 정보, νŒ¨ν‚€μ§€ λ‹€μš΄λ‘œλ“œ μœ„μΉ˜, 컴파일 방법, 컴파일 된 λ°”μ΄λ„ˆλ¦¬ μ„€μΉ˜ μœ„μΉ˜ 등을 μ •μ˜ν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ OpenWrt μ‘μš© ν”„λ‘œκ·Έλž¨ νŒ¨ν‚€μ§€ μž‘μ„± 방법을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

OpenWrt λΉŒλ“œ μ‹œμŠ€ν…œ - κΈ°λŠ₯

μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‰½κ²Œ ν¬νŒ… ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λŠ₯ ꡬ성을 μœ„ν•΄ kconfig (Linux 컀널 menuconfig) μ‚¬μš© 톡합 된 크둜슀 컴파일러 툴체인 (gcc, ld, ...)을 μ œκ³΅ν•©λ‹ˆλ‹€. autotools (automake, autoconf), cmake, scons에 λŒ€ν•œ 좔상화λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. ν‘œμ€€ λ‹€μš΄λ‘œλ“œ, 패치, ꡬ성, 컴파일 및 νŒ¨ν‚€μ§• μ›Œν¬ ν”Œλ‘œμš° 처리 잘λͺ»λœ νŒ¨ν‚€μ§€ μž‘λ™μ„μœ„ν•œ μ—¬λŸ¬ κ°€μ§€ 일반적인 ν”½μŠ€ μ—… 제곡

OpenWrt λΉŒλ“œ μ‹œμŠ€ν…œ - νƒ€κ²Ÿ λ§Œλ“€κΈ°

ν‘œμ€€ νŒ¨ν‚€μ§€ μ›Œν¬ ν”Œλ‘œμš°λ₯Όμœ„ν•œ λ‹€μˆ˜μ˜ μƒμœ„ 레벨 μž‘μ„± λŒ€μƒ 제곡 λŒ€μƒμ€ 항상 "ꡬ성 μš”μ†Œ / 이름 / μž‘μ—…"ν˜•μ‹μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€ (예 : "toolchain / gdb / compile"λ˜λŠ” "package / mtd / install" νŒ¨ν‚€μ§€ μ†ŒμŠ€ 트리 μ€€λΉ„ : package / foo / prepare νŒ¨ν‚€μ§€ 컴파일 : package / foo / compile νŒ¨ν‚€μ§€ 정리 : package / foo / clean

OpenWrt λΉŒλ“œ μ‹œμŠ€ν…œ - λΉŒλ“œ μ‹œν€€μŠ€

도ꡬ - automake, autoconf, sed, cmake toolchain / binutils - as, ld, ... 툴체인 / gcc - gcc, g ++, cpp, ... target / linux - 컀널 λͺ¨λ“ˆ νŒ¨ν‚€μ§€ - μ½”μ–΄ 및 ν”Όλ“œ νŒ¨ν‚€μ§€ target / linux - 컀널 이미지 target / linux / image - νŽŒμ›¨μ–΄ 이미지 파일 생성 밑쀄 친 TextItalic ν…μŠ€νŠΈ

패치 관리

λ§Žμ€ νŒ¨ν‚€μ§€κ°€ κ·ΈλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° λŒ€μƒμ—μ„œ μž‘μ—…ν•˜κ±°λ‚˜ μ»΄νŒŒμΌν•˜λŠ” νŒ¨μΉ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ‰¬μš΄ 패치 관리λ₯Ό μœ„ν•΄ OpenWrt λΉŒλ“œ μ‹œμŠ€ν…œμ΄ ν€ΌνŠΈλ₯Ό ν†΅ν•©ν•©λ‹ˆλ‹€. νŒ¨ν‚€μ§€ 패치λ₯Ό ν€ΌνŠΈ μ‹œλ¦¬μ¦ˆλ‘œ λ°”κΎΈκΈ° : make package / foo / prepare QUILT = 1 μˆ˜μ • 된 μ‹œλ¦¬μ¦ˆμ—μ„œ 패치 μ—…λ°μ΄νŠΈ : make package / foo / update μ—…λ°μ΄νŠΈ ν›„ 패치λ₯Ό μžλ™μœΌλ‘œ λ¦¬λ² μ΄μŠ€ν•©λ‹ˆλ‹€. make package / foo / refresh

νŒ¨ν‚€μ§• κ³ λ € 사항

μ£Όμš” λͺ©ν‘œλŠ” λ©”λͺ¨λ¦¬μ™€ 크기가 μž‘λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ—μ„œ μ˜λ―Έκ°€μ—†λŠ” κΈ°λŠ₯은 configureλ₯Ό 톡해 λΉ„ν™œμ„±ν™”λ˜κ±°λ‚˜ νŒ¨μΉ˜κ°€ μ μš©λ©λ‹ˆλ‹€. νŒ¨ν‚€μ§€λŠ” 호슀트 μ‹œμŠ€ν…œμ— 관계없이 컴파일 κ°€λŠ₯ν•΄μ•Όν•˜λ©° 자체 ν¬ν•¨λ˜μ–΄μ•Όν•©λ‹ˆλ‹€. 선적 된 "configure"μŠ€ν¬λ¦½νŠΈλŠ” 크둜슀 컴파일 μ„€μ •, autoreconf λ˜λŠ” νŒ¨μΉ˜κ°€ ν•„μš”ν•œ 경우 μ’…μ’… 잘λͺ»λ˜μ—ˆκ±°λ‚˜ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ³€ν˜• 및 kconfigμ—λŠ” ꡬ성 κ°€λŠ₯ν•œ 컴파일 νƒ€μž„ 섀정이 ν¬ν•¨λ©λ‹ˆλ‹€. μ†Œν”„νŠΈμ›¨μ–΄ ν¬νŒ…μ„μœ„ν•œ ν‘œμ€€ 방법은 μ—†μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ 경우 "κ·Έλƒ₯ μž‘λ™"ν•˜μ§€λ§Œ μ’…μ’… νŒ¨ν‚€μ§€ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€μ— κ°œμ‘°κ°€ ν•„μš”ν•©λ‹ˆλ‹€.