Patches - Leo-Mun/UROP_SDN GitHub Wiki
OpenWrt Buildroot๋ ๊ฐํธํ ํจ์น ๊ด๋ฆฌ๋ฅผ ์ํด ํผํธ(Quilt)๋ฅผ ํตํฉํฉ๋๋ค. ์ด ๋ฌธ์์์๋ ์ ํจ์น ์ถ๊ฐ ๋๋ ๊ธฐ์กด ํจ์น ํธ์ง๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ํจ์น ์์ ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
Quilt๊ฐ OpenWrts ์ ํธ ํ์์ผ๋ก ํจ์น๋ฅผ ์์ฑํ๊ฒํ๋ ค๋ฉด ๊ณตํต diff ๋ฐ ํจ์น ์ต์ ์ ํฌํจํ๋ ๊ตฌ์ฑ ํ์ผ .quiltrc๋ฅผ ๋ก์ปฌ ํ ๋๋ ํ ๋ฆฌ์ ์์ฑํด์ผํฉ๋๋ค.
cat > ~/.quiltrc QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab --color=auto" QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab" QUILT_SERIES_ARGS="--color=auto" QUILT_PATCH_OPTS="--unified" QUILT_DIFF_OPTS="-p" EDITOR="nano"
๊ธฐ์กด ํจํค์ง ์์ ์ ์์ ํ ์๋ก์ด ํจ์น๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์์ค ๋๋ ํ ๋ฆฌ๋ฅผ ์ค๋นํ์ญ์์ค.
make package/example/{clean,prepare} V=s QUILT=1
ํธ์คํธ ์ธก ํจํค์ง์ ๊ฒฝ์ฐ make ๋์์ ์์ธํ ์ค๋ช ํ ์ ์์ต๋๋ค.
make package/example/host/{clean,prepare} V=s QUILT=1
์ด๋ ๊ฒํ๋ฉด ์์ค ํ๋ณผ์ ์์ถ์ ํ๊ณ ๊ธฐ์กด ํจ์น๋ฅผ ํผํธ ํจ์น ์๋ฆฌ์ฆ (์๋ ๊ฒฝ์ฐ)๋ก ์ค๋นํฉ๋๋ค. ์์ธํ ์ถ๋ ฅ์๋ ์์ค๊ฐ ์ถ์ถ ๋ ์์น๊ฐ ํ์๋ฉ๋๋ค.
์ค๋น๋ ์์ค ๋๋ ํ ๋ฆฌ๋ก ๋ณ๊ฒฝํ์ญ์์ค.
cd build_dir/target-*/example-*
์ฐธ๊ณ : build_dir / target - * / BUILD_VARIANT / example- *์์ ์์ค๋ฅผ ์ถ์ถ ํ ๋ ๋ ๋ฒจ์ ํ ๋จ๊ณ ๋ฎ์ถ์ด์ผ ํ ์๋ ์์ต๋๋ค. ์ด๊ฒ์ ํจํค์ง์ ์ฌ๋ฌ ๋น๋ ๋ณํ์ด Makefile์ ์ ์ ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
quilt push์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด์ ๋ชจ๋ ํจ์น๋ฅผ ์ ์ฉํ์ญ์์ค.
quilt push -a
quilt ์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ ๋น ํจ์น ํ์ผ์ ๋ง๋ญ๋๋ค.
quilt new 010-main_code_fix.patch
- ์ด๋ฆ์ ์ซ์๋ก ์์ํด์ผํ๋ฉฐ ๊ทธ ๋ค์ ํ์ดํ๊ณผ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ด ์์ด์ผํฉ๋๋ค
- ์ ํํ ์๋ ๊ธฐ์กด ํจ์น๋ณด๋ค ๋์์ผํฉ๋๋ค. ํจ์น ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด ํผํธ ๊ณ์ด์ ์ฌ์ฉํ์ญ์์ค.
- ํจ์น ํ์ผ ์ด๋ฆ์ ์งง์์ผํ์ง๋ง ์ค๋ช ์ด ์์ด์ผํฉ๋๋ค.
๋น ํจ์น๋ฅผ ์์ฑํ ํ์๋ ํธ์ง ํ ํ์ผ์ ํ์ผ๊ณผ ์ฐ๊ด์์ผ์ผํฉ๋๋ค. ํผํธ ์ถ๊ฐ ๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค - ์ผ๋จ ํ์ผ์ด ์ถ๊ฐ๋๋ฉด ํ์์ ๊ฐ์ด ํธ์ง ํ ์ ์์ต๋๋ค.
ํ์ผ์ ์ถ๊ฐํ๊ณ ํธ์ง๊ธฐ์์ ์ด์ด ๋ณธ ๋ฐ๋ก ๊ฐ๊ธฐ๋ quilt edit ๋ช
๋ น์
๋๋ค.
quilt edit src/main.c
- src / main.c๊ฐ 010-main_code_fix.patch์ ์ถ๊ฐ๋ฉ๋๋ค.
- ์ด ํ์ผ์ .quiltrc์ EDITOR๋ก ์ง์ ๋ ํธ์ง๊ธฐ์์ ์ด๋ฆฝ๋๋ค.
ํธ์ง ํ ํ์๊ฐ ์๋ ๋ชจ๋ ํ์ผ์ ๋ํด ์ด๊ฒ์ ๋ฐ๋ณตํ์ญ์์ค.
๋ณ๊ฒฝ์ด ๋๋๋ฉด quilt diff ๋ช
๋ น์ผ๋ก ๊ฒํ ํ ์ ์์ต๋๋ค.
quilt diff
diff๊ฐ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ผ๋ฉด, ํผํธ ์๋ก ๊ณ ์นจ์ ์งํํ์ฌ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ผ๋ก 010-main_code_fix.patch ํ์ผ์ ์ ๋ฐ์ดํธํ์ญ์์ค.
quilt refresh
buildroot์ ์ต์์ ๋๋ ํ ๋ฆฌ๋ก ๋ค์ ๋ณ๊ฒฝํ์ญ์์ค.
cd ../../../
์ ํจ์น ํ์ผ์ buildroot๋ก ์ด๋ํ๋ ค๋ฉด ํจํค์ง์์ update๋ฅผ ์คํํ์ญ์์ค.
make package/example/update V=s
๋ง์ง๋ง์ผ๋ก ํจํค์ง๋ฅผ ๋ค์ ๋น๋ํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ์ญ์์ค.
make package/example/{clean,compile} package/index V=s
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํจ์น๋ฅผ ๋ค์ ํธ์งํด์ผํฉ๋๋ค. ๊ธฐ์กด ํจ์น๋ฅผ ํธ์งํ๋ ๋ฐฉ๋ฒ์ ์๋ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์์ค ๋๋ ํ ๋ฆฌ๋ฅผ ์ค๋นํ๋ ๊ฒ์ผ๋ก ์์ํ์ญ์์ค.
make package/example/{clean,prepare} V=s QUILT=1
์ค๋น๋ ์์ค ๋๋ ํ ๋ฆฌ๋ก ๋ณ๊ฒฝํ์ญ์์ค.
cd build_dir/target-*/example-*
์ฌ์ฉ ๊ฐ๋ฅํ ํจ์น ๋ชฉ๋ก์ ๋์ดํ์ญ์์ค.
quilt series
ํธ์งํด์ผ ํ ํจ์น๋ก ์ด๋ :
quilt push 010-main_code_fix.patch
- ์ ํจํ ํจ์น ํ์ผ ์ด๋ฆ์ ์ ๋ฌํ ๋, ํผํธ๋ ์ง์ ๋ ํจ์น์ ๋๋ฌ ํ ๋๊น์ง๋ง ๊ณ์ด์ ์ ์ฉํฉ๋๋ค
- ํ์คํ์ง ์์ ๊ฒฝ์ฐ ํผํธ ๊ณ์ด์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํจ์น๋ฅผ ํ์ธํ๊ณ ์๋จ์ ํผํธํ์ฌ ํ์ฌ ์์น๋ฅผ ํ์ธํ์ญ์์ค
- ํ์ฌ ์์น๊ฐ ์ํ๋ ํจ์น์ ์ผ์นํ๋ฉด ํผํธ ํ์ ์ฌ์ฉํ์ฌ ๋ฐ๋ ์์๋ก ํจ์น๋ฅผ ์ ๊ฑฐํ์ญ์์ค
- "๊ฐ์ ์คํ"ํธ์ ์ต์ (์ : quilt push -f 010-main_code_fix.patch)์ ์ฌ์ฉํ์ฌ ๊นจ์ง (์ฆ, ๊ฑฐ๋ถ ๋) ํจ์น๋ฅผ ๋ํ์์ผ๋ก ์ ์ฉ ํ ์ ์์ต๋๋ค
quilt edit ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํจ์น ๋ ํ์ผ์ ํธ์งํ๊ณ ๋ณ๊ฒฝ์ด ํ์ํ ๋ชจ๋ ํ์ผ์ ๋ํด ๋ฐ๋ณตํฉ๋๋ค.
quilt edit src/main.c
ํจ์น์ ํฌํจ๋ ํ์ผ์ ํ์ธํ์ญ์์ค
quilt files
quilt diff๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํ์ญ์์ค.
quilt diff
diff๊ฐ ๊ด์ฐฎ์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด ํผํธ ์๋ก ๊ณ ์นจ์ ์งํํ์ฌ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ผ๋ก ํ์ฌ ํจ์น๋ฅผ ์ ๋ฐ์ดํธํ์ญ์์ค.
quilt refresh
buildroot์ ์ต์์ ๋๋ ํ ๋ฆฌ๋ก ๋ค์ ๋ณ๊ฒฝํ์ญ์์ค.
cd ../../../
์ ๋ฐ์ดํธ ๋ ํจ์น ํ์ผ์ buildroot๋ก ์ด๋ํ๋ ค๋ฉด ํจํค์ง์์ update๋ฅผ ์คํํ์ญ์์ค.
make package/example/update V = s
๋ง์ง๋ง์ผ๋ก ํจํค์ง๋ฅผ ๋ค์ ๋น๋ํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ์ญ์์ค.
package/example/{clean,compile} package/index V=s
์ปค๋ ํจ์น ์์ ํ๋ก์ธ์ค๋ ํจํค์ง์ ๊ฒฝ์ฐ์ ๋์ผํ๋ฉฐ make ๋์๊ณผ ๋๋ ํ ๋ฆฌ ๋ง ๋ค๋ฆ
๋๋ค.
์ปค๋์ ๊ฒฝ์ฐ ํจ์น ์ฉ ํ์ ๋๋ ํ ๋ฆฌ๊ฐ ์ถ๊ฐ๋ก ์ฌ์ฉ๋๋ฉฐ ์ผ๋ฐ / ๋ชจ๋ ์ํคํ
์ฒ์ ๊ณตํต์ ์ธ ํจ์น๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ํ๋ซํผ / ํ์ฌ ๋์์ ๊ด๋ จ๋ ํจ์น๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์ปค๋ ํธ๋ฆฌ๋ฅผ ์ค๋นํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ญ์์ค.
make target/linux/{clean,prepare} V=s QUILT=1
์์ธ ์กฐ์ ์ ์ํด ์์ค ํธ๋ฆฌ๋ linux-architecture ํ์ ๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค.
cd build_dir/linux-*/linux-3.*
Barrier Breaker (ํธ๋ ํฌ)์ ๊ฒฝ์ฐ, ์์ค ํธ๋ฆฌ๋ target-architecture ์๋ธ ๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค (์ ์ฌ์ ์ผ๋ก ์๋ธ ํ ์ด๋ธ์ด ์์).
cd build_dir/target-*/linux-*/linux-3.*
๋ณ๊ฒฝ ์ฌํญ์ ๋น๋ ํธ๋ฆฌ์์ buildroot ํธ๋ฆฌ๋ก ๋ค์ ์ด๋ํ๋ฉด ๋ค์ ์์ ์ด ์ํ๋ฉ๋๋ค (์ด ์์ ์ ์ํํ๋ ค๋ฉด ํธ๋ ํฌ๋ก ๋์ ๊ฐ์ผํฉ๋๋ค).
make target/linux/update package/index V=s
(:! : ์ฌ๋ฐ๋ฅธ ์ ๋์ฌ์ธ platform/000-abc.patch ๋๋ generic/000-abc.patch๋ก ํจ์น ์ด๋ฆ์ ์ง์ ํด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๋ฐ์ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.)
๊ทธ ํ, ์ฐ๋ฆฌ์ ํจ์น๊ฐ ์ ์ฉ๋์๋์ง ์๋์ง๋ฅผ ํ์ธํ๊ณ ์ํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ต์์ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ ์ ์์ต๋๋ค.
cd ../../../../
๊ทธ๋ฆฌ๊ณ ์์ ์์ํ ๋ฆฌ๋ ์ค ํด๋๋ฅผ ๋ค์ ์ค๋นํ๊ธฐ
make target/linux/{clean,prepare} V=s QUILT=1
์ด ๊ณผ์ ์์ ์ ์ฉ๋ ๋ชจ๋ ํจ์น๊ฐ ํ์ ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํจ์น๋ฅผ ๋ฐฐ์นํ ๋๋ ํ ๋ฆฌ์ ๋ฐ๋ผ generic / or platform /์ผ๋ก ์์๋ฉ๋๋ค. ์ ์ฉ๋ ํจ์น๋ฅผ ๊ฒ์ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์
quilt series
์ด์ ์น์ ์์ ์ค๋ช ํ๋๋ก _make target/linux/{clean,prepare}_์ ๋ง๋ ํ์
์ : gcc :
tool tree๋ฅผ ์ค๋นํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ญ์์ค.
make toolchain/gcc/{clean,prepare} V=99 QUILT=1
์์ค ํธ๋ฆฌ๋ ์ ํํ lib ๋ฐ gcc์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
cd build_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/gcc-4.3.3
ํจ์น๋ฅผ ์๋ก ๊ณ ์น๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค
make toolchain/gcc/update V=99
ํจ์น๋ ํจํค์ง (๋๋ ์ปค๋)๊ฐ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋๋ฉด ๊ธฐ์กด ํจ์น๊ฐ ๋ ์ด์ ์ ์ฉ๋์ง ์์ ์ ์์ผ๋ฉฐ ํจ์น๋ฅผ ์ ์ฉ ํ ๋ ํจ์น๊ฐ ์ ๋๋ก ํ์๋์ง ์์ ์ ์์ต๋๋ค. ์ ์ฒด ํจ์น ์๋ฆฌ์ฆ๋ฅผ rebaseํ๊ธฐ ์ํด์๋ refresh make target์ ์ฌ์ฉํ ์ ์์ต๋๋ค :
make package/example/refresh V=s
์ปค๋์ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ์ญ์์ค.
make target/linux/refresh V=s