
OpenWrt 문서는 개발이나 실험을 위해 패키지를 빠르게 변경하는 방법에 대해 매우 모호합니다. 표준 OpenWrt 저장소에서 패키지를 수정하는 방법에 대한 단계별 지침이 있습니까?
답변1
메모:OpenWRT 릴리스 23.05.2
, ipq806x
아키텍처 및 패키지가
odhcpd-ipv6only
예로 사용됩니다.
- SDK 언팩
cd ~/
tar xf openwrt-sdk-23.05.2-ipq806x-generic_gcc-12.3.0_musl_eabi.Linux-x86_64.tar.xz
mv openwrt-sdk-23.05.2-ipq806x-generic_gcc-12.3.0_musl_eabi.Linux-x86_64 sdk
cd ~/sdk
- Feeds.conf를 생성합니다:
cp feeds.config.default feeds.config
더 빠른 빌드를 위해 Feeds.config를 최소로 수정하십시오.
src-git-full base https://git.openwrt.org/openwrt/openwrt.git;openwrt-23.05
src-git packages https://git.openwrt.org/feed/packages.git^8e3a1824645f5e73ec44c897ac0755c53fb4a1f8
- 피드 업데이트
./scripts/feeds update -a
- 빌드 구성
./scripts/feeds install odhcpd-ipv6only
- .config 업데이트
make menuconfig
- "네트워크" odhcpd-ipv6only가 선택되어 있는지 확인하세요
- 짓다
참고: odhcpd-ipv6only를 선택하더라도 패키지 이름은 여전히 odhcpd입니다.
make -j $(nproc) package/odhcpd/compile
빌드가 성공하면 다운로드한 아카이브에서 패키지 소스의 복사본을 만듭니다.
참고: OpenWrt 빌드 프로세스에는 소스 코드가 수정되는 것을 방지하기 위한 보호 장치가 있습니다. 변경하려면 사본이 필요합니다.
mkdir ~/src
cd ~/src/
tar xf ~/sdk/dl/odhcpd-2023-10-24-d8118f6e.tar.xz
mv odhcpd-2023-10-24-d8118f6e odhcpd # just to shorten the name
cd odhcpd
- 환경 변수를 설정
STAGING_DIR
하고 업데이트합니다.PATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
- 패키지 폴더의 내용을 조사하여 빌드 방법을 알아보세요.
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e
odhcpd가 ninja와 함께 cmake를 사용한다고 추론할 수 있습니다.
- 성공적인 빌드 폴더에서 CMakeCache.txt를 복제하고 필요에 따라 조정합니다.
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
- CMakeCache.txt 편집
- 다음 항목을 모두 바꿉니다.
sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only
~와 함께
src
- 또한 다음 항목을 모두 교체합니다.
odhcpd-2023-10-24-d8118f6e
~와 함께
odhcpd
CMAKE_EXE_LINKER_FLAGS:STRING
정의 에 다음 라이브러리 경로를 추가합니다.
참고: 기본 OpenWrt 빌드 프로세스 중에 이 항목이 어떻게 추가되는지는 미스터리입니다. 누군가 아이디어가 있다면 댓글을 달아주세요.
-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib
다음과 같아야 합니다.
CMAKE_EXE_LINKER_FLAGS:STRING=-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib -DPIC -fpic -specs=/home/user/sdk/include/hardened-ld-pie.specs -znow -zrelro
- 컴파일러 최적화를 건너뛰려면 in
-Os
으로 변경하세요 .-Og
CMAKE_C_FLAGS:STRING
CMAKE_C_FLAGS:STRING=-Og -pipe -g3 -fno-caller-saves -fno-plt -fhonour-copts -mfloat-abi=hard -Wformat -Werror=format-security -DPIC -fpic -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro
- 빌드해 보세요
cmake .
ninja -v
다행히 성공이었기를 바랍니다.
src 폴더의 C 코드를 변경합니다.
재구축
ninja -v
- 빌드된 바이너리를 Rowter에 복사합니다.
scp odhcpd router:/tmp
- 원격 디버깅 사용
a) 라우터에서 gdbserver를 시작합니다.
gdbserver :1234 /tmp/odhcpd
b) 빌드 클라이언트에서 gdbserver에 연결하여 디버그합니다. (gdb가 라우터 주소를 확인할 수 없기 때문에 명시적인 IP 주소가 필요합니다)
~/sdk/scripts/remote-gdb 192.168.0.1:1234 ~/src/odhcpd/odhcpd