
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.2
La versión , ipq806x
la arquitectura y el paquete de OpenWRT odhcpd-ipv6only
se utilizan como ejemplo.
- 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
- 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
- Actualizar feeds
./scripts/feeds update -a
- Configurar compilación
./scripts/feeds install odhcpd-ipv6only
- Actualizar .config
make menuconfig
- "Red" Asegúrese de que odhcpd-ipv6only esté seleccionado
- Construir
NOTA: incluso si se seleccionó odhcpd-ipv6only, el nombre del paquete sigue siendo odhcpd
make -j $(nproc) package/odhcpd/compile
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
- Establezca
STAGING_DIR
la variable env y actualice elPATH
export STAGING_DIR=~/sdk/staging_dir
PATH=$STAGING_DIR/host/bin:$PATH
- 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
- 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 .
- 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:STRING
la 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
-Os
a-Og
inCMAKE_C_FLAGS:STRING
para 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
- Intenta construir
cmake .
ninja -v
Ojalá haya sido un éxito.
Realizar cambios en el código C en la carpeta src
Reconstruir
ninja -v
- Copie el binario construido al remero
scp odhcpd router:/tmp
- 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