실험을 위해 OpenWrt 패키지를 수정하는 방법

실험을 위해 OpenWrt 패키지를 수정하는 방법

OpenWrt 문서는 개발이나 실험을 위해 패키지를 빠르게 변경하는 방법에 대해 매우 모호합니다. 표준 OpenWrt 저장소에서 패키지를 수정하는 방법에 대한 단계별 지침이 있습니까?

답변1

메모:OpenWRT 릴리스 23.05.2, ipq806x아키텍처 및 패키지가 odhcpd-ipv6only예로 사용됩니다.

  1. 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
  1. 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
  1. 피드 업데이트
./scripts/feeds update -a
  1. 빌드 구성
./scripts/feeds install odhcpd-ipv6only
  1. .config 업데이트
make menuconfig
  • "네트워크" odhcpd-ipv6only가 선택되어 있는지 확인하세요
  1. 짓다

참고: odhcpd-ipv6only를 선택하더라도 패키지 이름은 여전히 ​​odhcpd입니다.

make -j $(nproc) package/odhcpd/compile
  1. 빌드가 성공하면 다운로드한 아카이브에서 패키지 소스의 복사본을 만듭니다.

    참고: 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
  1. 환경 변수를 설정 STAGING_DIR하고 업데이트합니다.PATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
  1. 패키지 폴더의 내용을 조사하여 빌드 방법을 알아보세요.
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e

odhcpd가 ninja와 함께 cmake를 사용한다고 추론할 수 있습니다.

  1. 성공적인 빌드 폴더에서 CMakeCache.txt를 복제하고 필요에 따라 조정합니다.
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
  1. 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으로 변경하세요 .-OgCMAKE_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
  1. 빌드해 보세요
cmake .
ninja -v

다행히 성공이었기를 바랍니다.

  1. src 폴더의 C 코드를 변경합니다.

  2. 재구축

ninja -v
  1. 빌드된 바이너리를 Rowter에 복사합니다.
scp odhcpd router:/tmp
  1. 원격 디버깅 사용

a) 라우터에서 gdbserver를 시작합니다.

gdbserver :1234 /tmp/odhcpd

b) 빌드 클라이언트에서 gdbserver에 연결하여 디버그합니다. (gdb가 라우터 주소를 확인할 수 없기 때문에 명시적인 IP 주소가 필요합니다)

~/sdk/scripts/remote-gdb 192.168.0.1:1234 ~/src/odhcpd/odhcpd

관련 정보