Cómo modificar un paquete OpenWrt para experimentar

Cómo modificar un paquete OpenWrt para experimentar

La documentación de OpenWrt es muy confusa sobre cómo realizar cambios rápidos en un paquete para desarrollo o experimentación. ¿Existen instrucciones paso a paso sobre cómo modificar un paquete del repositorio estándar de OpenWrt?

Respuesta1

NOTA:23.05.2La versión , ipq806xla arquitectura y el paquete de OpenWRT odhcpd-ipv6onlyse utilizan como ejemplo.

  1. Descomprimir 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. Crear feeds.conf:
cp feeds.config.default feeds.config

modifique feeds.config al mínimo para una compilación más rápida:

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. Actualizar feeds
./scripts/feeds update -a
  1. Configurar compilación
./scripts/feeds install odhcpd-ipv6only
  1. Actualizar .config
make menuconfig
  • "Red" Asegúrese de que odhcpd-ipv6only esté seleccionado
  1. Construir

NOTA: incluso si se seleccionó odhcpd-ipv6only, el nombre del paquete sigue siendo odhcpd

make -j $(nproc) package/odhcpd/compile
  1. Si la compilación se realiza correctamente, cree una copia del origen del paquete desde el archivo descargado.

    NOTA: Existen medidas de seguridad en el proceso de compilación de OpenWrt para evitar que se modifique el código fuente. Se necesita una copia para realizar cambios.

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. Establezca STAGING_DIRla variable env y actualice elPATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
  1. Examine el contenido de la carpeta del paquete para tener una idea de cómo construirlo.
ls ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e

Puedes deducir que odhcpd usa cmake con ninja

  1. Clone CMakeCache.txt de la carpeta de compilación exitosa y realice los ajustes necesarios.
cp ~/sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only/odhcpd-2023-10-24-d8118f6e/CMakeCache.txt .
  1. Editar CMakeCache.txt
  • Reemplazar todas las apariciones de
sdk/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/odhcpd-ipv6only

con

src
  • También reemplace todas las apariciones de
odhcpd-2023-10-24-d8118f6e

con

odhcpd
  • Agregue la siguiente ruta de biblioteca a CMAKE_EXE_LINKER_FLAGS:STRINGla definición

NOTA: Es un misterio cómo se agrega esta entrada durante el proceso de compilación nativo de OpenWrt. Si alguien tiene una idea, por favor comente.

-L/home/user/sdk/staging_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/usr/lib

Debería verse así:

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
  • Cambie -Osa -Ogin CMAKE_C_FLAGS:STRINGpara omitir la optimización del compilador.
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. Intenta construir
cmake .
ninja -v

Ojalá haya sido un éxito.

  1. Realizar cambios en el código C en la carpeta src

  2. Reconstruir

ninja -v
  1. Copie el binario construido al remero
scp odhcpd router:/tmp
  1. Usar depuración remota

a) Inicie gdbserver en el enrutador

gdbserver :1234 /tmp/odhcpd

b) Conéctese a gdbserver desde el cliente de compilación para depurar. (Se necesita una dirección IP explícita porque gdb no puede resolver la dirección del enrutador)

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

información relacionada